From d9aa67b4bd66adb1124f5dd9a80274179a5214d1 Mon Sep 17 00:00:00 2001 From: Severin Denisenko <81779013+SeverinDenisenko@users.noreply.github.com> Date: Fri, 13 Dec 2024 05:08:38 +0300 Subject: [PATCH 01/13] Add wcslib dep --- CMakeLists.txt | 1 + astroimsumlib/CMakeLists.txt | 6 +- deps/wcslib/C/GNUmakefile | 567 + deps/wcslib/C/cel.c | 575 + deps/wcslib/C/cel.h | 527 + deps/wcslib/C/dis.c | 3725 ++ deps/wcslib/C/dis.h | 1224 + deps/wcslib/C/fitshdr.c | 12372 ++++++ deps/wcslib/C/fitshdr.h | 449 + deps/wcslib/C/fitshdr.l | 626 + deps/wcslib/C/flexed/README | 6 + deps/wcslib/C/flexed/fitshdr.c | 12372 ++++++ deps/wcslib/C/flexed/wcsbth.c | 32201 ++++++++++++++++ deps/wcslib/C/flexed/wcspih.c | 26681 +++++++++++++ deps/wcslib/C/flexed/wcsulex.c | 10003 +++++ deps/wcslib/C/flexed/wcsutrn.c | 6289 +++ deps/wcslib/C/getwcstab.c | 151 + deps/wcslib/C/getwcstab.h | 190 + deps/wcslib/C/lin.c | 1390 + deps/wcslib/C/lin.h | 810 + deps/wcslib/C/log.c | 97 + deps/wcslib/C/log.h | 164 + deps/wcslib/C/prj.c | 8647 +++++ deps/wcslib/C/prj.h | 919 + deps/wcslib/C/spc.c | 1463 + deps/wcslib/C/spc.h | 987 + deps/wcslib/C/sph.c | 448 + deps/wcslib/C/sph.h | 248 + deps/wcslib/C/spx.c | 1118 + deps/wcslib/C/spx.h | 590 + deps/wcslib/C/tab.c | 1750 + deps/wcslib/C/tab.h | 706 + deps/wcslib/C/test/DSS.keyrec | 244 + deps/wcslib/C/test/SIP.keyrec | 107 + deps/wcslib/C/test/SIPTPV.keyrec | 901 + deps/wcslib/C/test/TNX.keyrec | 65 + deps/wcslib/C/test/TPV3.keyrec | 76 + deps/wcslib/C/test/TPV5.keyrec | 98 + deps/wcslib/C/test/TPV7.keyrec | 245 + deps/wcslib/C/test/ZPX.keyrec | 66 + deps/wcslib/C/test/bth.keyrec | 495 + deps/wcslib/C/test/fitshdr.keyrec | 160 + deps/wcslib/C/test/pih.keyrec | 411 + deps/wcslib/C/test/tbth1.c | 290 + deps/wcslib/C/test/tbth1.out | 1291 + deps/wcslib/C/test/tcel1.c | 327 + deps/wcslib/C/test/tcel2.c | 582 + deps/wcslib/C/test/tdis1.c | 612 + deps/wcslib/C/test/tdis2.c | 260 + deps/wcslib/C/test/tdis2.out | 711 + deps/wcslib/C/test/tdis3 | 58 + deps/wcslib/C/test/tdis3.out | 324 + deps/wcslib/C/test/tdisiter.c | 173 + deps/wcslib/C/test/tfitshdr.c | 285 + deps/wcslib/C/test/tfitshdr.out | 144 + deps/wcslib/C/test/tlin.c | 144 + deps/wcslib/C/test/tlog.c | 119 + deps/wcslib/C/test/tpih1.c | 202 + deps/wcslib/C/test/tpih1.out | 798 + deps/wcslib/C/test/tpih2.c | 209 + deps/wcslib/C/test/tpih_pthread.c | 172 + deps/wcslib/C/test/tprj1.c | 346 + deps/wcslib/C/test/tprj2.c | 478 + deps/wcslib/C/test/tspc.c | 358 + deps/wcslib/C/test/tspcaips.c | 61 + deps/wcslib/C/test/tspcspxe.c | 57 + deps/wcslib/C/test/tspctrne.c | 63 + deps/wcslib/C/test/tsph.c | 241 + deps/wcslib/C/test/tsphdpa.c | 80 + deps/wcslib/C/test/tspx.c | 268 + deps/wcslib/C/test/ttab1.c | 495 + deps/wcslib/C/test/ttab2.c | 274 + deps/wcslib/C/test/ttab3.c | 199 + deps/wcslib/C/test/tunits.c | 135 + deps/wcslib/C/test/tunits.out | 72 + deps/wcslib/C/test/twcs.c | 516 + deps/wcslib/C/test/twcs_locale.c | 96 + deps/wcslib/C/test/twcs_pthread.c | 181 + deps/wcslib/C/test/twcscompare.c | 112 + deps/wcslib/C/test/twcsfix.c | 285 + deps/wcslib/C/test/twcsfix.out | 453 + deps/wcslib/C/test/twcshdr.c | 245 + deps/wcslib/C/test/twcslint | 5 + deps/wcslib/C/test/twcslint.out | 863 + deps/wcslib/C/test/twcsmix.c | 830 + deps/wcslib/C/test/twcssub.c | 290 + deps/wcslib/C/test/twcssub.out | 620 + deps/wcslib/C/test/twcstab.c | 388 + deps/wcslib/C/test/twcstab.out | 3337 ++ deps/wcslib/C/test/units_test | 22 + deps/wcslib/C/test/wcslint.keyrec | 423 + deps/wcslib/C/test/wcspcx.keyrec | 70 + deps/wcslib/C/test/wcstab.keyrec | 122 + deps/wcslib/C/wcs.c | 4925 +++ deps/wcslib/C/wcs.h | 2341 ++ deps/wcslib/C/wcsbth.c | 32201 ++++++++++++++++ deps/wcslib/C/wcsbth.l | 3735 ++ deps/wcslib/C/wcserr.c | 202 + deps/wcslib/C/wcserr.h | 277 + deps/wcslib/C/wcsfix.c | 1483 + deps/wcslib/C/wcsfix.h | 656 + deps/wcslib/C/wcshdr.c | 2262 ++ deps/wcslib/C/wcshdr.h | 1365 + deps/wcslib/C/wcslib.h | 60 + deps/wcslib/C/wcsmath.h | 72 + deps/wcslib/C/wcspih.c | 26681 +++++++++++++ deps/wcslib/C/wcspih.l | 3078 ++ deps/wcslib/C/wcsprintf.c | 170 + deps/wcslib/C/wcsprintf.h | 150 + deps/wcslib/C/wcstrig.c | 202 + deps/wcslib/C/wcstrig.h | 214 + deps/wcslib/C/wcsulex.l | 1055 + deps/wcslib/C/wcsunits.c | 229 + deps/wcslib/C/wcsunits.h | 408 + deps/wcslib/C/wcsutil.c | 541 + deps/wcslib/C/wcsutil.h | 501 + deps/wcslib/C/wcsutrn.c | 6289 +++ deps/wcslib/C/wcsutrn.l | 366 + deps/wcslib/C/wtbarr.h | 120 + deps/wcslib/CHANGES | 3603 ++ deps/wcslib/CMakeLists.txt | 83 + deps/wcslib/COPYING | 674 + deps/wcslib/COPYING.LESSER | 165 + deps/wcslib/Fortran/GNUmakefile | 467 + deps/wcslib/Fortran/cel.inc | 80 + deps/wcslib/Fortran/cel_bindc.f90 | 74 + deps/wcslib/Fortran/cel_data.f | 40 + deps/wcslib/Fortran/cel_f.c | 330 + deps/wcslib/Fortran/dis.inc | 95 + deps/wcslib/Fortran/dis_bindc.f90 | 96 + deps/wcslib/Fortran/dis_data.f | 39 + deps/wcslib/Fortran/dis_f.c | 605 + deps/wcslib/Fortran/fitshdr.inc | 72 + deps/wcslib/Fortran/fitshdr_bindc.f90 | 92 + deps/wcslib/Fortran/fitshdr_data.f | 37 + deps/wcslib/Fortran/fitshdr_f.c | 306 + deps/wcslib/Fortran/getwcstab.inc | 27 + deps/wcslib/Fortran/getwcstab_f.c | 48 + deps/wcslib/Fortran/lin.inc | 86 + deps/wcslib/Fortran/lin_bindc.f90 | 38 + deps/wcslib/Fortran/lin_data.f | 40 + deps/wcslib/Fortran/lin_f.c | 409 + deps/wcslib/Fortran/log.inc | 40 + deps/wcslib/Fortran/log_data.f | 38 + deps/wcslib/Fortran/log_f.c | 60 + deps/wcslib/Fortran/prj.inc | 137 + deps/wcslib/Fortran/prj_bindc.f90 | 74 + deps/wcslib/Fortran/prj_data.f | 38 + deps/wcslib/Fortran/prj_f.c | 407 + deps/wcslib/Fortran/spc.inc | 84 + deps/wcslib/Fortran/spc_bindc.f90 | 301 + deps/wcslib/Fortran/spc_data.f | 39 + deps/wcslib/Fortran/spc_f.c | 543 + deps/wcslib/Fortran/sph.inc | 27 + deps/wcslib/Fortran/sph_f.c | 96 + deps/wcslib/Fortran/spx.inc | 130 + deps/wcslib/Fortran/spx_bindc.f90 | 39 + deps/wcslib/Fortran/spx_data.f | 38 + deps/wcslib/Fortran/spx_f.c | 150 + deps/wcslib/Fortran/tab.inc | 81 + deps/wcslib/Fortran/tab_bindc.f90 | 38 + deps/wcslib/Fortran/tab_data.f | 39 + deps/wcslib/Fortran/tab_f.c | 377 + deps/wcslib/Fortran/test/tcel1.f | 350 + deps/wcslib/Fortran/test/tdis1.f | 269 + deps/wcslib/Fortran/test/tdis2.f | 255 + deps/wcslib/Fortran/test/tdis2.out | 336 + deps/wcslib/Fortran/test/tfitshdr.f | 303 + deps/wcslib/Fortran/test/tfitshdr.out | 144 + deps/wcslib/Fortran/test/tlin.f | 143 + deps/wcslib/Fortran/test/tlog.f | 130 + deps/wcslib/Fortran/test/tpih1.f | 183 + deps/wcslib/Fortran/test/tpih1.out | 798 + deps/wcslib/Fortran/test/tpih2.f | 192 + deps/wcslib/Fortran/test/tprj1.f | 372 + deps/wcslib/Fortran/test/tprj2.f | 481 + deps/wcslib/Fortran/test/tspc.f | 421 + deps/wcslib/Fortran/test/tsph.f | 148 + deps/wcslib/Fortran/test/tspx.f | 267 + deps/wcslib/Fortran/test/ttab1.f | 269 + deps/wcslib/Fortran/test/ttab2.f | 289 + deps/wcslib/Fortran/test/ttab3.f | 216 + deps/wcslib/Fortran/test/tunits.f | 157 + deps/wcslib/Fortran/test/tunits.out | 72 + deps/wcslib/Fortran/test/twcs.f | 486 + deps/wcslib/Fortran/test/twcsfix.f | 303 + deps/wcslib/Fortran/test/twcsfix.out | 454 + deps/wcslib/Fortran/test/twcsmix.f | 818 + deps/wcslib/Fortran/test/twcssub.f | 182 + deps/wcslib/Fortran/test/twcssub.out | 478 + deps/wcslib/Fortran/test/twcstab.f | 175 + deps/wcslib/Fortran/test/twcstab.out | 3325 ++ deps/wcslib/Fortran/test/wcsleep_f.c | 23 + deps/wcslib/Fortran/wcs.inc | 229 + deps/wcslib/Fortran/wcs_bindc.f90 | 134 + deps/wcslib/Fortran/wcs_data.f | 47 + deps/wcslib/Fortran/wcs_f.c | 1200 + deps/wcslib/Fortran/wcserr.inc | 49 + deps/wcslib/Fortran/wcserr_bindc.f90 | 55 + deps/wcslib/Fortran/wcserr_f.c | 152 + deps/wcslib/Fortran/wcsfix.inc | 66 + deps/wcslib/Fortran/wcsfix_data.f | 45 + deps/wcslib/Fortran/wcsfix_f.c | 108 + deps/wcslib/Fortran/wcshdr.inc | 84 + deps/wcslib/Fortran/wcshdr_bindc.f90 | 60 + deps/wcslib/Fortran/wcshdr_data.f | 39 + deps/wcslib/Fortran/wcshdr_f.c | 184 + deps/wcslib/Fortran/wcsmath.inc | 27 + deps/wcslib/Fortran/wcsunits.inc | 88 + deps/wcslib/Fortran/wcsunits_bindc.f90 | 137 + deps/wcslib/Fortran/wcsunits_data.f | 62 + deps/wcslib/Fortran/wcsunits_f.c | 155 + deps/wcslib/GNUmakefile | 217 + deps/wcslib/INSTALL | 336 + deps/wcslib/README | 42 + deps/wcslib/THANKS | 122 + deps/wcslib/VALIDATION | 815 + deps/wcslib/config.log | 2072 + deps/wcslib/config.status | 1066 + deps/wcslib/config/ax_pthread.m4 | 522 + deps/wcslib/config/config.guess | 1486 + deps/wcslib/config/config.sub | 1806 + deps/wcslib/config/install-sh | 527 + deps/wcslib/configure | 9722 +++++ deps/wcslib/configure.ac | 634 + deps/wcslib/doxygen/Bonne.gif | Bin 0 -> 9356 bytes deps/wcslib/doxygen/Doxyfile | 2777 ++ deps/wcslib/doxygen/GNUmakefile | 111 + deps/wcslib/doxygen/README | 29 + deps/wcslib/doxygen/cel.sed | 21 + deps/wcslib/doxygen/cel_extras.dox | 35 + deps/wcslib/doxygen/dis.sed | 37 + deps/wcslib/doxygen/dis_extras.dox | 119 + deps/wcslib/doxygen/doxextr.l | 883 + deps/wcslib/doxygen/doxextr.sed | 80 + deps/wcslib/doxygen/fitshdr.sed | 13 + deps/wcslib/doxygen/fitshdr_extras.dox | 64 + deps/wcslib/doxygen/getwcstab.sed | 6 + deps/wcslib/doxygen/lin.sed | 3 + deps/wcslib/doxygen/lin_extras.dox | 68 + deps/wcslib/doxygen/mainpage.dox | 1294 + deps/wcslib/doxygen/prj.sed | 61 + deps/wcslib/doxygen/prj_extras.dox | 1204 + deps/wcslib/doxygen/spc.sed | 47 + deps/wcslib/doxygen/spc_extras.dox | 35 + deps/wcslib/doxygen/sph.sed | 13 + deps/wcslib/doxygen/spx.sed | 24 + deps/wcslib/doxygen/spx_extras.dox | 196 + deps/wcslib/doxygen/tab.sed | 9 + deps/wcslib/doxygen/tab_extras.dox | 47 + deps/wcslib/doxygen/wcs.sed | 40 + deps/wcslib/doxygen/wcs_extras.dox | 102 + deps/wcslib/doxygen/wcserr.sed | 5 + deps/wcslib/doxygen/wcsfix.sed | 31 + deps/wcslib/doxygen/wcsfix_extras.dox | 53 + deps/wcslib/doxygen/wcshdr.sed | 160 + deps/wcslib/doxygen/wcshdr_extras.dox | 295 + deps/wcslib/doxygen/wcsmath_extras.dox | 32 + deps/wcslib/doxygen/wcstrig.sed | 9 + deps/wcslib/doxygen/wcstrig_extras.dox | 9 + deps/wcslib/doxygen/wcsunits.sed | 5 + deps/wcslib/doxygen/wcsunits_extras.dox | 143 + deps/wcslib/doxygen/wcsutil.sed | 7 + deps/wcslib/flavours | 137 + deps/wcslib/html/Bonne.gif | Bin 0 -> 9356 bytes deps/wcslib/html/annotated.html | 117 + deps/wcslib/html/bc_s.png | Bin 0 -> 676 bytes deps/wcslib/html/bc_sd.png | Bin 0 -> 635 bytes deps/wcslib/html/cel_8h.html | 817 + deps/wcslib/html/cel_8h_source.html | 670 + deps/wcslib/html/classes.html | 127 + deps/wcslib/html/clipboard.js | 61 + deps/wcslib/html/closed.png | Bin 0 -> 132 bytes deps/wcslib/html/cookie.js | 58 + deps/wcslib/html/deprecated.html | 180 + deps/wcslib/html/diagnostics.html | 133 + .../dir_af99bb3c152a306abd27951285ad1127.html | 147 + deps/wcslib/html/dis_8h.html | 1149 + deps/wcslib/html/dis_8h_source.html | 1402 + deps/wcslib/html/doc.svg | 12 + deps/wcslib/html/docd.svg | 12 + deps/wcslib/html/doxygen.css | 2247 ++ deps/wcslib/html/doxygen.svg | 28 + deps/wcslib/html/doxygen_crawl.html | 1321 + deps/wcslib/html/dynsections.js | 198 + deps/wcslib/html/files.html | 124 + deps/wcslib/html/fitshdr_8h.html | 515 + deps/wcslib/html/fitshdr_8h_source.html | 585 + deps/wcslib/html/folderclosed.svg | 11 + deps/wcslib/html/folderclosedd.svg | 11 + deps/wcslib/html/folderopen.svg | 17 + deps/wcslib/html/folderopend.svg | 12 + deps/wcslib/html/form_0.png | Bin 0 -> 3259 bytes deps/wcslib/html/form_0_dark.png | Bin 0 -> 3279 bytes deps/wcslib/html/form_1.png | Bin 0 -> 3228 bytes deps/wcslib/html/form_10.png | Bin 0 -> 2772 bytes deps/wcslib/html/form_10_dark.png | Bin 0 -> 2806 bytes deps/wcslib/html/form_11.png | Bin 0 -> 2810 bytes deps/wcslib/html/form_11_dark.png | Bin 0 -> 2858 bytes deps/wcslib/html/form_12.png | Bin 0 -> 3724 bytes deps/wcslib/html/form_12_dark.png | Bin 0 -> 3750 bytes deps/wcslib/html/form_13.png | Bin 0 -> 3475 bytes deps/wcslib/html/form_13_dark.png | Bin 0 -> 3514 bytes deps/wcslib/html/form_14.png | Bin 0 -> 2934 bytes deps/wcslib/html/form_14_dark.png | Bin 0 -> 2972 bytes deps/wcslib/html/form_15.png | Bin 0 -> 3138 bytes deps/wcslib/html/form_15_dark.png | Bin 0 -> 3182 bytes deps/wcslib/html/form_16.png | Bin 0 -> 2711 bytes deps/wcslib/html/form_16_dark.png | Bin 0 -> 2748 bytes deps/wcslib/html/form_17.png | Bin 0 -> 2732 bytes deps/wcslib/html/form_17_dark.png | Bin 0 -> 2754 bytes deps/wcslib/html/form_18.png | Bin 0 -> 3002 bytes deps/wcslib/html/form_18_dark.png | Bin 0 -> 3090 bytes deps/wcslib/html/form_19.png | Bin 0 -> 4268 bytes deps/wcslib/html/form_19_dark.png | Bin 0 -> 4334 bytes deps/wcslib/html/form_1_dark.png | Bin 0 -> 3321 bytes deps/wcslib/html/form_2.png | Bin 0 -> 3310 bytes deps/wcslib/html/form_20.png | Bin 0 -> 2776 bytes deps/wcslib/html/form_20_dark.png | Bin 0 -> 2829 bytes deps/wcslib/html/form_21.png | Bin 0 -> 3192 bytes deps/wcslib/html/form_21_dark.png | Bin 0 -> 3286 bytes deps/wcslib/html/form_22.png | Bin 0 -> 2741 bytes deps/wcslib/html/form_22_dark.png | Bin 0 -> 2771 bytes deps/wcslib/html/form_23.png | Bin 0 -> 3008 bytes deps/wcslib/html/form_23_dark.png | Bin 0 -> 3066 bytes deps/wcslib/html/form_24.png | Bin 0 -> 2875 bytes deps/wcslib/html/form_24_dark.png | Bin 0 -> 2935 bytes deps/wcslib/html/form_25.png | Bin 0 -> 3040 bytes deps/wcslib/html/form_25_dark.png | Bin 0 -> 3123 bytes deps/wcslib/html/form_26.png | Bin 0 -> 2805 bytes deps/wcslib/html/form_26_dark.png | Bin 0 -> 2853 bytes deps/wcslib/html/form_27.png | Bin 0 -> 2776 bytes deps/wcslib/html/form_27_dark.png | Bin 0 -> 2829 bytes deps/wcslib/html/form_28.png | Bin 0 -> 3381 bytes deps/wcslib/html/form_28_dark.png | Bin 0 -> 3473 bytes deps/wcslib/html/form_29.png | Bin 0 -> 3289 bytes deps/wcslib/html/form_29_dark.png | Bin 0 -> 3388 bytes deps/wcslib/html/form_2_dark.png | Bin 0 -> 3396 bytes deps/wcslib/html/form_3.png | Bin 0 -> 2905 bytes deps/wcslib/html/form_30.png | Bin 0 -> 3138 bytes deps/wcslib/html/form_30_dark.png | Bin 0 -> 3191 bytes deps/wcslib/html/form_31.png | Bin 0 -> 3375 bytes deps/wcslib/html/form_31_dark.png | Bin 0 -> 3473 bytes deps/wcslib/html/form_32.png | Bin 0 -> 2743 bytes deps/wcslib/html/form_32_dark.png | Bin 0 -> 2800 bytes deps/wcslib/html/form_33.png | Bin 0 -> 2780 bytes deps/wcslib/html/form_33_dark.png | Bin 0 -> 2821 bytes deps/wcslib/html/form_34.png | Bin 0 -> 2815 bytes deps/wcslib/html/form_34_dark.png | Bin 0 -> 2863 bytes deps/wcslib/html/form_35.png | Bin 0 -> 2755 bytes deps/wcslib/html/form_35_dark.png | Bin 0 -> 2787 bytes deps/wcslib/html/form_36.png | Bin 0 -> 3381 bytes deps/wcslib/html/form_36_dark.png | Bin 0 -> 3482 bytes deps/wcslib/html/form_37.png | Bin 0 -> 3379 bytes deps/wcslib/html/form_37_dark.png | Bin 0 -> 3473 bytes deps/wcslib/html/form_38.png | Bin 0 -> 2841 bytes deps/wcslib/html/form_38_dark.png | Bin 0 -> 2882 bytes deps/wcslib/html/form_39.png | Bin 0 -> 2792 bytes deps/wcslib/html/form_39_dark.png | Bin 0 -> 2854 bytes deps/wcslib/html/form_3_dark.png | Bin 0 -> 2971 bytes deps/wcslib/html/form_4.png | Bin 0 -> 2892 bytes deps/wcslib/html/form_40.png | Bin 0 -> 2761 bytes deps/wcslib/html/form_40_dark.png | Bin 0 -> 2821 bytes deps/wcslib/html/form_41.png | Bin 0 -> 2842 bytes deps/wcslib/html/form_41_dark.png | Bin 0 -> 2870 bytes deps/wcslib/html/form_42.png | Bin 0 -> 2852 bytes deps/wcslib/html/form_42_dark.png | Bin 0 -> 2861 bytes deps/wcslib/html/form_43.png | Bin 0 -> 2917 bytes deps/wcslib/html/form_43_dark.png | Bin 0 -> 2939 bytes deps/wcslib/html/form_44.png | Bin 0 -> 3296 bytes deps/wcslib/html/form_44_dark.png | Bin 0 -> 3390 bytes deps/wcslib/html/form_45.png | Bin 0 -> 2686 bytes deps/wcslib/html/form_45_dark.png | Bin 0 -> 2726 bytes deps/wcslib/html/form_46.png | Bin 0 -> 3528 bytes deps/wcslib/html/form_46_dark.png | Bin 0 -> 3573 bytes deps/wcslib/html/form_47.png | Bin 0 -> 3528 bytes deps/wcslib/html/form_47_dark.png | Bin 0 -> 3591 bytes deps/wcslib/html/form_48.png | Bin 0 -> 2876 bytes deps/wcslib/html/form_48_dark.png | Bin 0 -> 2947 bytes deps/wcslib/html/form_49.png | Bin 0 -> 2971 bytes deps/wcslib/html/form_49_dark.png | Bin 0 -> 3068 bytes deps/wcslib/html/form_4_dark.png | Bin 0 -> 2958 bytes deps/wcslib/html/form_5.png | Bin 0 -> 2924 bytes deps/wcslib/html/form_50.png | Bin 0 -> 3872 bytes deps/wcslib/html/form_50_dark.png | Bin 0 -> 3929 bytes deps/wcslib/html/form_51.png | Bin 0 -> 3867 bytes deps/wcslib/html/form_51_dark.png | Bin 0 -> 3931 bytes deps/wcslib/html/form_52.png | Bin 0 -> 3089 bytes deps/wcslib/html/form_52_dark.png | Bin 0 -> 3171 bytes deps/wcslib/html/form_53.png | Bin 0 -> 2834 bytes deps/wcslib/html/form_53_dark.png | Bin 0 -> 2877 bytes deps/wcslib/html/form_54.png | Bin 0 -> 3329 bytes deps/wcslib/html/form_54_dark.png | Bin 0 -> 3365 bytes deps/wcslib/html/form_55.png | Bin 0 -> 3195 bytes deps/wcslib/html/form_55_dark.png | Bin 0 -> 3273 bytes deps/wcslib/html/form_56.png | Bin 0 -> 2972 bytes deps/wcslib/html/form_56_dark.png | Bin 0 -> 3021 bytes deps/wcslib/html/form_57.png | Bin 0 -> 3058 bytes deps/wcslib/html/form_57_dark.png | Bin 0 -> 3103 bytes deps/wcslib/html/form_58.png | Bin 0 -> 2861 bytes deps/wcslib/html/form_58_dark.png | Bin 0 -> 2884 bytes deps/wcslib/html/form_59.png | Bin 0 -> 2748 bytes deps/wcslib/html/form_59_dark.png | Bin 0 -> 2793 bytes deps/wcslib/html/form_5_dark.png | Bin 0 -> 3007 bytes deps/wcslib/html/form_6.png | Bin 0 -> 2931 bytes deps/wcslib/html/form_60.png | Bin 0 -> 3000 bytes deps/wcslib/html/form_60_dark.png | Bin 0 -> 3049 bytes deps/wcslib/html/form_61.png | Bin 0 -> 3689 bytes deps/wcslib/html/form_61_dark.png | Bin 0 -> 3730 bytes deps/wcslib/html/form_62.png | Bin 0 -> 2709 bytes deps/wcslib/html/form_62_dark.png | Bin 0 -> 2733 bytes deps/wcslib/html/form_63.png | Bin 0 -> 3349 bytes deps/wcslib/html/form_63_dark.png | Bin 0 -> 3436 bytes deps/wcslib/html/form_64.png | Bin 0 -> 2944 bytes deps/wcslib/html/form_64_dark.png | Bin 0 -> 2993 bytes deps/wcslib/html/form_65.png | Bin 0 -> 2877 bytes deps/wcslib/html/form_65_dark.png | Bin 0 -> 2912 bytes deps/wcslib/html/form_66.png | Bin 0 -> 2709 bytes deps/wcslib/html/form_66_dark.png | Bin 0 -> 2733 bytes deps/wcslib/html/form_67.png | Bin 0 -> 3384 bytes deps/wcslib/html/form_67_dark.png | Bin 0 -> 3464 bytes deps/wcslib/html/form_68.png | Bin 0 -> 2936 bytes deps/wcslib/html/form_68_dark.png | Bin 0 -> 2981 bytes deps/wcslib/html/form_69.png | Bin 0 -> 3189 bytes deps/wcslib/html/form_69_dark.png | Bin 0 -> 3174 bytes deps/wcslib/html/form_6_dark.png | Bin 0 -> 3004 bytes deps/wcslib/html/form_7.png | Bin 0 -> 2927 bytes deps/wcslib/html/form_70.png | Bin 0 -> 2825 bytes deps/wcslib/html/form_70_dark.png | Bin 0 -> 2868 bytes deps/wcslib/html/form_71.png | Bin 0 -> 3263 bytes deps/wcslib/html/form_71_dark.png | Bin 0 -> 3369 bytes deps/wcslib/html/form_72.png | Bin 0 -> 3668 bytes deps/wcslib/html/form_72_dark.png | Bin 0 -> 3761 bytes deps/wcslib/html/form_73.png | Bin 0 -> 2726 bytes deps/wcslib/html/form_73_dark.png | Bin 0 -> 2773 bytes deps/wcslib/html/form_74.png | Bin 0 -> 4828 bytes deps/wcslib/html/form_74_dark.png | Bin 0 -> 4971 bytes deps/wcslib/html/form_75.png | Bin 0 -> 2946 bytes deps/wcslib/html/form_75_dark.png | Bin 0 -> 2994 bytes deps/wcslib/html/form_76.png | Bin 0 -> 2939 bytes deps/wcslib/html/form_76_dark.png | Bin 0 -> 2998 bytes deps/wcslib/html/form_7_dark.png | Bin 0 -> 2983 bytes deps/wcslib/html/form_8.png | Bin 0 -> 2639 bytes deps/wcslib/html/form_8_dark.png | Bin 0 -> 2649 bytes deps/wcslib/html/form_9.png | Bin 0 -> 2752 bytes deps/wcslib/html/form_9_dark.png | Bin 0 -> 2792 bytes deps/wcslib/html/formula.repository | 78 + deps/wcslib/html/fortran.html | 167 + deps/wcslib/html/functions.html | 107 + deps/wcslib/html/functions_b.html | 105 + deps/wcslib/html/functions_c.html | 124 + deps/wcslib/html/functions_d.html | 142 + deps/wcslib/html/functions_e.html | 107 + deps/wcslib/html/functions_f.html | 104 + deps/wcslib/html/functions_g.html | 99 + deps/wcslib/html/functions_h.html | 100 + deps/wcslib/html/functions_i.html | 106 + deps/wcslib/html/functions_j.html | 100 + deps/wcslib/html/functions_k.html | 105 + deps/wcslib/html/functions_l.html | 108 + deps/wcslib/html/functions_m.html | 141 + deps/wcslib/html/functions_n.html | 113 + deps/wcslib/html/functions_o.html | 101 + deps/wcslib/html/functions_p.html | 112 + deps/wcslib/html/functions_r.html | 105 + deps/wcslib/html/functions_s.html | 114 + deps/wcslib/html/functions_t.html | 117 + deps/wcslib/html/functions_u.html | 100 + deps/wcslib/html/functions_v.html | 106 + deps/wcslib/html/functions_vars.html | 107 + deps/wcslib/html/functions_vars_b.html | 105 + deps/wcslib/html/functions_vars_c.html | 124 + deps/wcslib/html/functions_vars_d.html | 142 + deps/wcslib/html/functions_vars_e.html | 107 + deps/wcslib/html/functions_vars_f.html | 104 + deps/wcslib/html/functions_vars_g.html | 99 + deps/wcslib/html/functions_vars_h.html | 100 + deps/wcslib/html/functions_vars_i.html | 106 + deps/wcslib/html/functions_vars_j.html | 100 + deps/wcslib/html/functions_vars_k.html | 105 + deps/wcslib/html/functions_vars_l.html | 108 + deps/wcslib/html/functions_vars_m.html | 141 + deps/wcslib/html/functions_vars_n.html | 113 + deps/wcslib/html/functions_vars_o.html | 101 + deps/wcslib/html/functions_vars_p.html | 112 + deps/wcslib/html/functions_vars_r.html | 105 + deps/wcslib/html/functions_vars_s.html | 114 + deps/wcslib/html/functions_vars_t.html | 117 + deps/wcslib/html/functions_vars_u.html | 100 + deps/wcslib/html/functions_vars_v.html | 106 + deps/wcslib/html/functions_vars_w.html | 104 + deps/wcslib/html/functions_vars_x.html | 100 + deps/wcslib/html/functions_vars_y.html | 99 + deps/wcslib/html/functions_vars_z.html | 100 + deps/wcslib/html/functions_w.html | 104 + deps/wcslib/html/functions_x.html | 100 + deps/wcslib/html/functions_y.html | 99 + deps/wcslib/html/functions_z.html | 100 + deps/wcslib/html/getwcstab_8h.html | 186 + deps/wcslib/html/getwcstab_8h_source.html | 304 + deps/wcslib/html/globals.html | 120 + deps/wcslib/html/globals_b.html | 102 + deps/wcslib/html/globals_c.html | 160 + deps/wcslib/html/globals_d.html | 134 + deps/wcslib/html/globals_defs.html | 309 + deps/wcslib/html/globals_e.html | 100 + deps/wcslib/html/globals_enum.html | 116 + deps/wcslib/html/globals_eval.html | 251 + deps/wcslib/html/globals_f.html | 136 + deps/wcslib/html/globals_func.html | 119 + deps/wcslib/html/globals_func_b.html | 102 + deps/wcslib/html/globals_func_c.html | 135 + deps/wcslib/html/globals_func_d.html | 116 + deps/wcslib/html/globals_func_e.html | 99 + deps/wcslib/html/globals_func_f.html | 107 + deps/wcslib/html/globals_func_h.html | 101 + deps/wcslib/html/globals_func_l.html | 114 + deps/wcslib/html/globals_func_m.html | 105 + deps/wcslib/html/globals_func_o.html | 99 + deps/wcslib/html/globals_func_p.html | 114 + deps/wcslib/html/globals_func_q.html | 101 + deps/wcslib/html/globals_func_s.html | 137 + deps/wcslib/html/globals_func_t.html | 117 + deps/wcslib/html/globals_func_u.html | 99 + deps/wcslib/html/globals_func_v.html | 104 + deps/wcslib/html/globals_func_w.html | 169 + deps/wcslib/html/globals_func_x.html | 101 + deps/wcslib/html/globals_func_z.html | 105 + deps/wcslib/html/globals_h.html | 102 + deps/wcslib/html/globals_i.html | 99 + deps/wcslib/html/globals_k.html | 100 + deps/wcslib/html/globals_l.html | 142 + deps/wcslib/html/globals_m.html | 105 + deps/wcslib/html/globals_n.html | 99 + deps/wcslib/html/globals_o.html | 100 + deps/wcslib/html/globals_p.html | 141 + deps/wcslib/html/globals_q.html | 102 + deps/wcslib/html/globals_r.html | 99 + deps/wcslib/html/globals_s.html | 165 + deps/wcslib/html/globals_t.html | 137 + deps/wcslib/html/globals_type.html | 97 + deps/wcslib/html/globals_u.html | 115 + deps/wcslib/html/globals_v.html | 104 + deps/wcslib/html/globals_vars.html | 122 + deps/wcslib/html/globals_w.html | 289 + deps/wcslib/html/globals_x.html | 101 + deps/wcslib/html/globals_z.html | 106 + deps/wcslib/html/index.html | 143 + deps/wcslib/html/intro.html | 121 + deps/wcslib/html/jquery.js | 204 + deps/wcslib/html/limits.html | 105 + deps/wcslib/html/lin_8h.html | 1118 + deps/wcslib/html/lin_8h_source.html | 973 + deps/wcslib/html/log_8h.html | 335 + deps/wcslib/html/log_8h_source.html | 276 + deps/wcslib/html/memory.html | 113 + deps/wcslib/html/menu.js | 134 + deps/wcslib/html/menudata.js | 159 + deps/wcslib/html/minus.svg | 8 + deps/wcslib/html/minusd.svg | 8 + deps/wcslib/html/nav_f.png | Bin 0 -> 153 bytes deps/wcslib/html/nav_fd.png | Bin 0 -> 169 bytes deps/wcslib/html/nav_g.png | Bin 0 -> 95 bytes deps/wcslib/html/nav_h.png | Bin 0 -> 98 bytes deps/wcslib/html/nav_hd.png | Bin 0 -> 114 bytes deps/wcslib/html/navtree.css | 149 + deps/wcslib/html/open.png | Bin 0 -> 123 bytes deps/wcslib/html/overview.html | 169 + deps/wcslib/html/pages.html | 102 + deps/wcslib/html/pgsbox.html | 108 + deps/wcslib/html/plus.svg | 9 + deps/wcslib/html/plusd.svg | 9 + deps/wcslib/html/prj_8h.html | 3182 ++ deps/wcslib/html/prj_8h_source.html | 1174 + deps/wcslib/html/resize.js | 147 + deps/wcslib/html/search/all_0.js | 5 + deps/wcslib/html/search/all_1.js | 5 + deps/wcslib/html/search/all_10.js | 11 + deps/wcslib/html/search/all_11.js | 64 + deps/wcslib/html/search/all_12.js | 7 + deps/wcslib/html/search/all_13.js | 12 + deps/wcslib/html/search/all_14.js | 95 + deps/wcslib/html/search/all_15.js | 65 + deps/wcslib/html/search/all_16.js | 22 + deps/wcslib/html/search/all_17.js | 22 + deps/wcslib/html/search/all_18.js | 221 + deps/wcslib/html/search/all_19.js | 8 + deps/wcslib/html/search/all_1a.js | 4 + deps/wcslib/html/search/all_1b.js | 13 + deps/wcslib/html/search/all_2.js | 39 + deps/wcslib/html/search/all_3.js | 14 + deps/wcslib/html/search/all_4.js | 96 + deps/wcslib/html/search/all_5.js | 87 + deps/wcslib/html/search/all_6.js | 15 + deps/wcslib/html/search/all_7.js | 52 + deps/wcslib/html/search/all_8.js | 5 + deps/wcslib/html/search/all_9.js | 9 + deps/wcslib/html/search/all_a.js | 13 + deps/wcslib/html/search/all_b.js | 5 + deps/wcslib/html/search/all_c.js | 12 + deps/wcslib/html/search/all_d.js | 63 + deps/wcslib/html/search/all_e.js | 55 + deps/wcslib/html/search/all_f.js | 20 + deps/wcslib/html/search/classes_0.js | 4 + deps/wcslib/html/search/classes_1.js | 4 + deps/wcslib/html/search/classes_2.js | 5 + deps/wcslib/html/search/classes_3.js | 5 + deps/wcslib/html/search/classes_4.js | 4 + deps/wcslib/html/search/classes_5.js | 6 + deps/wcslib/html/search/classes_6.js | 5 + deps/wcslib/html/search/classes_7.js | 4 + deps/wcslib/html/search/classes_8.js | 6 + deps/wcslib/html/search/close.svg | 18 + deps/wcslib/html/search/defines_0.js | 4 + deps/wcslib/html/search/defines_1.js | 13 + deps/wcslib/html/search/defines_2.js | 9 + deps/wcslib/html/search/defines_3.js | 4 + deps/wcslib/html/search/defines_4.js | 9 + deps/wcslib/html/search/defines_5.js | 5 + deps/wcslib/html/search/defines_6.js | 11 + deps/wcslib/html/search/defines_7.js | 4 + deps/wcslib/html/search/defines_8.js | 4 + deps/wcslib/html/search/defines_9.js | 15 + deps/wcslib/html/search/defines_a.js | 4 + deps/wcslib/html/search/defines_b.js | 14 + deps/wcslib/html/search/defines_c.js | 11 + deps/wcslib/html/search/defines_d.js | 6 + deps/wcslib/html/search/defines_e.js | 87 + deps/wcslib/html/search/enums_0.js | 5 + deps/wcslib/html/search/enums_1.js | 5 + deps/wcslib/html/search/enums_2.js | 4 + deps/wcslib/html/search/enums_3.js | 6 + deps/wcslib/html/search/enums_4.js | 5 + deps/wcslib/html/search/enums_5.js | 6 + deps/wcslib/html/search/enums_6.js | 5 + deps/wcslib/html/search/enums_7.js | 8 + deps/wcslib/html/search/enumvalues_0.js | 12 + deps/wcslib/html/search/enumvalues_1.js | 12 + deps/wcslib/html/search/enumvalues_2.js | 24 + deps/wcslib/html/search/enumvalues_3.js | 18 + deps/wcslib/html/search/enumvalues_4.js | 10 + deps/wcslib/html/search/enumvalues_5.js | 16 + deps/wcslib/html/search/enumvalues_6.js | 12 + deps/wcslib/html/search/enumvalues_7.js | 16 + deps/wcslib/html/search/enumvalues_8.js | 28 + deps/wcslib/html/search/files_0.js | 4 + deps/wcslib/html/search/files_1.js | 4 + deps/wcslib/html/search/files_2.js | 4 + deps/wcslib/html/search/files_3.js | 4 + deps/wcslib/html/search/files_4.js | 5 + deps/wcslib/html/search/files_5.js | 4 + deps/wcslib/html/search/files_6.js | 6 + deps/wcslib/html/search/files_7.js | 4 + deps/wcslib/html/search/files_8.js | 14 + deps/wcslib/html/search/functions_0.js | 24 + deps/wcslib/html/search/functions_1.js | 7 + deps/wcslib/html/search/functions_10.js | 74 + deps/wcslib/html/search/functions_11.js | 6 + deps/wcslib/html/search/functions_12.js | 10 + deps/wcslib/html/search/functions_2.js | 40 + deps/wcslib/html/search/functions_3.js | 21 + deps/wcslib/html/search/functions_4.js | 4 + deps/wcslib/html/search/functions_5.js | 12 + deps/wcslib/html/search/functions_6.js | 6 + deps/wcslib/html/search/functions_7.js | 19 + deps/wcslib/html/search/functions_8.js | 10 + deps/wcslib/html/search/functions_9.js | 4 + deps/wcslib/html/search/functions_a.js | 19 + deps/wcslib/html/search/functions_b.js | 6 + deps/wcslib/html/search/functions_c.js | 42 + deps/wcslib/html/search/functions_d.js | 22 + deps/wcslib/html/search/functions_e.js | 4 + deps/wcslib/html/search/functions_f.js | 9 + deps/wcslib/html/search/mag.svg | 24 + deps/wcslib/html/search/mag_d.svg | 24 + deps/wcslib/html/search/mag_sel.svg | 31 + deps/wcslib/html/search/mag_seld.svg | 31 + deps/wcslib/html/search/pages_0.js | 5 + deps/wcslib/html/search/pages_1.js | 5 + deps/wcslib/html/search/pages_10.js | 6 + deps/wcslib/html/search/pages_11.js | 10 + deps/wcslib/html/search/pages_2.js | 7 + deps/wcslib/html/search/pages_3.js | 4 + deps/wcslib/html/search/pages_4.js | 6 + deps/wcslib/html/search/pages_5.js | 4 + deps/wcslib/html/search/pages_6.js | 5 + deps/wcslib/html/search/pages_7.js | 4 + deps/wcslib/html/search/pages_8.js | 5 + deps/wcslib/html/search/pages_9.js | 5 + deps/wcslib/html/search/pages_a.js | 4 + deps/wcslib/html/search/pages_b.js | 6 + deps/wcslib/html/search/pages_c.js | 5 + deps/wcslib/html/search/pages_d.js | 4 + deps/wcslib/html/search/pages_e.js | 6 + deps/wcslib/html/search/pages_f.js | 5 + deps/wcslib/html/search/search.css | 291 + deps/wcslib/html/search/search.js | 694 + deps/wcslib/html/search/searchdata.js | 42 + deps/wcslib/html/search/typedefs_0.js | 4 + deps/wcslib/html/search/variables_0.js | 12 + deps/wcslib/html/search/variables_1.js | 10 + deps/wcslib/html/search/variables_10.js | 4 + deps/wcslib/html/search/variables_11.js | 10 + deps/wcslib/html/search/variables_12.js | 21 + deps/wcslib/html/search/variables_13.js | 23 + deps/wcslib/html/search/variables_14.js | 5 + deps/wcslib/html/search/variables_15.js | 11 + deps/wcslib/html/search/variables_16.js | 15 + deps/wcslib/html/search/variables_17.js | 5 + deps/wcslib/html/search/variables_18.js | 4 + deps/wcslib/html/search/variables_19.js | 6 + deps/wcslib/html/search/variables_2.js | 33 + deps/wcslib/html/search/variables_3.js | 48 + deps/wcslib/html/search/variables_4.js | 12 + deps/wcslib/html/search/variables_5.js | 10 + deps/wcslib/html/search/variables_6.js | 4 + deps/wcslib/html/search/variables_7.js | 6 + deps/wcslib/html/search/variables_8.js | 11 + deps/wcslib/html/search/variables_9.js | 5 + deps/wcslib/html/search/variables_a.js | 10 + deps/wcslib/html/search/variables_b.js | 15 + deps/wcslib/html/search/variables_c.js | 46 + deps/wcslib/html/search/variables_d.js | 18 + deps/wcslib/html/search/variables_e.js | 6 + deps/wcslib/html/search/variables_f.js | 23 + deps/wcslib/html/software.html | 178 + deps/wcslib/html/spc_8h.html | 1467 + deps/wcslib/html/spc_8h_source.html | 1143 + deps/wcslib/html/sph_8h.html | 431 + deps/wcslib/html/sph_8h_source.html | 353 + deps/wcslib/html/splitbar.png | Bin 0 -> 314 bytes deps/wcslib/html/splitbard.png | Bin 0 -> 282 bytes deps/wcslib/html/spx_8h.html | 1116 + deps/wcslib/html/spx_8h_source.html | 777 + deps/wcslib/html/structauxprm.html | 316 + deps/wcslib/html/structcelprm.html | 336 + deps/wcslib/html/structdisprm.html | 562 + deps/wcslib/html/structdpkey.html | 227 + deps/wcslib/html/structfitskey.html | 456 + deps/wcslib/html/structfitskeyid.html | 165 + deps/wcslib/html/structlinprm.html | 544 + deps/wcslib/html/structprjprm.html | 568 + deps/wcslib/html/structpscard.html | 164 + deps/wcslib/html/structpvcard.html | 164 + deps/wcslib/html/structs.html | 113 + deps/wcslib/html/structspcprm.html | 430 + deps/wcslib/html/structspxprm.html | 845 + deps/wcslib/html/structtabprm.html | 549 + deps/wcslib/html/structwcserr.html | 197 + deps/wcslib/html/structwcsprm.html | 2144 + deps/wcslib/html/structwtbarr.html | 305 + deps/wcslib/html/sync_off.png | Bin 0 -> 853 bytes deps/wcslib/html/sync_on.png | Bin 0 -> 845 bytes deps/wcslib/html/tab_8h.html | 951 + deps/wcslib/html/tab_8h_source.html | 863 + deps/wcslib/html/tab_a.png | Bin 0 -> 142 bytes deps/wcslib/html/tab_ad.png | Bin 0 -> 135 bytes deps/wcslib/html/tab_b.png | Bin 0 -> 169 bytes deps/wcslib/html/tab_bd.png | Bin 0 -> 173 bytes deps/wcslib/html/tab_h.png | Bin 0 -> 177 bytes deps/wcslib/html/tab_hd.png | Bin 0 -> 180 bytes deps/wcslib/html/tab_s.png | Bin 0 -> 184 bytes deps/wcslib/html/tab_sd.png | Bin 0 -> 188 bytes deps/wcslib/html/tabs.css | 1 + deps/wcslib/html/testing.html | 140 + deps/wcslib/html/threads.html | 117 + deps/wcslib/html/vector.html | 163 + deps/wcslib/html/versioning.html | 137 + deps/wcslib/html/wcs_8h.html | 1976 + deps/wcslib/html/wcs_8h_source.html | 2635 ++ deps/wcslib/html/wcserr_8h.html | 430 + deps/wcslib/html/wcserr_8h_source.html | 392 + deps/wcslib/html/wcsfix_8h.html | 933 + deps/wcslib/html/wcsfix_8h_source.html | 791 + deps/wcslib/html/wcshdr_8h.html | 2085 + deps/wcslib/html/wcshdr_8h_source.html | 1485 + deps/wcslib/html/wcslib_8h.html | 121 + deps/wcslib/html/wcslib_8h_source.html | 232 + deps/wcslib/html/wcsmath_8h.html | 247 + deps/wcslib/html/wcsmath_8h_source.html | 173 + deps/wcslib/html/wcsprintf_8h.html | 291 + deps/wcslib/html/wcsprintf_8h_source.html | 257 + deps/wcslib/html/wcstrig_8h.html | 416 + deps/wcslib/html/wcstrig_8h_source.html | 324 + deps/wcslib/html/wcsunits_8h.html | 1015 + deps/wcslib/html/wcsunits_8h_source.html | 537 + deps/wcslib/html/wcsutil_8h.html | 901 + deps/wcslib/html/wcsutil_8h_source.html | 620 + deps/wcslib/html/wtbarr_8h.html | 114 + deps/wcslib/html/wtbarr_8h_source.html | 233 + deps/wcslib/makedefs | 287 + deps/wcslib/makedefs.in | 287 + deps/wcslib/pgsbox/GNUmakefile | 322 + deps/wcslib/pgsbox/cpgsbox.c | 140 + deps/wcslib/pgsbox/cpgsbox.h | 108 + deps/wcslib/pgsbox/cpgtest.c | 1381 + deps/wcslib/pgsbox/fscan.F | 151 + deps/wcslib/pgsbox/lngvel.F | 162 + deps/wcslib/pgsbox/pgcrfn.F | 190 + deps/wcslib/pgsbox/pgcrfn_bindc.f90 | 58 + deps/wcslib/pgsbox/pgcrvl.f | 50 + deps/wcslib/pgsbox/pgsbox.f | 2652 ++ deps/wcslib/pgsbox/pgsbox_bindc.f90 | 144 + deps/wcslib/pgsbox/pgtest.f | 1374 + deps/wcslib/pgsbox/pgwcsl.c | 264 + deps/wcslib/pgsbox/pgwcsl.h | 131 + deps/wcslib/pgsbox/pgwcsl_bindc.f90 | 60 + deps/wcslib/utils/GNUmakefile | 173 + deps/wcslib/utils/HPXcvt.1 | 38 + deps/wcslib/utils/HPXcvt.c | 911 + deps/wcslib/utils/fitshdr.1 | 15 + deps/wcslib/utils/fitshdr.c | 312 + deps/wcslib/utils/sundazel.1 | 90 + deps/wcslib/utils/sundazel.c | 1279 + deps/wcslib/utils/tofits.1 | 23 + deps/wcslib/utils/tofits.c | 107 + deps/wcslib/utils/wcsgrid.1 | 28 + deps/wcslib/utils/wcsgrid.c | 358 + deps/wcslib/utils/wcsware.1 | 102 + deps/wcslib/utils/wcsware.c | 685 + deps/wcslib/wcsconfig.h | 21 + deps/wcslib/wcsconfig.h.in | 20 + deps/wcslib/wcsconfig_f77.h | 21 + deps/wcslib/wcsconfig_f77.h.in | 20 + deps/wcslib/wcsconfig_tests.h | 18 + deps/wcslib/wcsconfig_tests.h.in | 17 + deps/wcslib/wcsconfig_utils.h | 31 + deps/wcslib/wcsconfig_utils.h.in | 30 + deps/wcslib/wcslib.pc | 11 + deps/wcslib/wcslib.pc.in | 11 + deps/wcslib/wcslib.pdf | Bin 0 -> 1643456 bytes 831 files changed, 369721 insertions(+), 3 deletions(-) create mode 100644 deps/wcslib/C/GNUmakefile create mode 100644 deps/wcslib/C/cel.c create mode 100644 deps/wcslib/C/cel.h create mode 100644 deps/wcslib/C/dis.c create mode 100644 deps/wcslib/C/dis.h create mode 100644 deps/wcslib/C/fitshdr.c create mode 100644 deps/wcslib/C/fitshdr.h create mode 100644 deps/wcslib/C/fitshdr.l create mode 100644 deps/wcslib/C/flexed/README create mode 100644 deps/wcslib/C/flexed/fitshdr.c create mode 100644 deps/wcslib/C/flexed/wcsbth.c create mode 100644 deps/wcslib/C/flexed/wcspih.c create mode 100644 deps/wcslib/C/flexed/wcsulex.c create mode 100644 deps/wcslib/C/flexed/wcsutrn.c create mode 100644 deps/wcslib/C/getwcstab.c create mode 100644 deps/wcslib/C/getwcstab.h create mode 100644 deps/wcslib/C/lin.c create mode 100644 deps/wcslib/C/lin.h create mode 100644 deps/wcslib/C/log.c create mode 100644 deps/wcslib/C/log.h create mode 100644 deps/wcslib/C/prj.c create mode 100644 deps/wcslib/C/prj.h create mode 100644 deps/wcslib/C/spc.c create mode 100644 deps/wcslib/C/spc.h create mode 100644 deps/wcslib/C/sph.c create mode 100644 deps/wcslib/C/sph.h create mode 100644 deps/wcslib/C/spx.c create mode 100644 deps/wcslib/C/spx.h create mode 100644 deps/wcslib/C/tab.c create mode 100644 deps/wcslib/C/tab.h create mode 100644 deps/wcslib/C/test/DSS.keyrec create mode 100644 deps/wcslib/C/test/SIP.keyrec create mode 100644 deps/wcslib/C/test/SIPTPV.keyrec create mode 100644 deps/wcslib/C/test/TNX.keyrec create mode 100644 deps/wcslib/C/test/TPV3.keyrec create mode 100644 deps/wcslib/C/test/TPV5.keyrec create mode 100644 deps/wcslib/C/test/TPV7.keyrec create mode 100644 deps/wcslib/C/test/ZPX.keyrec create mode 100644 deps/wcslib/C/test/bth.keyrec create mode 100644 deps/wcslib/C/test/fitshdr.keyrec create mode 100644 deps/wcslib/C/test/pih.keyrec create mode 100644 deps/wcslib/C/test/tbth1.c create mode 100644 deps/wcslib/C/test/tbth1.out create mode 100644 deps/wcslib/C/test/tcel1.c create mode 100644 deps/wcslib/C/test/tcel2.c create mode 100644 deps/wcslib/C/test/tdis1.c create mode 100644 deps/wcslib/C/test/tdis2.c create mode 100644 deps/wcslib/C/test/tdis2.out create mode 100644 deps/wcslib/C/test/tdis3 create mode 100644 deps/wcslib/C/test/tdis3.out create mode 100644 deps/wcslib/C/test/tdisiter.c create mode 100644 deps/wcslib/C/test/tfitshdr.c create mode 100644 deps/wcslib/C/test/tfitshdr.out create mode 100644 deps/wcslib/C/test/tlin.c create mode 100644 deps/wcslib/C/test/tlog.c create mode 100644 deps/wcslib/C/test/tpih1.c create mode 100644 deps/wcslib/C/test/tpih1.out create mode 100644 deps/wcslib/C/test/tpih2.c create mode 100644 deps/wcslib/C/test/tpih_pthread.c create mode 100644 deps/wcslib/C/test/tprj1.c create mode 100644 deps/wcslib/C/test/tprj2.c create mode 100644 deps/wcslib/C/test/tspc.c create mode 100644 deps/wcslib/C/test/tspcaips.c create mode 100644 deps/wcslib/C/test/tspcspxe.c create mode 100644 deps/wcslib/C/test/tspctrne.c create mode 100644 deps/wcslib/C/test/tsph.c create mode 100644 deps/wcslib/C/test/tsphdpa.c create mode 100644 deps/wcslib/C/test/tspx.c create mode 100644 deps/wcslib/C/test/ttab1.c create mode 100644 deps/wcslib/C/test/ttab2.c create mode 100644 deps/wcslib/C/test/ttab3.c create mode 100644 deps/wcslib/C/test/tunits.c create mode 100644 deps/wcslib/C/test/tunits.out create mode 100644 deps/wcslib/C/test/twcs.c create mode 100644 deps/wcslib/C/test/twcs_locale.c create mode 100644 deps/wcslib/C/test/twcs_pthread.c create mode 100644 deps/wcslib/C/test/twcscompare.c create mode 100644 deps/wcslib/C/test/twcsfix.c create mode 100644 deps/wcslib/C/test/twcsfix.out create mode 100644 deps/wcslib/C/test/twcshdr.c create mode 100644 deps/wcslib/C/test/twcslint create mode 100644 deps/wcslib/C/test/twcslint.out create mode 100644 deps/wcslib/C/test/twcsmix.c create mode 100644 deps/wcslib/C/test/twcssub.c create mode 100644 deps/wcslib/C/test/twcssub.out create mode 100644 deps/wcslib/C/test/twcstab.c create mode 100644 deps/wcslib/C/test/twcstab.out create mode 100644 deps/wcslib/C/test/units_test create mode 100644 deps/wcslib/C/test/wcslint.keyrec create mode 100644 deps/wcslib/C/test/wcspcx.keyrec create mode 100644 deps/wcslib/C/test/wcstab.keyrec create mode 100644 deps/wcslib/C/wcs.c create mode 100644 deps/wcslib/C/wcs.h create mode 100644 deps/wcslib/C/wcsbth.c create mode 100644 deps/wcslib/C/wcsbth.l create mode 100644 deps/wcslib/C/wcserr.c create mode 100644 deps/wcslib/C/wcserr.h create mode 100644 deps/wcslib/C/wcsfix.c create mode 100644 deps/wcslib/C/wcsfix.h create mode 100644 deps/wcslib/C/wcshdr.c create mode 100644 deps/wcslib/C/wcshdr.h create mode 100644 deps/wcslib/C/wcslib.h create mode 100644 deps/wcslib/C/wcsmath.h create mode 100644 deps/wcslib/C/wcspih.c create mode 100644 deps/wcslib/C/wcspih.l create mode 100644 deps/wcslib/C/wcsprintf.c create mode 100644 deps/wcslib/C/wcsprintf.h create mode 100644 deps/wcslib/C/wcstrig.c create mode 100644 deps/wcslib/C/wcstrig.h create mode 100644 deps/wcslib/C/wcsulex.l create mode 100644 deps/wcslib/C/wcsunits.c create mode 100644 deps/wcslib/C/wcsunits.h create mode 100644 deps/wcslib/C/wcsutil.c create mode 100644 deps/wcslib/C/wcsutil.h create mode 100644 deps/wcslib/C/wcsutrn.c create mode 100644 deps/wcslib/C/wcsutrn.l create mode 100644 deps/wcslib/C/wtbarr.h create mode 100644 deps/wcslib/CHANGES create mode 100644 deps/wcslib/CMakeLists.txt create mode 100644 deps/wcslib/COPYING create mode 100644 deps/wcslib/COPYING.LESSER create mode 100644 deps/wcslib/Fortran/GNUmakefile create mode 100644 deps/wcslib/Fortran/cel.inc create mode 100644 deps/wcslib/Fortran/cel_bindc.f90 create mode 100644 deps/wcslib/Fortran/cel_data.f create mode 100644 deps/wcslib/Fortran/cel_f.c create mode 100644 deps/wcslib/Fortran/dis.inc create mode 100644 deps/wcslib/Fortran/dis_bindc.f90 create mode 100644 deps/wcslib/Fortran/dis_data.f create mode 100644 deps/wcslib/Fortran/dis_f.c create mode 100644 deps/wcslib/Fortran/fitshdr.inc create mode 100644 deps/wcslib/Fortran/fitshdr_bindc.f90 create mode 100644 deps/wcslib/Fortran/fitshdr_data.f create mode 100644 deps/wcslib/Fortran/fitshdr_f.c create mode 100644 deps/wcslib/Fortran/getwcstab.inc create mode 100644 deps/wcslib/Fortran/getwcstab_f.c create mode 100644 deps/wcslib/Fortran/lin.inc create mode 100644 deps/wcslib/Fortran/lin_bindc.f90 create mode 100644 deps/wcslib/Fortran/lin_data.f create mode 100644 deps/wcslib/Fortran/lin_f.c create mode 100644 deps/wcslib/Fortran/log.inc create mode 100644 deps/wcslib/Fortran/log_data.f create mode 100644 deps/wcslib/Fortran/log_f.c create mode 100644 deps/wcslib/Fortran/prj.inc create mode 100644 deps/wcslib/Fortran/prj_bindc.f90 create mode 100644 deps/wcslib/Fortran/prj_data.f create mode 100644 deps/wcslib/Fortran/prj_f.c create mode 100644 deps/wcslib/Fortran/spc.inc create mode 100644 deps/wcslib/Fortran/spc_bindc.f90 create mode 100644 deps/wcslib/Fortran/spc_data.f create mode 100644 deps/wcslib/Fortran/spc_f.c create mode 100644 deps/wcslib/Fortran/sph.inc create mode 100644 deps/wcslib/Fortran/sph_f.c create mode 100644 deps/wcslib/Fortran/spx.inc create mode 100644 deps/wcslib/Fortran/spx_bindc.f90 create mode 100644 deps/wcslib/Fortran/spx_data.f create mode 100644 deps/wcslib/Fortran/spx_f.c create mode 100644 deps/wcslib/Fortran/tab.inc create mode 100644 deps/wcslib/Fortran/tab_bindc.f90 create mode 100644 deps/wcslib/Fortran/tab_data.f create mode 100644 deps/wcslib/Fortran/tab_f.c create mode 100644 deps/wcslib/Fortran/test/tcel1.f create mode 100644 deps/wcslib/Fortran/test/tdis1.f create mode 100644 deps/wcslib/Fortran/test/tdis2.f create mode 100644 deps/wcslib/Fortran/test/tdis2.out create mode 100644 deps/wcslib/Fortran/test/tfitshdr.f create mode 100644 deps/wcslib/Fortran/test/tfitshdr.out create mode 100644 deps/wcslib/Fortran/test/tlin.f create mode 100644 deps/wcslib/Fortran/test/tlog.f create mode 100644 deps/wcslib/Fortran/test/tpih1.f create mode 100644 deps/wcslib/Fortran/test/tpih1.out create mode 100644 deps/wcslib/Fortran/test/tpih2.f create mode 100644 deps/wcslib/Fortran/test/tprj1.f create mode 100644 deps/wcslib/Fortran/test/tprj2.f create mode 100644 deps/wcslib/Fortran/test/tspc.f create mode 100644 deps/wcslib/Fortran/test/tsph.f create mode 100644 deps/wcslib/Fortran/test/tspx.f create mode 100644 deps/wcslib/Fortran/test/ttab1.f create mode 100644 deps/wcslib/Fortran/test/ttab2.f create mode 100644 deps/wcslib/Fortran/test/ttab3.f create mode 100644 deps/wcslib/Fortran/test/tunits.f create mode 100644 deps/wcslib/Fortran/test/tunits.out create mode 100644 deps/wcslib/Fortran/test/twcs.f create mode 100644 deps/wcslib/Fortran/test/twcsfix.f create mode 100644 deps/wcslib/Fortran/test/twcsfix.out create mode 100644 deps/wcslib/Fortran/test/twcsmix.f create mode 100644 deps/wcslib/Fortran/test/twcssub.f create mode 100644 deps/wcslib/Fortran/test/twcssub.out create mode 100644 deps/wcslib/Fortran/test/twcstab.f create mode 100644 deps/wcslib/Fortran/test/twcstab.out create mode 100644 deps/wcslib/Fortran/test/wcsleep_f.c create mode 100644 deps/wcslib/Fortran/wcs.inc create mode 100644 deps/wcslib/Fortran/wcs_bindc.f90 create mode 100644 deps/wcslib/Fortran/wcs_data.f create mode 100644 deps/wcslib/Fortran/wcs_f.c create mode 100644 deps/wcslib/Fortran/wcserr.inc create mode 100644 deps/wcslib/Fortran/wcserr_bindc.f90 create mode 100644 deps/wcslib/Fortran/wcserr_f.c create mode 100644 deps/wcslib/Fortran/wcsfix.inc create mode 100644 deps/wcslib/Fortran/wcsfix_data.f create mode 100644 deps/wcslib/Fortran/wcsfix_f.c create mode 100644 deps/wcslib/Fortran/wcshdr.inc create mode 100644 deps/wcslib/Fortran/wcshdr_bindc.f90 create mode 100644 deps/wcslib/Fortran/wcshdr_data.f create mode 100644 deps/wcslib/Fortran/wcshdr_f.c create mode 100644 deps/wcslib/Fortran/wcsmath.inc create mode 100644 deps/wcslib/Fortran/wcsunits.inc create mode 100644 deps/wcslib/Fortran/wcsunits_bindc.f90 create mode 100644 deps/wcslib/Fortran/wcsunits_data.f create mode 100644 deps/wcslib/Fortran/wcsunits_f.c create mode 100644 deps/wcslib/GNUmakefile create mode 100644 deps/wcslib/INSTALL create mode 100644 deps/wcslib/README create mode 100644 deps/wcslib/THANKS create mode 100644 deps/wcslib/VALIDATION create mode 100644 deps/wcslib/config.log create mode 100755 deps/wcslib/config.status create mode 100644 deps/wcslib/config/ax_pthread.m4 create mode 100644 deps/wcslib/config/config.guess create mode 100644 deps/wcslib/config/config.sub create mode 100755 deps/wcslib/config/install-sh create mode 100755 deps/wcslib/configure create mode 100644 deps/wcslib/configure.ac create mode 100644 deps/wcslib/doxygen/Bonne.gif create mode 100644 deps/wcslib/doxygen/Doxyfile create mode 100644 deps/wcslib/doxygen/GNUmakefile create mode 100644 deps/wcslib/doxygen/README create mode 100644 deps/wcslib/doxygen/cel.sed create mode 100644 deps/wcslib/doxygen/cel_extras.dox create mode 100644 deps/wcslib/doxygen/dis.sed create mode 100644 deps/wcslib/doxygen/dis_extras.dox create mode 100644 deps/wcslib/doxygen/doxextr.l create mode 100644 deps/wcslib/doxygen/doxextr.sed create mode 100644 deps/wcslib/doxygen/fitshdr.sed create mode 100644 deps/wcslib/doxygen/fitshdr_extras.dox create mode 100644 deps/wcslib/doxygen/getwcstab.sed create mode 100644 deps/wcslib/doxygen/lin.sed create mode 100644 deps/wcslib/doxygen/lin_extras.dox create mode 100644 deps/wcslib/doxygen/mainpage.dox create mode 100644 deps/wcslib/doxygen/prj.sed create mode 100644 deps/wcslib/doxygen/prj_extras.dox create mode 100644 deps/wcslib/doxygen/spc.sed create mode 100644 deps/wcslib/doxygen/spc_extras.dox create mode 100644 deps/wcslib/doxygen/sph.sed create mode 100644 deps/wcslib/doxygen/spx.sed create mode 100644 deps/wcslib/doxygen/spx_extras.dox create mode 100644 deps/wcslib/doxygen/tab.sed create mode 100644 deps/wcslib/doxygen/tab_extras.dox create mode 100644 deps/wcslib/doxygen/wcs.sed create mode 100644 deps/wcslib/doxygen/wcs_extras.dox create mode 100644 deps/wcslib/doxygen/wcserr.sed create mode 100644 deps/wcslib/doxygen/wcsfix.sed create mode 100644 deps/wcslib/doxygen/wcsfix_extras.dox create mode 100644 deps/wcslib/doxygen/wcshdr.sed create mode 100644 deps/wcslib/doxygen/wcshdr_extras.dox create mode 100644 deps/wcslib/doxygen/wcsmath_extras.dox create mode 100644 deps/wcslib/doxygen/wcstrig.sed create mode 100644 deps/wcslib/doxygen/wcstrig_extras.dox create mode 100644 deps/wcslib/doxygen/wcsunits.sed create mode 100644 deps/wcslib/doxygen/wcsunits_extras.dox create mode 100644 deps/wcslib/doxygen/wcsutil.sed create mode 100644 deps/wcslib/flavours create mode 100644 deps/wcslib/html/Bonne.gif create mode 100644 deps/wcslib/html/annotated.html create mode 100644 deps/wcslib/html/bc_s.png create mode 100644 deps/wcslib/html/bc_sd.png create mode 100644 deps/wcslib/html/cel_8h.html create mode 100644 deps/wcslib/html/cel_8h_source.html create mode 100644 deps/wcslib/html/classes.html create mode 100644 deps/wcslib/html/clipboard.js create mode 100644 deps/wcslib/html/closed.png create mode 100644 deps/wcslib/html/cookie.js create mode 100644 deps/wcslib/html/deprecated.html create mode 100644 deps/wcslib/html/diagnostics.html create mode 100644 deps/wcslib/html/dir_af99bb3c152a306abd27951285ad1127.html create mode 100644 deps/wcslib/html/dis_8h.html create mode 100644 deps/wcslib/html/dis_8h_source.html create mode 100644 deps/wcslib/html/doc.svg create mode 100644 deps/wcslib/html/docd.svg create mode 100644 deps/wcslib/html/doxygen.css create mode 100644 deps/wcslib/html/doxygen.svg create mode 100644 deps/wcslib/html/doxygen_crawl.html create mode 100644 deps/wcslib/html/dynsections.js create mode 100644 deps/wcslib/html/files.html create mode 100644 deps/wcslib/html/fitshdr_8h.html create mode 100644 deps/wcslib/html/fitshdr_8h_source.html create mode 100644 deps/wcslib/html/folderclosed.svg create mode 100644 deps/wcslib/html/folderclosedd.svg create mode 100644 deps/wcslib/html/folderopen.svg create mode 100644 deps/wcslib/html/folderopend.svg create mode 100644 deps/wcslib/html/form_0.png create mode 100644 deps/wcslib/html/form_0_dark.png create mode 100644 deps/wcslib/html/form_1.png create mode 100644 deps/wcslib/html/form_10.png create mode 100644 deps/wcslib/html/form_10_dark.png create mode 100644 deps/wcslib/html/form_11.png create mode 100644 deps/wcslib/html/form_11_dark.png create mode 100644 deps/wcslib/html/form_12.png create mode 100644 deps/wcslib/html/form_12_dark.png create mode 100644 deps/wcslib/html/form_13.png create mode 100644 deps/wcslib/html/form_13_dark.png create mode 100644 deps/wcslib/html/form_14.png create mode 100644 deps/wcslib/html/form_14_dark.png create mode 100644 deps/wcslib/html/form_15.png create mode 100644 deps/wcslib/html/form_15_dark.png create mode 100644 deps/wcslib/html/form_16.png create mode 100644 deps/wcslib/html/form_16_dark.png create mode 100644 deps/wcslib/html/form_17.png create mode 100644 deps/wcslib/html/form_17_dark.png create mode 100644 deps/wcslib/html/form_18.png create mode 100644 deps/wcslib/html/form_18_dark.png create mode 100644 deps/wcslib/html/form_19.png create mode 100644 deps/wcslib/html/form_19_dark.png create mode 100644 deps/wcslib/html/form_1_dark.png create mode 100644 deps/wcslib/html/form_2.png create mode 100644 deps/wcslib/html/form_20.png create mode 100644 deps/wcslib/html/form_20_dark.png create mode 100644 deps/wcslib/html/form_21.png create mode 100644 deps/wcslib/html/form_21_dark.png create mode 100644 deps/wcslib/html/form_22.png create mode 100644 deps/wcslib/html/form_22_dark.png create mode 100644 deps/wcslib/html/form_23.png create mode 100644 deps/wcslib/html/form_23_dark.png create mode 100644 deps/wcslib/html/form_24.png create mode 100644 deps/wcslib/html/form_24_dark.png create mode 100644 deps/wcslib/html/form_25.png create mode 100644 deps/wcslib/html/form_25_dark.png create mode 100644 deps/wcslib/html/form_26.png create mode 100644 deps/wcslib/html/form_26_dark.png create mode 100644 deps/wcslib/html/form_27.png create mode 100644 deps/wcslib/html/form_27_dark.png create mode 100644 deps/wcslib/html/form_28.png create mode 100644 deps/wcslib/html/form_28_dark.png create mode 100644 deps/wcslib/html/form_29.png create mode 100644 deps/wcslib/html/form_29_dark.png create mode 100644 deps/wcslib/html/form_2_dark.png create mode 100644 deps/wcslib/html/form_3.png create mode 100644 deps/wcslib/html/form_30.png create mode 100644 deps/wcslib/html/form_30_dark.png create mode 100644 deps/wcslib/html/form_31.png create mode 100644 deps/wcslib/html/form_31_dark.png create mode 100644 deps/wcslib/html/form_32.png create mode 100644 deps/wcslib/html/form_32_dark.png create mode 100644 deps/wcslib/html/form_33.png create mode 100644 deps/wcslib/html/form_33_dark.png create mode 100644 deps/wcslib/html/form_34.png create mode 100644 deps/wcslib/html/form_34_dark.png create mode 100644 deps/wcslib/html/form_35.png create mode 100644 deps/wcslib/html/form_35_dark.png create mode 100644 deps/wcslib/html/form_36.png create mode 100644 deps/wcslib/html/form_36_dark.png create mode 100644 deps/wcslib/html/form_37.png create mode 100644 deps/wcslib/html/form_37_dark.png create mode 100644 deps/wcslib/html/form_38.png create mode 100644 deps/wcslib/html/form_38_dark.png create mode 100644 deps/wcslib/html/form_39.png create mode 100644 deps/wcslib/html/form_39_dark.png create mode 100644 deps/wcslib/html/form_3_dark.png create mode 100644 deps/wcslib/html/form_4.png create mode 100644 deps/wcslib/html/form_40.png create mode 100644 deps/wcslib/html/form_40_dark.png create mode 100644 deps/wcslib/html/form_41.png create mode 100644 deps/wcslib/html/form_41_dark.png create mode 100644 deps/wcslib/html/form_42.png create mode 100644 deps/wcslib/html/form_42_dark.png create mode 100644 deps/wcslib/html/form_43.png create mode 100644 deps/wcslib/html/form_43_dark.png create mode 100644 deps/wcslib/html/form_44.png create mode 100644 deps/wcslib/html/form_44_dark.png create mode 100644 deps/wcslib/html/form_45.png create mode 100644 deps/wcslib/html/form_45_dark.png create mode 100644 deps/wcslib/html/form_46.png create mode 100644 deps/wcslib/html/form_46_dark.png create mode 100644 deps/wcslib/html/form_47.png create mode 100644 deps/wcslib/html/form_47_dark.png create mode 100644 deps/wcslib/html/form_48.png create mode 100644 deps/wcslib/html/form_48_dark.png create mode 100644 deps/wcslib/html/form_49.png create mode 100644 deps/wcslib/html/form_49_dark.png create mode 100644 deps/wcslib/html/form_4_dark.png create mode 100644 deps/wcslib/html/form_5.png create mode 100644 deps/wcslib/html/form_50.png create mode 100644 deps/wcslib/html/form_50_dark.png create mode 100644 deps/wcslib/html/form_51.png create mode 100644 deps/wcslib/html/form_51_dark.png create mode 100644 deps/wcslib/html/form_52.png create mode 100644 deps/wcslib/html/form_52_dark.png create mode 100644 deps/wcslib/html/form_53.png create mode 100644 deps/wcslib/html/form_53_dark.png create mode 100644 deps/wcslib/html/form_54.png create mode 100644 deps/wcslib/html/form_54_dark.png create mode 100644 deps/wcslib/html/form_55.png create mode 100644 deps/wcslib/html/form_55_dark.png create mode 100644 deps/wcslib/html/form_56.png create mode 100644 deps/wcslib/html/form_56_dark.png create mode 100644 deps/wcslib/html/form_57.png create mode 100644 deps/wcslib/html/form_57_dark.png create mode 100644 deps/wcslib/html/form_58.png create mode 100644 deps/wcslib/html/form_58_dark.png create mode 100644 deps/wcslib/html/form_59.png create mode 100644 deps/wcslib/html/form_59_dark.png create mode 100644 deps/wcslib/html/form_5_dark.png create mode 100644 deps/wcslib/html/form_6.png create mode 100644 deps/wcslib/html/form_60.png create mode 100644 deps/wcslib/html/form_60_dark.png create mode 100644 deps/wcslib/html/form_61.png create mode 100644 deps/wcslib/html/form_61_dark.png create mode 100644 deps/wcslib/html/form_62.png create mode 100644 deps/wcslib/html/form_62_dark.png create mode 100644 deps/wcslib/html/form_63.png create mode 100644 deps/wcslib/html/form_63_dark.png create mode 100644 deps/wcslib/html/form_64.png create mode 100644 deps/wcslib/html/form_64_dark.png create mode 100644 deps/wcslib/html/form_65.png create mode 100644 deps/wcslib/html/form_65_dark.png create mode 100644 deps/wcslib/html/form_66.png create mode 100644 deps/wcslib/html/form_66_dark.png create mode 100644 deps/wcslib/html/form_67.png create mode 100644 deps/wcslib/html/form_67_dark.png create mode 100644 deps/wcslib/html/form_68.png create mode 100644 deps/wcslib/html/form_68_dark.png create mode 100644 deps/wcslib/html/form_69.png create mode 100644 deps/wcslib/html/form_69_dark.png create mode 100644 deps/wcslib/html/form_6_dark.png create mode 100644 deps/wcslib/html/form_7.png create mode 100644 deps/wcslib/html/form_70.png create mode 100644 deps/wcslib/html/form_70_dark.png create mode 100644 deps/wcslib/html/form_71.png create mode 100644 deps/wcslib/html/form_71_dark.png create mode 100644 deps/wcslib/html/form_72.png create mode 100644 deps/wcslib/html/form_72_dark.png create mode 100644 deps/wcslib/html/form_73.png create mode 100644 deps/wcslib/html/form_73_dark.png create mode 100644 deps/wcslib/html/form_74.png create mode 100644 deps/wcslib/html/form_74_dark.png create mode 100644 deps/wcslib/html/form_75.png create mode 100644 deps/wcslib/html/form_75_dark.png create mode 100644 deps/wcslib/html/form_76.png create mode 100644 deps/wcslib/html/form_76_dark.png create mode 100644 deps/wcslib/html/form_7_dark.png create mode 100644 deps/wcslib/html/form_8.png create mode 100644 deps/wcslib/html/form_8_dark.png create mode 100644 deps/wcslib/html/form_9.png create mode 100644 deps/wcslib/html/form_9_dark.png create mode 100644 deps/wcslib/html/formula.repository create mode 100644 deps/wcslib/html/fortran.html create mode 100644 deps/wcslib/html/functions.html create mode 100644 deps/wcslib/html/functions_b.html create mode 100644 deps/wcslib/html/functions_c.html create mode 100644 deps/wcslib/html/functions_d.html create mode 100644 deps/wcslib/html/functions_e.html create mode 100644 deps/wcslib/html/functions_f.html create mode 100644 deps/wcslib/html/functions_g.html create mode 100644 deps/wcslib/html/functions_h.html create mode 100644 deps/wcslib/html/functions_i.html create mode 100644 deps/wcslib/html/functions_j.html create mode 100644 deps/wcslib/html/functions_k.html create mode 100644 deps/wcslib/html/functions_l.html create mode 100644 deps/wcslib/html/functions_m.html create mode 100644 deps/wcslib/html/functions_n.html create mode 100644 deps/wcslib/html/functions_o.html create mode 100644 deps/wcslib/html/functions_p.html create mode 100644 deps/wcslib/html/functions_r.html create mode 100644 deps/wcslib/html/functions_s.html create mode 100644 deps/wcslib/html/functions_t.html create mode 100644 deps/wcslib/html/functions_u.html create mode 100644 deps/wcslib/html/functions_v.html create mode 100644 deps/wcslib/html/functions_vars.html create mode 100644 deps/wcslib/html/functions_vars_b.html create mode 100644 deps/wcslib/html/functions_vars_c.html create mode 100644 deps/wcslib/html/functions_vars_d.html create mode 100644 deps/wcslib/html/functions_vars_e.html create mode 100644 deps/wcslib/html/functions_vars_f.html create mode 100644 deps/wcslib/html/functions_vars_g.html create mode 100644 deps/wcslib/html/functions_vars_h.html create mode 100644 deps/wcslib/html/functions_vars_i.html create mode 100644 deps/wcslib/html/functions_vars_j.html create mode 100644 deps/wcslib/html/functions_vars_k.html create mode 100644 deps/wcslib/html/functions_vars_l.html create mode 100644 deps/wcslib/html/functions_vars_m.html create mode 100644 deps/wcslib/html/functions_vars_n.html create mode 100644 deps/wcslib/html/functions_vars_o.html create mode 100644 deps/wcslib/html/functions_vars_p.html create mode 100644 deps/wcslib/html/functions_vars_r.html create mode 100644 deps/wcslib/html/functions_vars_s.html create mode 100644 deps/wcslib/html/functions_vars_t.html create mode 100644 deps/wcslib/html/functions_vars_u.html create mode 100644 deps/wcslib/html/functions_vars_v.html create mode 100644 deps/wcslib/html/functions_vars_w.html create mode 100644 deps/wcslib/html/functions_vars_x.html create mode 100644 deps/wcslib/html/functions_vars_y.html create mode 100644 deps/wcslib/html/functions_vars_z.html create mode 100644 deps/wcslib/html/functions_w.html create mode 100644 deps/wcslib/html/functions_x.html create mode 100644 deps/wcslib/html/functions_y.html create mode 100644 deps/wcslib/html/functions_z.html create mode 100644 deps/wcslib/html/getwcstab_8h.html create mode 100644 deps/wcslib/html/getwcstab_8h_source.html create mode 100644 deps/wcslib/html/globals.html create mode 100644 deps/wcslib/html/globals_b.html create mode 100644 deps/wcslib/html/globals_c.html create mode 100644 deps/wcslib/html/globals_d.html create mode 100644 deps/wcslib/html/globals_defs.html create mode 100644 deps/wcslib/html/globals_e.html create mode 100644 deps/wcslib/html/globals_enum.html create mode 100644 deps/wcslib/html/globals_eval.html create mode 100644 deps/wcslib/html/globals_f.html create mode 100644 deps/wcslib/html/globals_func.html create mode 100644 deps/wcslib/html/globals_func_b.html create mode 100644 deps/wcslib/html/globals_func_c.html create mode 100644 deps/wcslib/html/globals_func_d.html create mode 100644 deps/wcslib/html/globals_func_e.html create mode 100644 deps/wcslib/html/globals_func_f.html create mode 100644 deps/wcslib/html/globals_func_h.html create mode 100644 deps/wcslib/html/globals_func_l.html create mode 100644 deps/wcslib/html/globals_func_m.html create mode 100644 deps/wcslib/html/globals_func_o.html create mode 100644 deps/wcslib/html/globals_func_p.html create mode 100644 deps/wcslib/html/globals_func_q.html create mode 100644 deps/wcslib/html/globals_func_s.html create mode 100644 deps/wcslib/html/globals_func_t.html create mode 100644 deps/wcslib/html/globals_func_u.html create mode 100644 deps/wcslib/html/globals_func_v.html create mode 100644 deps/wcslib/html/globals_func_w.html create mode 100644 deps/wcslib/html/globals_func_x.html create mode 100644 deps/wcslib/html/globals_func_z.html create mode 100644 deps/wcslib/html/globals_h.html create mode 100644 deps/wcslib/html/globals_i.html create mode 100644 deps/wcslib/html/globals_k.html create mode 100644 deps/wcslib/html/globals_l.html create mode 100644 deps/wcslib/html/globals_m.html create mode 100644 deps/wcslib/html/globals_n.html create mode 100644 deps/wcslib/html/globals_o.html create mode 100644 deps/wcslib/html/globals_p.html create mode 100644 deps/wcslib/html/globals_q.html create mode 100644 deps/wcslib/html/globals_r.html create mode 100644 deps/wcslib/html/globals_s.html create mode 100644 deps/wcslib/html/globals_t.html create mode 100644 deps/wcslib/html/globals_type.html create mode 100644 deps/wcslib/html/globals_u.html create mode 100644 deps/wcslib/html/globals_v.html create mode 100644 deps/wcslib/html/globals_vars.html create mode 100644 deps/wcslib/html/globals_w.html create mode 100644 deps/wcslib/html/globals_x.html create mode 100644 deps/wcslib/html/globals_z.html create mode 100644 deps/wcslib/html/index.html create mode 100644 deps/wcslib/html/intro.html create mode 100644 deps/wcslib/html/jquery.js create mode 100644 deps/wcslib/html/limits.html create mode 100644 deps/wcslib/html/lin_8h.html create mode 100644 deps/wcslib/html/lin_8h_source.html create mode 100644 deps/wcslib/html/log_8h.html create mode 100644 deps/wcslib/html/log_8h_source.html create mode 100644 deps/wcslib/html/memory.html create mode 100644 deps/wcslib/html/menu.js create mode 100644 deps/wcslib/html/menudata.js create mode 100644 deps/wcslib/html/minus.svg create mode 100644 deps/wcslib/html/minusd.svg create mode 100644 deps/wcslib/html/nav_f.png create mode 100644 deps/wcslib/html/nav_fd.png create mode 100644 deps/wcslib/html/nav_g.png create mode 100644 deps/wcslib/html/nav_h.png create mode 100644 deps/wcslib/html/nav_hd.png create mode 100644 deps/wcslib/html/navtree.css create mode 100644 deps/wcslib/html/open.png create mode 100644 deps/wcslib/html/overview.html create mode 100644 deps/wcslib/html/pages.html create mode 100644 deps/wcslib/html/pgsbox.html create mode 100644 deps/wcslib/html/plus.svg create mode 100644 deps/wcslib/html/plusd.svg create mode 100644 deps/wcslib/html/prj_8h.html create mode 100644 deps/wcslib/html/prj_8h_source.html create mode 100644 deps/wcslib/html/resize.js create mode 100644 deps/wcslib/html/search/all_0.js create mode 100644 deps/wcslib/html/search/all_1.js create mode 100644 deps/wcslib/html/search/all_10.js create mode 100644 deps/wcslib/html/search/all_11.js create mode 100644 deps/wcslib/html/search/all_12.js create mode 100644 deps/wcslib/html/search/all_13.js create mode 100644 deps/wcslib/html/search/all_14.js create mode 100644 deps/wcslib/html/search/all_15.js create mode 100644 deps/wcslib/html/search/all_16.js create mode 100644 deps/wcslib/html/search/all_17.js create mode 100644 deps/wcslib/html/search/all_18.js create mode 100644 deps/wcslib/html/search/all_19.js create mode 100644 deps/wcslib/html/search/all_1a.js create mode 100644 deps/wcslib/html/search/all_1b.js create mode 100644 deps/wcslib/html/search/all_2.js create mode 100644 deps/wcslib/html/search/all_3.js create mode 100644 deps/wcslib/html/search/all_4.js create mode 100644 deps/wcslib/html/search/all_5.js create mode 100644 deps/wcslib/html/search/all_6.js create mode 100644 deps/wcslib/html/search/all_7.js create mode 100644 deps/wcslib/html/search/all_8.js create mode 100644 deps/wcslib/html/search/all_9.js create mode 100644 deps/wcslib/html/search/all_a.js create mode 100644 deps/wcslib/html/search/all_b.js create mode 100644 deps/wcslib/html/search/all_c.js create mode 100644 deps/wcslib/html/search/all_d.js create mode 100644 deps/wcslib/html/search/all_e.js create mode 100644 deps/wcslib/html/search/all_f.js create mode 100644 deps/wcslib/html/search/classes_0.js create mode 100644 deps/wcslib/html/search/classes_1.js create mode 100644 deps/wcslib/html/search/classes_2.js create mode 100644 deps/wcslib/html/search/classes_3.js create mode 100644 deps/wcslib/html/search/classes_4.js create mode 100644 deps/wcslib/html/search/classes_5.js create mode 100644 deps/wcslib/html/search/classes_6.js create mode 100644 deps/wcslib/html/search/classes_7.js create mode 100644 deps/wcslib/html/search/classes_8.js create mode 100644 deps/wcslib/html/search/close.svg create mode 100644 deps/wcslib/html/search/defines_0.js create mode 100644 deps/wcslib/html/search/defines_1.js create mode 100644 deps/wcslib/html/search/defines_2.js create mode 100644 deps/wcslib/html/search/defines_3.js create mode 100644 deps/wcslib/html/search/defines_4.js create mode 100644 deps/wcslib/html/search/defines_5.js create mode 100644 deps/wcslib/html/search/defines_6.js create mode 100644 deps/wcslib/html/search/defines_7.js create mode 100644 deps/wcslib/html/search/defines_8.js create mode 100644 deps/wcslib/html/search/defines_9.js create mode 100644 deps/wcslib/html/search/defines_a.js create mode 100644 deps/wcslib/html/search/defines_b.js create mode 100644 deps/wcslib/html/search/defines_c.js create mode 100644 deps/wcslib/html/search/defines_d.js create mode 100644 deps/wcslib/html/search/defines_e.js create mode 100644 deps/wcslib/html/search/enums_0.js create mode 100644 deps/wcslib/html/search/enums_1.js create mode 100644 deps/wcslib/html/search/enums_2.js create mode 100644 deps/wcslib/html/search/enums_3.js create mode 100644 deps/wcslib/html/search/enums_4.js create mode 100644 deps/wcslib/html/search/enums_5.js create mode 100644 deps/wcslib/html/search/enums_6.js create mode 100644 deps/wcslib/html/search/enums_7.js create mode 100644 deps/wcslib/html/search/enumvalues_0.js create mode 100644 deps/wcslib/html/search/enumvalues_1.js create mode 100644 deps/wcslib/html/search/enumvalues_2.js create mode 100644 deps/wcslib/html/search/enumvalues_3.js create mode 100644 deps/wcslib/html/search/enumvalues_4.js create mode 100644 deps/wcslib/html/search/enumvalues_5.js create mode 100644 deps/wcslib/html/search/enumvalues_6.js create mode 100644 deps/wcslib/html/search/enumvalues_7.js create mode 100644 deps/wcslib/html/search/enumvalues_8.js create mode 100644 deps/wcslib/html/search/files_0.js create mode 100644 deps/wcslib/html/search/files_1.js create mode 100644 deps/wcslib/html/search/files_2.js create mode 100644 deps/wcslib/html/search/files_3.js create mode 100644 deps/wcslib/html/search/files_4.js create mode 100644 deps/wcslib/html/search/files_5.js create mode 100644 deps/wcslib/html/search/files_6.js create mode 100644 deps/wcslib/html/search/files_7.js create mode 100644 deps/wcslib/html/search/files_8.js create mode 100644 deps/wcslib/html/search/functions_0.js create mode 100644 deps/wcslib/html/search/functions_1.js create mode 100644 deps/wcslib/html/search/functions_10.js create mode 100644 deps/wcslib/html/search/functions_11.js create mode 100644 deps/wcslib/html/search/functions_12.js create mode 100644 deps/wcslib/html/search/functions_2.js create mode 100644 deps/wcslib/html/search/functions_3.js create mode 100644 deps/wcslib/html/search/functions_4.js create mode 100644 deps/wcslib/html/search/functions_5.js create mode 100644 deps/wcslib/html/search/functions_6.js create mode 100644 deps/wcslib/html/search/functions_7.js create mode 100644 deps/wcslib/html/search/functions_8.js create mode 100644 deps/wcslib/html/search/functions_9.js create mode 100644 deps/wcslib/html/search/functions_a.js create mode 100644 deps/wcslib/html/search/functions_b.js create mode 100644 deps/wcslib/html/search/functions_c.js create mode 100644 deps/wcslib/html/search/functions_d.js create mode 100644 deps/wcslib/html/search/functions_e.js create mode 100644 deps/wcslib/html/search/functions_f.js create mode 100644 deps/wcslib/html/search/mag.svg create mode 100644 deps/wcslib/html/search/mag_d.svg create mode 100644 deps/wcslib/html/search/mag_sel.svg create mode 100644 deps/wcslib/html/search/mag_seld.svg create mode 100644 deps/wcslib/html/search/pages_0.js create mode 100644 deps/wcslib/html/search/pages_1.js create mode 100644 deps/wcslib/html/search/pages_10.js create mode 100644 deps/wcslib/html/search/pages_11.js create mode 100644 deps/wcslib/html/search/pages_2.js create mode 100644 deps/wcslib/html/search/pages_3.js create mode 100644 deps/wcslib/html/search/pages_4.js create mode 100644 deps/wcslib/html/search/pages_5.js create mode 100644 deps/wcslib/html/search/pages_6.js create mode 100644 deps/wcslib/html/search/pages_7.js create mode 100644 deps/wcslib/html/search/pages_8.js create mode 100644 deps/wcslib/html/search/pages_9.js create mode 100644 deps/wcslib/html/search/pages_a.js create mode 100644 deps/wcslib/html/search/pages_b.js create mode 100644 deps/wcslib/html/search/pages_c.js create mode 100644 deps/wcslib/html/search/pages_d.js create mode 100644 deps/wcslib/html/search/pages_e.js create mode 100644 deps/wcslib/html/search/pages_f.js create mode 100644 deps/wcslib/html/search/search.css create mode 100644 deps/wcslib/html/search/search.js create mode 100644 deps/wcslib/html/search/searchdata.js create mode 100644 deps/wcslib/html/search/typedefs_0.js create mode 100644 deps/wcslib/html/search/variables_0.js create mode 100644 deps/wcslib/html/search/variables_1.js create mode 100644 deps/wcslib/html/search/variables_10.js create mode 100644 deps/wcslib/html/search/variables_11.js create mode 100644 deps/wcslib/html/search/variables_12.js create mode 100644 deps/wcslib/html/search/variables_13.js create mode 100644 deps/wcslib/html/search/variables_14.js create mode 100644 deps/wcslib/html/search/variables_15.js create mode 100644 deps/wcslib/html/search/variables_16.js create mode 100644 deps/wcslib/html/search/variables_17.js create mode 100644 deps/wcslib/html/search/variables_18.js create mode 100644 deps/wcslib/html/search/variables_19.js create mode 100644 deps/wcslib/html/search/variables_2.js create mode 100644 deps/wcslib/html/search/variables_3.js create mode 100644 deps/wcslib/html/search/variables_4.js create mode 100644 deps/wcslib/html/search/variables_5.js create mode 100644 deps/wcslib/html/search/variables_6.js create mode 100644 deps/wcslib/html/search/variables_7.js create mode 100644 deps/wcslib/html/search/variables_8.js create mode 100644 deps/wcslib/html/search/variables_9.js create mode 100644 deps/wcslib/html/search/variables_a.js create mode 100644 deps/wcslib/html/search/variables_b.js create mode 100644 deps/wcslib/html/search/variables_c.js create mode 100644 deps/wcslib/html/search/variables_d.js create mode 100644 deps/wcslib/html/search/variables_e.js create mode 100644 deps/wcslib/html/search/variables_f.js create mode 100644 deps/wcslib/html/software.html create mode 100644 deps/wcslib/html/spc_8h.html create mode 100644 deps/wcslib/html/spc_8h_source.html create mode 100644 deps/wcslib/html/sph_8h.html create mode 100644 deps/wcslib/html/sph_8h_source.html create mode 100644 deps/wcslib/html/splitbar.png create mode 100644 deps/wcslib/html/splitbard.png create mode 100644 deps/wcslib/html/spx_8h.html create mode 100644 deps/wcslib/html/spx_8h_source.html create mode 100644 deps/wcslib/html/structauxprm.html create mode 100644 deps/wcslib/html/structcelprm.html create mode 100644 deps/wcslib/html/structdisprm.html create mode 100644 deps/wcslib/html/structdpkey.html create mode 100644 deps/wcslib/html/structfitskey.html create mode 100644 deps/wcslib/html/structfitskeyid.html create mode 100644 deps/wcslib/html/structlinprm.html create mode 100644 deps/wcslib/html/structprjprm.html create mode 100644 deps/wcslib/html/structpscard.html create mode 100644 deps/wcslib/html/structpvcard.html create mode 100644 deps/wcslib/html/structs.html create mode 100644 deps/wcslib/html/structspcprm.html create mode 100644 deps/wcslib/html/structspxprm.html create mode 100644 deps/wcslib/html/structtabprm.html create mode 100644 deps/wcslib/html/structwcserr.html create mode 100644 deps/wcslib/html/structwcsprm.html create mode 100644 deps/wcslib/html/structwtbarr.html create mode 100644 deps/wcslib/html/sync_off.png create mode 100644 deps/wcslib/html/sync_on.png create mode 100644 deps/wcslib/html/tab_8h.html create mode 100644 deps/wcslib/html/tab_8h_source.html create mode 100644 deps/wcslib/html/tab_a.png create mode 100644 deps/wcslib/html/tab_ad.png create mode 100644 deps/wcslib/html/tab_b.png create mode 100644 deps/wcslib/html/tab_bd.png create mode 100644 deps/wcslib/html/tab_h.png create mode 100644 deps/wcslib/html/tab_hd.png create mode 100644 deps/wcslib/html/tab_s.png create mode 100644 deps/wcslib/html/tab_sd.png create mode 100644 deps/wcslib/html/tabs.css create mode 100644 deps/wcslib/html/testing.html create mode 100644 deps/wcslib/html/threads.html create mode 100644 deps/wcslib/html/vector.html create mode 100644 deps/wcslib/html/versioning.html create mode 100644 deps/wcslib/html/wcs_8h.html create mode 100644 deps/wcslib/html/wcs_8h_source.html create mode 100644 deps/wcslib/html/wcserr_8h.html create mode 100644 deps/wcslib/html/wcserr_8h_source.html create mode 100644 deps/wcslib/html/wcsfix_8h.html create mode 100644 deps/wcslib/html/wcsfix_8h_source.html create mode 100644 deps/wcslib/html/wcshdr_8h.html create mode 100644 deps/wcslib/html/wcshdr_8h_source.html create mode 100644 deps/wcslib/html/wcslib_8h.html create mode 100644 deps/wcslib/html/wcslib_8h_source.html create mode 100644 deps/wcslib/html/wcsmath_8h.html create mode 100644 deps/wcslib/html/wcsmath_8h_source.html create mode 100644 deps/wcslib/html/wcsprintf_8h.html create mode 100644 deps/wcslib/html/wcsprintf_8h_source.html create mode 100644 deps/wcslib/html/wcstrig_8h.html create mode 100644 deps/wcslib/html/wcstrig_8h_source.html create mode 100644 deps/wcslib/html/wcsunits_8h.html create mode 100644 deps/wcslib/html/wcsunits_8h_source.html create mode 100644 deps/wcslib/html/wcsutil_8h.html create mode 100644 deps/wcslib/html/wcsutil_8h_source.html create mode 100644 deps/wcslib/html/wtbarr_8h.html create mode 100644 deps/wcslib/html/wtbarr_8h_source.html create mode 100644 deps/wcslib/makedefs create mode 100644 deps/wcslib/makedefs.in create mode 100644 deps/wcslib/pgsbox/GNUmakefile create mode 100644 deps/wcslib/pgsbox/cpgsbox.c create mode 100644 deps/wcslib/pgsbox/cpgsbox.h create mode 100644 deps/wcslib/pgsbox/cpgtest.c create mode 100644 deps/wcslib/pgsbox/fscan.F create mode 100644 deps/wcslib/pgsbox/lngvel.F create mode 100644 deps/wcslib/pgsbox/pgcrfn.F create mode 100644 deps/wcslib/pgsbox/pgcrfn_bindc.f90 create mode 100644 deps/wcslib/pgsbox/pgcrvl.f create mode 100644 deps/wcslib/pgsbox/pgsbox.f create mode 100644 deps/wcslib/pgsbox/pgsbox_bindc.f90 create mode 100644 deps/wcslib/pgsbox/pgtest.f create mode 100644 deps/wcslib/pgsbox/pgwcsl.c create mode 100644 deps/wcslib/pgsbox/pgwcsl.h create mode 100644 deps/wcslib/pgsbox/pgwcsl_bindc.f90 create mode 100644 deps/wcslib/utils/GNUmakefile create mode 100644 deps/wcslib/utils/HPXcvt.1 create mode 100644 deps/wcslib/utils/HPXcvt.c create mode 100644 deps/wcslib/utils/fitshdr.1 create mode 100644 deps/wcslib/utils/fitshdr.c create mode 100644 deps/wcslib/utils/sundazel.1 create mode 100644 deps/wcslib/utils/sundazel.c create mode 100644 deps/wcslib/utils/tofits.1 create mode 100644 deps/wcslib/utils/tofits.c create mode 100644 deps/wcslib/utils/wcsgrid.1 create mode 100644 deps/wcslib/utils/wcsgrid.c create mode 100644 deps/wcslib/utils/wcsware.1 create mode 100644 deps/wcslib/utils/wcsware.c create mode 100644 deps/wcslib/wcsconfig.h create mode 100644 deps/wcslib/wcsconfig.h.in create mode 100644 deps/wcslib/wcsconfig_f77.h create mode 100644 deps/wcslib/wcsconfig_f77.h.in create mode 100644 deps/wcslib/wcsconfig_tests.h create mode 100644 deps/wcslib/wcsconfig_tests.h.in create mode 100644 deps/wcslib/wcsconfig_utils.h create mode 100644 deps/wcslib/wcsconfig_utils.h.in create mode 100644 deps/wcslib/wcslib.pc create mode 100644 deps/wcslib/wcslib.pc.in create mode 100644 deps/wcslib/wcslib.pdf diff --git a/CMakeLists.txt b/CMakeLists.txt index be5a7c9..581aa95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deps/cfitsio) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deps/TRIANGLE) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deps/GSL) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deps/sep) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/deps/wcslib) find_package(Boost COMPONENTS thread REQUIRED) if(CMAKE_BUILD_TYPE STREQUAL "Debug") diff --git a/astroimsumlib/CMakeLists.txt b/astroimsumlib/CMakeLists.txt index a4e934b..d4d40f2 100644 --- a/astroimsumlib/CMakeLists.txt +++ b/astroimsumlib/CMakeLists.txt @@ -11,7 +11,7 @@ set_property(TARGET imsumlib PROPERTY POSITION_INDEPENDENT_CODE 1) target_compile_options(imsumlib PUBLIC ${COMMON_COMPILE_OPTIONS}) target_link_options(imsumlib PUBLIC ${COMMON_LINK_OPTIONS}) -target_link_libraries(imsumlib PUBLIC ${Boost_LIBRARIES} cfitsio triangle GSL sep) +target_link_libraries(imsumlib PUBLIC ${Boost_LIBRARIES} cfitsio triangle GSL sep wcslib) target_include_directories(imsumlib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) add_library(imsumlib_shared SHARED $) @@ -19,10 +19,10 @@ add_library(imsumlib_static STATIC $) target_compile_options(imsumlib_shared PUBLIC ${COMMON_COMPILE_OPTIONS}) target_link_options(imsumlib_shared PUBLIC ${COMMON_LINK_OPTIONS}) -target_link_libraries(imsumlib_shared PUBLIC ${Boost_LIBRARIES} cfitsio triangle GSL sep) +target_link_libraries(imsumlib_shared PUBLIC ${Boost_LIBRARIES} cfitsio triangle GSL sep wcslib) target_include_directories(imsumlib_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) target_compile_options(imsumlib_static PUBLIC ${COMMON_COMPILE_OPTIONS}) target_link_options(imsumlib_static PUBLIC ${COMMON_LINK_OPTIONS}) -target_link_libraries(imsumlib_static PUBLIC ${Boost_LIBRARIES} cfitsio triangle GSL sep) +target_link_libraries(imsumlib_static PUBLIC ${Boost_LIBRARIES} cfitsio triangle GSL sep wcslib) target_include_directories(imsumlib_static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/deps/wcslib/C/GNUmakefile b/deps/wcslib/C/GNUmakefile new file mode 100644 index 0000000..78b80d5 --- /dev/null +++ b/deps/wcslib/C/GNUmakefile @@ -0,0 +1,567 @@ +#----------------------------------------------------------------------------- +# GNU makefile for building WCSLIB 8.4 and its test suite. +# +# Summary of the main targets +# --------------------------- +# build: Build the library. +# +# clean: Delete intermediate object files. +# +# cleaner: clean, and also delete the test executables. +# +# cleanest (distclean or realclean): cleaner, and also delete the object +# library and the C source files generated by 'flex'. +# +# check (or test): Compile and run the test programs. By default they are +# executed in batch mode, and non-graphical tests only report +# "PASS" on success. Use +# +# make MODE=interactive check +# +# to run them interactively with full diagnostic output. To skip +# graphical tests even if PGPLOT is available, use +# +# make CHECK=nopgplot check +# +# tests: Compile the test programs (but don't run them). +# +# Notes: +# 1) If you need to make changes then preferably modify ../makedefs.in +# instead and re-run configure. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: GNUmakefile,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +#----------------------------------------------------------------------------- +# Get configure settings. +SUBDIR := C +include ../makedefs + +FLEXMODS := $(patsubst %.l,%.c,$(wildcard *.l)) +MODULES := $(sort \ + $(patsubst %.c,%.o, \ + $(filter-out getwcstab.c,$(wildcard *.c)) $(FLEXMODS))) + +ifeq "$(WCSTRIG)" "MACRO" + CPPFLAGS += -DWCSTRIG_MACRO + MODULES := $(filter-out wcstrig.o, $(MODULES)) +else + ifeq "$(WCSTRIG)" "NATIVE" + MODULES := $(filter-out wcstrig.o, $(MODULES)) + endif +endif + +LIBLOCK := lib.lock + +# For building the sharable library. +PICLIB := libwcs-PIC.a + +CPPFLAGS += -I. -I.. + +vpath %.c test +vpath %.h .. +vpath %.in .. + + +# For building and exercising the test suite +# ------------------------------------------ +# Test programs that don't require CFITSIO or PGPLOT... +TEST_N := tlin tdis1 tdis2 tlog tprj1 tsph tsphdpa tspx ttab1 twcs twcssub \ + tpih1 tbth1 tfitshdr tunits twcsfix twcscompare + +# ...and unofficial test programs. +TEST_n := tdisiter tspcaips tspcspxe tspctrne twcs_locale + +# Test programs that require CFITSIO (they don't need PGPLOT). +TEST_C := twcstab twcshdr tdis3 twcslint + +# Test programs that require PGPLOT but not PGSBOX. +TEST_P := tspc tprj2 tcel1 tcel2 ttab2 ttab3 twcsmix + +# Test programs that require PGSBOX (and therefore PGPLOT). +TEST_B := tpih2 + +# Test programs for POSIX threads. +TEST_T := tpih_pthread twcs_pthread + +# Test programs that are compiled but not automatically exercised. +TEST_X := tsphdpa twcshdr + + +TESTS := $(TEST_N) + +# Do we have CFITSIO? +DO_CFITSIO := 1 +ifeq "$(CFITSIOINC)" "" + DO_CFITSIO := 0 +else ifeq "$(CFITSIOLIB)" "" + DO_CFITSIO := 0 +endif + +ifeq "$(DO_CFITSIO)" "1" + # Yes, add test programs that use it. + TESTS += $(TEST_C) + CFITSIO_CFLAGS := $(filter-out -Wpadded,$(CFLAGS)) +else + # No, amend TEST_X. + TEST_X := $(filter-out $(TEST_C),$(TEST_X)) +endif + +# Do we have PGPLOT? +DO_PGPLOT := 0 +ifneq "$(CHECK)" "nopgplot" + DO_PGPLOT := 1 + ifeq "$(PGPLOTINC)" "" + DO_PGPLOT := 0 + else ifeq "$(PGPLOTLIB)" "" + DO_PGPLOT := 0 + endif + + ifeq "$(DO_PGPLOT)" "1" + # Yes, add test programs that use it. + TESTS += $(TEST_P) $(TEST_B) + else + # No, amend TEST_X. + TEST_X := $(filter-out $(TEST_P) $(TEST_B),$(TEST_X)) + endif +endif + +# Remove tests that aren't automatically exercised. +TESTS := $(filter-out $(TEST_X), $(TESTS)) + +PGSBOXLIB := ../pgsbox/libpgsbox-$(LIBVER).a + +ADDRE := 0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]* + +# Pattern rules +#-------------- + +ifeq "$(FLEX)" "flex" + %.c : %.l + -@ echo '' + -@ $(RM) $@ + $(FLEX) $(FLFLAGS) -t $< | sed -e 's/^[ ]*#/#/' > $@ +else + %.c : %.l + -@ echo '' + -@ $(RM) $@ + cp flexed/$@ . +endif + +$(WCSLIB)(%.o) : %.c + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(RM) $% ; \ + fi + +$(PICLIB)(%.o) : $(WCSLIB)(%.o) + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) $(SHRFLAGS) -c $(%:.o=.c) + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(RM) $% ; \ + fi + +# May need to create temporary symlinks to include file directories for +# CFITSIO, etc. for the following two rules. +%.i : %.c + -@ echo '' + -@ $(RM) $@ + $(CPP) $(CPPFLAGS) $(CFLAGS) $< > $@ + +# Print out include file dependencies. +%.d : %.c + -@ echo '' + -@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< | \ + sed -n -e 's|^# 1 "\([^/].*\.h\)".*|\1|p' | \ + sed -e 's|.*/||' | \ + sort -u + +%.fits : test/%.keyrec ../utils/tofits + ../utils/tofits < $< > $@ + +# Use 'make VALGRIND=T run_%' to have VALGRIND defined (from flavours). +# Use 'make VALGRIND=T check < /dev/null |& tee check_valgrind.log' to run +# valgrind on the lot. +run_% : % + -@ echo '' + -@ $(TIMER) + @ if [ '$(MODE)' = interactive -o '$(VALGRIND)' ] ; then \ + printf 'Press to run $<: ' ; \ + read DUMMY ; \ + fi ; \ + if [ '$(VALGRIND)' ] ; then \ + if [ '$<' = tunits ] ; then \ + $(VALGRIND) ./$< < test/units_test ; \ + else \ + $(VALGRIND) ./$< ; \ + fi ; \ + else \ + if [ '$(filter $<, $(TEST_N) $(TEST_C))' ] ; then \ + if [ '$<' = tunits ] ; then \ + if [ '$(MODE)' = interactive ] ; then \ + ./$< < test/units_test 2>&1 | tee $<.out ; \ + else \ + ./$< < test/units_test > $<.out 2>&1 ; \ + fi ; \ + else \ + if [ '$(MODE)' = interactive ] ; then \ + ./$< < /dev/null 2>&1 | tee $<.out ; \ + else \ + ./$< < /dev/null > $<.out 2>&1 ; \ + fi ; \ + fi ; \ + if grep 'FAIL:' $<.out > /dev/null ; then \ + if [ '$(MODE)' != interactive ] ; then \ + head -2 $<.out ; \ + grep 'FAIL:' $<.out ; \ + fi ; \ + echo 'FAIL: C/$<' >> test_results ; \ + elif grep 'PASS:' $<.out > /dev/null ; then \ + if [ '$(MODE)' != interactive ] ; then \ + head -2 $<.out ; \ + grep 'PASS:' $<.out ; \ + fi ; \ + echo 'PASS: C/$<' >> test_results ; \ + elif [ -f 'test/$<.out' ] ; then \ + trap 'rm -f run_$<.tmp' 0 1 2 3 15 ; \ + sed -e 's/$(ADDRE)/0x
/g' \ + -e 's/chksum:.*/chksum: /' $<.out > \ + run_$<.tmp ; \ + mv -f run_$<.tmp $<.out ; \ + if cmp -s $<.out test/$<.out ; then \ + if [ '$(MODE)' != interactive ] ; then \ + head -2 $<.out ; \ + fi ; \ + echo 'PASS: Output agrees with C/test/$<.out' ; \ + echo 'PASS: C/$<' >> test_results ; \ + else \ + if [ '$(MODE)' != interactive ] ; then \ + cat $<.out ; \ + fi ; \ + echo '' ; \ + echo 'FAIL: Output disagrees with C/test/$<.out' ; \ + echo 'FAIL: C/$<' >> test_results ; \ + fi ; \ + elif [ '$(MODE)' != interactive ] ; then \ + cat $<.out ; \ + echo 'FAIL: C/$<' >> test_results ; \ + fi ; \ + elif [ '$(MODE)' = interactive ] ; then \ + ./$< ; \ + else \ + if [ '$<' = tcel2 ] ; then \ + echo N | ./$< ; \ + else \ + ./$< < /dev/null 2>&1 ; \ + fi ; \ + fi ; \ + fi + -@ echo '' + +# Static and static pattern rules +#-------------------------------- + +.PHONY : build check clean cleaner cleanest distclean install lib realclean \ + run_% test tests uninstall + +build : lib + +lib : $(FLEXMODS) + -@ echo '' + -@ echo 'Building WCSLIB C library...' + @ $(MAKE) --no-print-directory $(WCSLIB) + +$(WCSLIB) : $(LIBLOCK) $(MODULES:%=$(WCSLIB)(%)) + -@ echo '' + @ set *.o ; \ + if [ "$$1" != "*.o" ] ; then \ + echo $(AR) r$(ARFLAGS) $@ *.o ; \ + $(AR) r$(ARFLAGS) $@ *.o ; \ + echo $(RANLIB) $@ ; \ + $(RANLIB) $@ ; \ + $(RM) *.o ; \ + fi + -@ $(RM) $< + @ if [ "$(SHRLIB)" != "" ] ; then \ + $(MAKE) --no-print-directory $(SHRLIB) ; \ + fi + +$(SHRLIB) : $(PICLIB) + -@ echo '' + -@ $(RM) -r tmp + mkdir tmp && \ + cd tmp && \ + trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \ + $(AR) x ../$(PICLIB) && \ + $(SHRLD) -o $@ *.o $(LDFLAGS) $(LIBS) && \ + mv $@ .. + +$(PICLIB) : $(LIBLOCK) $(MODULES:%=$(PICLIB)(%)) + -@ echo '' + @ set *.o ; \ + if [ "$$1" != "*.o" ] ; then \ + echo $(AR) r$(ARFLAGS) $@ *.o ; \ + $(AR) r$(ARFLAGS) $@ *.o ; \ + $(RM) *.o ; \ + fi + -@ $(RM) $< + +$(LIBLOCK) : FORCE + @ $(RM) *.o + @ touch $@ + +install : build + - if [ ! -d "$(LIBDIR)" ] ; then \ + $(INSTALL) -d -m 775 $(LIBDIR) ; \ + fi + if [ "$(ARFLAGS)" = U ] ; then \ + $(RM) -r tmp ; \ + mkdir tmp && \ + cd tmp && \ + trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \ + $(AR) x ../$(WCSLIB) && \ + $(AR) rD $(WCSLIB) *.o && \ + $(INSTALL) -m 644 $(WCSLIB) $(LIBDIR) ; \ + cd .. ; \ + $(RM) -r tmp ; \ + else \ + $(INSTALL) -m 644 $(WCSLIB) $(LIBDIR) ; \ + fi + $(RANLIB) $(LIBDIR)/$(WCSLIB) + - if [ -h "$(LIBDIR)/libwcs.a" ] ; then \ + $(RM) $(LIBDIR)/libwcs.a ; \ + fi + $(LN_S) $(WCSLIB) $(LIBDIR)/libwcs.a + if [ "$(SHRLIB)" != "" ] ; then \ + $(INSTALL) -m 755 $(SHRLIB) $(LIBDIR) ; \ + if [ -h "$(LIBDIR)/$(SONAME)" ] ; then \ + $(RM) $(LIBDIR)/$(SONAME) ; \ + fi ; \ + $(LN_S) $(SHRLIB) $(LIBDIR)/$(SONAME) ; \ + if [ "$(SHRLN)" != "" ] ; then \ + if [ -h "$(LIBDIR)/$(SHRLN)" ] ; then \ + $(RM) $(LIBDIR)/$(SHRLN) ; \ + fi ; \ + $(LN_S) $(SONAME) $(LIBDIR)/$(SHRLN) ; \ + fi ; \ + fi + - if [ ! -d "$(INCDIR)" ] ; then \ + $(INSTALL) -d -m 775 $(INCDIR) ; \ + fi + $(INSTALL) -m 444 *.h $(INCDIR) + - $(RM) $(INCLINK) + $(LN_S) $(notdir $(INCDIR)) $(INCLINK) + +uninstall : + - cd $(LIBDIR) && $(RM) $(WCSLIB) $(SHRLN) $(SONAME) $(SHRLIB) + - $(RM) $(INCDIR) + - $(RM) $(INCLINK) + +clean : + - $(RM) *.o $(LIBLOCK) *.i a.out t*.out core *.dSYM + - $(RM) -r $(EXTRA_CLEAN) + +cleaner : clean + - $(RM) .gdb_history + - $(RM) $(TEST_N) $(TEST_n) $(TEST_T) $(TEST_X) + - $(RM) $(TEST_P) tdis3 tpih2 twcshdr twcslint twcstab + - $(RM) bth.fits fitshdr.fits pih.fits wcslint.fits wcspcx.fits + - $(RM) wcstab.fits SIP.fits SIPTPV.fits TPV3.fits TPV5.fits + - $(RM) TPV7.fits DSS.fits TNX.fits ZPX.fits + - $(RM) t*_cfitsio test_results + +cleanest distclean realclean : cleaner + - $(RM) ../wcsconfig.h ../wcsconfig_tests.h + - $(RM) fitshdr.c wcsbth.c wcspih.c wcsulex.c wcsutrn.c + - $(RM) $(PICLIB) libwcs-*.a libwcs.so.* libwcs.*.dylib + +check test : tests $(TESTS:%=run_%) + +tests : $(TESTS) $(TEST_X) + +# TEST_N and TEST_n programs (no special libraries required). +$(TEST_N) $(TEST_n) : % : test/%.c $(WCSLIB) + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< $(LDFLAGS) $(WCSLIB) $(LIBS) + -@ $(RM) $@.o + +# TEST_N programs (optionally using CFITSIO). +tpih1_cfitsio tbth1_cfitsio tfitshdr_cfitsio : %_cfitsio : test/%.c $(WCSLIB) + -@ echo '' + $(CC) -DDO_CFITSIO $(CPPFLAGS) $(CFITSIOINC) $(CFITSIO_CFLAGS) \ + -o $@ $< $(LDFLAGS) $(CFITSIOLIB) $(WCSLIB) $(LIBS) + -@ $(RM) $@.o + +# TEST_C programs (using CFITSIO). +twcstab : test/twcstab.c $(WCSLIB) $(GETWCSTAB) + -@ echo '' + $(CC) $(CPPFLAGS) $(CFITSIOINC) $(CFITSIO_CFLAGS) -o $@ $< \ + $(GETWCSTAB) $(LDFLAGS) $(CFITSIOLIB) $(WCSLIB) $(LIBS) + -@ $(RM) $@.o $(GETWCSTAB) + +twcshdr : test/twcshdr.c $(WCSLIB) $(GETWCSTAB) + -@ echo '' + $(CC) $(CPPFLAGS) $(CFITSIOINC) $(CFITSIO_CFLAGS) -o $@ $< \ + $(GETWCSTAB) $(LDFLAGS) $(CFITSIOLIB) $(WCSLIB) $(LIBS) + -@ $(RM) $@.o $(GETWCSTAB) + +tdis3 : test/tdis3 + -@ echo '' + cp $< . + -@ chmod a+x $@ + +twcslint : test/twcslint + -@ echo '' + cp $< . + -@ chmod a+x $@ + +# TEST_P programs (using PGPLOT). +$(TEST_P) : % : test/%.c $(WCSLIB) + -@ echo '' + $(CC) $(CPPFLAGS) $(PGPLOTINC) $(CFLAGS) -c -o $@.o $< + $(LD) -o $@ $@.o $(LDFLAGS) $(PGPLOTLIB) $(WCSLIB) $(FLIBS) $(LIBS) + -@ $(RM) $@.o + +# TEST_B programs (PGSBOX and PGPLOT). +tpih2 : test/tpih2.c $(PGSBOXLIB) $(WCSLIB) + -@ echo '' + $(CC) $(CPPFLAGS) -I../pgsbox $(PGPLOTINC) $(CFLAGS) -c -o $@.o $< + $(LD) -o $@ $@.o $(LDFLAGS) $(PGSBOXLIB) $(PGPLOTLIB) $(WCSLIB) \ + $(FLIBS) $(LIBS) + -@ $(RM) $@.o + +tpih2_cfitsio : test/tpih2.c $(PGSBOXLIB) $(WCSLIB) + -@ echo '' + $(CC) -DDO_CFITSIO $(CPPFLAGS) -I../pgsbox $(PGPLOTINC) \ + $(CFITSIOINC) $(CFITSIO_CFLAGS) -c -o $@.o $< + $(LD) -o $@ $@.o $(LDFLAGS) $(PGSBOXLIB) $(PGPLOTLIB) \ + $(CFITSIOLIB) $(WCSLIB) $(FLIBS) $(LIBS) + -@ $(RM) $@.o + +# POSIX threads test programs. +$(TEST_T) : %_pthread : test/%_pthread.c $(WCSLIB) + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) -pthread -c -o $@.o $< + $(LD) -o $@ $@.o $(LDFLAGS) -pthread $(WCSLIB) -lpthread $(LIBS) + -@ $(RM) $@.o + +getwcstab.o : getwcstab.c getwcstab.h + -@ echo '' + $(CC) $(CPPFLAGS) $(CFITSIO_CFLAGS) $(CFITSIOINC) -c $< + +$(PGSBOXLIB) : + -@ echo '' + $(MAKE) -C ../pgsbox $(notdir $@) + +../utils/tofits : ../utils/tofits.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< + +GNUmakefile : ../makedefs ; + +../makedefs ../wcsconfig.h ../wcsconfig_tests.h : makedefs.in wcsconfig.h.in \ + wcsconfig_tests.h.in ../config.status + -@ $(RM) ../wcsconfig.h ../wcsconfig_tests.h + cd .. && ./config.status + +show :: + -@ echo ' FLEXMODS := $(FLEXMODS)' + -@ echo ' MODULES := $(MODULES)' + -@ echo ' DO_CFITSIO := $(DO_CFITSIO)' + -@ echo ' DO_PGPLOT := $(DO_PGPLOT)' + -@ echo ' TESTS := $(TESTS)' + -@ echo ' TEST_X := $(TEST_X)' + +# Dependencies (use the %.d pattern rule to list them) +#----------------------------------------------------- + +$(WCSLIB)(cel.o) : cel.h prj.h sph.h wcsconfig.h wcserr.h wcsmath.h \ + wcsprintf.h wcstrig.h +$(WCSLIB)(dis.o) : dis.h wcserr.h wcsprintf.h wcsutil.h +$(WCSLIB)(fitshdr.o) : fitshdr.h wcsconfig.h wcsutil.h +$(WCSLIB)(lin.o) : dis.h lin.h wcserr.h wcsprintf.h +$(WCSLIB)(log.o) : log.h +$(WCSLIB)(prj.o) : prj.h wcsconfig.h wcserr.h wcsmath.h wcsprintf.h \ + wcstrig.h wcsutil.h +$(WCSLIB)(spc.o) : spc.h spx.h wcsconfig.h wcserr.h wcsmath.h \ + wcsprintf.h wcstrig.h wcsutil.h +$(WCSLIB)(sph.o) : sph.h wcsconfig.h wcstrig.h +$(WCSLIB)(spx.o) : spx.h wcserr.h wcsmath.h +$(WCSLIB)(tab.o) : tab.h wcserr.h wcsmath.h wcsprintf.h wcsutil.h +$(WCSLIB)(wcs.o) : cel.h dis.h lin.h log.h prj.h spc.h sph.h spx.h \ + tab.h wcs.h wcsconfig.h wcserr.h wcsmath.h \ + wcsprintf.h wcstrig.h wcsunits.h wcsutil.h +$(WCSLIB)(wcsbth.o) : cel.h lin.h prj.h spc.h spx.h wcs.h wcshdr.h \ + wcsmath.h wcsprintf.h wcsutil.h +$(WCSLIB)(wcserr.o) : wcserr.h wcsprintf.h +$(WCSLIB)(wcsfix.o) : cel.h lin.h prj.h spc.h sph.h spx.h wcs.h wcserr.h \ + wcsfix.h wcsmath.h wcsunits.h wcsutil.h +$(WCSLIB)(wcshdr.o) : cel.h dis.h lin.h prj.h spc.h spx.h tab.h wcs.h \ + wcserr.h wcshdr.h wcsmath.h wcsutil.h +$(WCSLIB)(wcspih.o) : cel.h dis.h lin.h prj.h spc.h spx.h wcs.h wcshdr.h \ + wcsmath.h wcsprintf.h wcsutil.h +$(WCSLIB)(wcsprintf.o): wcsprintf.h +$(WCSLIB)(wcstrig.o) : wcsconfig.h wcsmath.h wcstrig.h +$(WCSLIB)(wcsulex.o) : wcserr.h wcsmath.h wcsunits.h wcsutil.h +$(WCSLIB)(wcsunits.o) : wcserr.h wcsunits.h +$(WCSLIB)(wcsutil.o) : wcsmath.h wcsutil.h +$(WCSLIB)(wcsutrn.o) : wcserr.h wcsunits.h + +tbth1 tbth1_cfitsio : cel.h lin.h prj.h spc.h spx.h wcs.h wcsconfig.h \ + wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h +tcel1 : cel.h prj.h +tcel2 : cel.h prj.h +tfitshdr tfitshdr_cfitsio : cel.h fitshdr.h lin.h prj.h spc.h spx.h wcs.h \ + wcsconfig.h wcsconfig_tests.h wcshdr.h +tlin : lin.h +tdis1 : cel.h dis.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h \ + wcsprintf.h +tdis2 : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h wcsprintf.h +tdisiter: cel.h dis.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h \ + wcsprintf.h +tlog : log.h +tpih1 tpih1_cfitsio : cel.h lin.h prj.h spc.h spx.h wcs.h wcsconfig.h \ + wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h wcsprintf.h +tpih2 tpih2_cfitsio : cel.h lin.h prj.h spc.h spx.h wcs.h wcsconfig.h \ + wcsconfig_tests.h wcshdr.h +tprj1 : prj.h wcsconfig.h wcstrig.h +tprj2 : prj.h +tspc : spc.h spx.h wcsconfig.h wcstrig.h +tspcaips: spc.h spx.h +tspctrne: spc.h spx.h wcserr.h +tsph : sph.h wcsconfig.h wcstrig.h +tsphdpa : sph.h +tspx : spx.h +ttab1 : tab.h +ttab2 : tab.h +ttab3 : prj.h tab.h +tunits : wcserr.h wcsunits.h +twcs : cel.h dis.h fitshdr.h lin.h log.h prj.h spc.h sph.h spx.h tab.h \ + wcs.h wcsconfig.h wcsconfig_tests.h wcserr.h wcsfix.h wcshdr.h \ + wcslib.h wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h +twcs_locale : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcshdr.h \ + wcsprintf.h +twcsfix : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h wcsfix.h \ + wcsprintf.h wcsunits.h +twcshdr : cel.h dis.h fitshdr.h getwcstab.h lin.h log.h prj.h spc.h sph.h \ + spx.h tab.h wcs.h wcsconfig.h wcserr.h wcsfix.h wcshdr.h wcslib.h \ + wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h +twcsmix : cel.h lin.h prj.h spc.h sph.h spx.h wcs.h +twcssub : cel.h lin.h prj.h spc.h spx.h wcs.h wcserr.h +twcstab : cel.h dis.h fitshdr.h getwcstab.h lin.h log.h prj.h spc.h sph.h \ + spx.h tab.h wcs.h wcsconfig.h wcserr.h wcsfix.h wcshdr.h wcslib.h \ + wcsmath.h wcsprintf.h wcstrig.h wcsunits.h wcsutil.h + +run_tdis1 : TPV3.fits TPV5.fits TPV7.fits +run_tdis2 : SIP.fits +run_tdis3 : DSS.fits SIPTPV.fits TNX.fits ZPX.fits +run_tbth1 run_tbth1_cfitsio : bth.fits +run_tfitshdr run_tfitshdr_cfitsio : fitshdr.fits +run_tpih1 run_tpih1_cfitsio : pih.fits +run_tpih2 run_tpih2_cfitsio : pih.fits +run_twcslint : wcslint.fits +run_twcs_locale : pih.fits diff --git a/deps/wcslib/C/cel.c b/deps/wcslib/C/cel.c new file mode 100644 index 0000000..be0cb19 --- /dev/null +++ b/deps/wcslib/C/cel.c @@ -0,0 +1,575 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: cel.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcstrig.h" +#include "sph.h" +#include "cel.h" + +// Map status return value to message. +const char *cel_errmsg[] = { + "Success", + "Null celprm pointer passed", + "Invalid projection parameters", + "Invalid coordinate transformation parameters", + "Ill-conditioned coordinate transformation parameters", + "One or more of the (x,y) coordinates were invalid", + "One or more of the (lng,lat) coordinates were invalid"}; + +// Map error returns for lower-level routines. +const int cel_prjerr[] = { + CELERR_SUCCESS, // 0: PRJERR_SUCCESS + CELERR_NULL_POINTER, // 1: PRJERR_NULL_POINTER + CELERR_BAD_PARAM, // 2: PRJERR_BAD_PARAM + CELERR_BAD_PIX, // 3: PRJERR_BAD_PIX + CELERR_BAD_WORLD // 4: PRJERR_BAD_WORLD +}; + +static const int CELSET = 137; + +// Convenience macro for invoking wcserr_set(). +#define CEL_ERRMSG(status) WCSERR_SET(status), cel_errmsg[status] + +//---------------------------------------------------------------------------- + +int celini(struct celprm *cel) + +{ + if (cel == 0x0) return CELERR_NULL_POINTER; + + cel->offset = 0; + cel->phi0 = UNDEFINED; + cel->theta0 = UNDEFINED; + cel->ref[0] = 0.0; + cel->ref[1] = 0.0; + cel->ref[2] = UNDEFINED; + cel->ref[3] = +90.0; + + for (int k = 0; k < 5; cel->euler[k++] = 0.0); + cel->latpreq = -1; + cel->isolat = 0; + + cel->err = 0x0; + + cel->flag = 0; + + return cel_prjerr[prjini(&(cel->prj))]; +} + +//---------------------------------------------------------------------------- + +int celfree(struct celprm *cel) + +{ + if (cel == 0x0) return CELERR_NULL_POINTER; + + wcserr_clear(&(cel->err)); + + return cel_prjerr[prjfree(&(cel->prj))]; +} + +//---------------------------------------------------------------------------- + +int celsize(const struct celprm *cel, int sizes[2]) + +{ + if (cel == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct celprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + // celprm::prj. + int exsizes[2]; + prjsize(&(cel->prj), exsizes); + sizes[1] += exsizes[1]; + + // celprm::err. + wcserr_size(cel->err, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + return 0; +} + +//---------------------------------------------------------------------------- + +int celenq(const struct celprm *cel, int enquiry) + +{ + // Initialize. + if (cel == 0x0) return CELERR_NULL_POINTER; + + int answer = 0; + + if (enquiry & CELENQ_SET) { + if (abs(cel->flag) != CELSET) return 0; + answer = 1; + } + + if (enquiry & CELENQ_BYP) { + if (cel->flag != 1 && cel->flag != -CELSET) return 0; + answer = 1; + } + + return answer; +} + +//---------------------------------------------------------------------------- + +int celprt(const struct celprm *cel) + +{ + if (cel == 0x0) return CELERR_NULL_POINTER; + + // Parameters supplied. + wcsprintf(" flag: %d\n", cel->flag); + wcsprintf(" offset: %d\n", cel->offset); + if (undefined(cel->phi0)) { + wcsprintf(" phi0: UNDEFINED\n"); + } else { + wcsprintf(" phi0: %9f\n", cel->phi0); + } + if (undefined(cel->theta0)) { + wcsprintf(" theta0: UNDEFINED\n"); + } else { + wcsprintf(" theta0: %9f\n", cel->theta0); + } + wcsprintf(" ref:"); + for (int i = 0; i < 4; i++) { + wcsprintf(" %#- 11.5g", cel->ref[i]); + } + wcsprintf("\n"); + wcsprintf(" prj: (see below)\n"); + + // Derived values. + wcsprintf(" euler:"); + for (int i = 0; i < 5; i++) { + wcsprintf(" %#- 11.5g", cel->euler[i]); + } + wcsprintf("\n"); + wcsprintf(" latpreq: %d", cel->latpreq); + if (cel->latpreq == 0) { + wcsprintf(" (not required)\n"); + } else if (cel->latpreq == 1) { + wcsprintf(" (disambiguation)\n"); + } else if (cel->latpreq == 2) { + wcsprintf(" (specification)\n"); + } else { + wcsprintf(" (UNDEFINED)\n"); + } + wcsprintf(" isolat: %d\n", cel->isolat); + + // Error handling. + WCSPRINTF_PTR(" err: ", cel->err, "\n"); + if (cel->err) { + wcserr_prt(cel->err, " "); + } + + // Projection parameters (from above). + wcsprintf("\n"); + wcsprintf(" prj.*\n"); + prjprt(&(cel->prj)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int celperr(const struct celprm *cel, const char *prefix) + +{ + if (cel == 0x0) return CELERR_NULL_POINTER; + + if (cel->err && wcserr_prt(cel->err, prefix) == 0) { + wcserr_prt(cel->prj.err, prefix); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int celset(struct celprm *cel) + +{ + static const char *function = "celset"; + + const double tol = 1.0e-10; + + if (cel == 0x0) return CELERR_NULL_POINTER; + if (cel->flag == -CELSET) return 0; + struct wcserr **err = &(cel->err); + + // Initialize the projection driver routines. + struct prjprm *celprj = &(cel->prj); + if (cel->offset) { + celprj->phi0 = cel->phi0; + celprj->theta0 = cel->theta0; + } else { + // Ensure that these are undefined - no fiducial offset. + celprj->phi0 = UNDEFINED; + celprj->theta0 = UNDEFINED; + } + + celprj->flag = 0; + int status; + if ((status = prjset(celprj))) { + return wcserr_set(CEL_ERRMSG(cel_prjerr[status])); + } + + // Defaults set by the projection routines. + if (undefined(cel->phi0)) { + cel->phi0 = celprj->phi0; + } + + if (undefined(cel->theta0)) { + cel->theta0 = celprj->theta0; + + } else if (fabs(cel->theta0) > 90.0) { + if (fabs(cel->theta0) > 90.0 + tol) { + return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), + "Invalid coordinate transformation parameters: theta0 > 90"); + } + + if (cel->theta0 > 90.0) { + cel->theta0 = 90.0; + } else { + cel->theta0 = -90.0; + } + } + + + double lng0 = cel->ref[0]; + double lat0 = cel->ref[1]; + double phip = cel->ref[2]; + double lngp; + double latp = cel->ref[3]; + + // Set default for native longitude of the celestial pole? + if (undefined(phip) || phip == 999.0) { + phip = (lat0 < cel->theta0) ? 180.0 : 0.0; + phip += cel->phi0; + + if (phip < -180.0) { + phip += 360.0; + } else if (phip > 180.0) { + phip -= 360.0; + } + + cel->ref[2] = phip; + } + + + // Compute celestial coordinates of the native pole. + cel->latpreq = 0; + if (cel->theta0 == 90.0) { + // Fiducial point at the native pole. + lngp = lng0; + latp = lat0; + + } else { + // Fiducial point away from the native pole. + double slat0, clat0, sthe0, cthe0; + sincosd(lat0, &slat0, &clat0); + sincosd(cel->theta0, &sthe0, &cthe0); + + double cphip, sphip, u, v; + if (phip == cel->phi0) { + sphip = 0.0; + cphip = 1.0; + + u = cel->theta0; + v = 90.0 - lat0; + + } else { + sincosd(phip - cel->phi0, &sphip, &cphip); + + double x = cthe0*cphip; + double y = sthe0; + double z = sqrt(x*x + y*y); + if (z == 0.0) { + if (slat0 != 0.0) { + return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), + "Invalid coordinate description:\n" + "lat0 == 0 is required for |phip - phi0| = 90 and theta0 == 0"); + } + + // latp determined solely by LATPOLEa in this case. + cel->latpreq = 2; + if (latp > 90.0) { + latp = 90.0; + } else if (latp < -90.0) { + latp = -90.0; + } + + // Avert a spurious compiler warning. + u = v = 0.0; + + } else { + double slz = slat0/z; + if (fabs(slz) > 1.0) { + if ((fabs(slz) - 1.0) < tol) { + if (slz > 0.0) { + slz = 1.0; + } else { + slz = -1.0; + } + } else { + return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), + "Invalid coordinate description:\n|lat0| <= %.3f is required " + "for these values of phip, phi0, and theta0", asind(z)); + } + } + + u = atan2d(y,x); + v = acosd(slz); + } + } + + if (cel->latpreq == 0) { + double latp1 = u + v; + if (latp1 > 180.0) { + latp1 -= 360.0; + } else if (latp1 < -180.0) { + latp1 += 360.0; + } + + double latp2 = u - v; + if (latp2 > 180.0) { + latp2 -= 360.0; + } else if (latp2 < -180.0) { + latp2 += 360.0; + } + + if (fabs(latp1) < 90.0+tol && + fabs(latp2) < 90.0+tol) { + // There are two valid solutions for latp. + cel->latpreq = 1; + } + + if (fabs(latp-latp1) < fabs(latp-latp2)) { + if (fabs(latp1) < 90.0+tol) { + latp = latp1; + } else { + latp = latp2; + } + } else { + if (fabs(latp2) < 90.0+tol) { + latp = latp2; + } else { + latp = latp1; + } + } + + // Account for rounding error. + if (fabs(latp) < 90.0+tol) { + if (latp > 90.0) { + latp = 90.0; + } else if (latp < -90.0) { + latp = -90.0; + } + } + } + + double z = cosd(latp)*clat0; + if (fabs(z) < tol) { + if (fabs(clat0) < tol) { + // Celestial pole at the fiducial point. + lngp = lng0; + + } else if (latp > 0.0) { + // Celestial north pole at the native pole. + lngp = lng0 + phip - cel->phi0 - 180.0; + + } else { + // Celestial south pole at the native pole. + lngp = lng0 - phip + cel->phi0; + } + + } else { + double x = (sthe0 - sind(latp)*slat0)/z; + double y = sphip*cthe0/clat0; + if (x == 0.0 && y == 0.0) { + // Sanity check (shouldn't be possible). + return wcserr_set(WCSERR_SET(CELERR_BAD_COORD_TRANS), + "Invalid coordinate transformation parameters, internal error"); + } + lngp = lng0 - atan2d(y,x); + } + + // Make celestial longitude of the native pole the same sign as at the + // fiducial point. + if (lng0 >= 0.0) { + if (lngp < 0.0) { + lngp += 360.0; + } else if (lngp > 360.0) { + lngp -= 360.0; + } + } else { + if (lngp > 0.0) { + lngp -= 360.0; + } else if (lngp < -360.0) { + lngp += 360.0; + } + } + } + + // Reset LATPOLEa. + cel->ref[3] = latp; + + // Set the Euler angles. + cel->euler[0] = lngp; + cel->euler[1] = 90.0 - latp; + cel->euler[2] = phip; + sincosd(cel->euler[1], &cel->euler[4], &cel->euler[3]); + cel->isolat = (cel->euler[4] == 0.0); + + // Check for ill-conditioned parameters. + if (fabs(latp) > 90.0+tol) { + return wcserr_set(WCSERR_SET(CELERR_ILL_COORD_TRANS), + "Ill-conditioned coordinate transformation parameters\nNo valid " + "solution for latp for these values of phip, phi0, and theta0"); + } + + cel->flag = (cel->flag == 1) ? -CELSET : CELSET; + + return 0; +} + +//---------------------------------------------------------------------------- + +int celx2s( + struct celprm *cel, + int nx, + int ny, + int sxy, + int sll, + const double x[], + const double y[], + double phi[], + double theta[], + double lng[], + double lat[], + int stat[]) + +{ + static const char *function = "celx2s"; + + // Initialize. + if (cel == 0x0) return CELERR_NULL_POINTER; + struct wcserr **err = &(cel->err); + + int status = 0; + if (abs(cel->flag) != CELSET) { + if ((status = celset(cel))) return status; + } + + // Apply spherical deprojection. + int istat; + struct prjprm *celprj = &(cel->prj); + if ((istat = celprj->prjx2s(celprj, nx, ny, sxy, 1, x, y, phi, theta, + stat))) { + if (istat) { + status = wcserr_set(CEL_ERRMSG(cel_prjerr[istat])); + if (status != CELERR_BAD_PIX) { + return status; + } + } + } + + int nphi = (ny > 0) ? (nx*ny) : nx; + + // Compute celestial coordinates. + sphx2s(cel->euler, nphi, 0, 1, sll, phi, theta, lng, lat); + + return status; +} + +//---------------------------------------------------------------------------- + +int cels2x( + struct celprm *cel, + int nlng, + int nlat, + int sll, + int sxy, + const double lng[], + const double lat[], + double phi[], + double theta[], + double x[], + double y[], + int stat[]) + +{ + static const char *function = "cels2x"; + + // Initialize. + if (cel == 0x0) return CELERR_NULL_POINTER; + struct wcserr **err = &(cel->err); + + int status = 0; + if (abs(cel->flag) != CELSET) { + if ((status = celset(cel))) return status; + } + + // Compute native coordinates. + sphs2x(cel->euler, nlng, nlat, sll, 1, lng, lat, phi, theta); + + int nphi, ntheta; + if (cel->isolat) { + // Constant celestial latitude -> constant native latitude. + nphi = nlng; + ntheta = nlat; + } else { + nphi = (nlat > 0) ? (nlng*nlat) : nlng; + ntheta = 0; + } + + // Apply the spherical projection. + int istat; + struct prjprm *celprj = &(cel->prj); + if ((istat = celprj->prjs2x(celprj, nphi, ntheta, 1, sxy, phi, theta, x, y, + stat))) { + if (istat) { + status = wcserr_set(CEL_ERRMSG(cel_prjerr[istat])); + if (status != CELERR_BAD_WORLD) { + return status; + } + } + } + + return status; +} diff --git a/deps/wcslib/C/cel.h b/deps/wcslib/C/cel.h new file mode 100644 index 0000000..205c59e --- /dev/null +++ b/deps/wcslib/C/cel.h @@ -0,0 +1,527 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: cel.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the cel routines +* --------------------------- +* Routines in this suite implement the part of the FITS World Coordinate +* System (WCS) standard that deals with celestial coordinates, as described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of celestial coordinates in FITS", += Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (WCS Paper II) +* +* These routines define methods to be used for computing celestial world +* coordinates from intermediate world coordinates (a linear transformation +* of image pixel coordinates), and vice versa. They are based on the celprm +* struct which contains all information needed for the computations. This +* struct contains some elements that must be set by the user, and others that +* are maintained by these routines, somewhat like a C++ class but with no +* encapsulation. +* +* Routine celini() is provided to initialize the celprm struct with default +* values, celfree() reclaims any memory that may have been allocated to store +* an error message, celsize() computes its total size including allocated +* memory, celenq() returns information about the state of the struct, and +* celprt() prints its contents. +* +* celperr() prints the error message(s), if any, stored in a celprm struct and +* the prjprm struct that it contains. +* +* A setup routine, celset(), computes intermediate values in the celprm struct +* from parameters in it that were supplied by the user. The struct always +* needs to be set up by celset() but it need not be called explicitly - refer +* to the explanation of celprm::flag. +* +* celx2s() and cels2x() implement the WCS celestial coordinate +* transformations. In fact, they are high level driver routines for the lower +* level spherical coordinate rotation and projection routines described in +* sph.h and prj.h. +* +* +* celini() - Default constructor for the celprm struct +* ---------------------------------------------------- +* celini() sets all members of a celprm struct to default values. It should +* be used to initialize every celprm struct. +* +* PLEASE NOTE: If the celprm struct has already been initialized, then before +* reinitializing, it celfree() should be used to free any memory that may have +* been allocated to store an error message. A memory leak may otherwise +* result. +* +* Returned: +* cel struct celprm* +* Celestial transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null celprm pointer passed. +* +* +* celfree() - Destructor for the celprm struct +* -------------------------------------------- +* celfree() frees any memory that may have been allocated to store an error +* message in the celprm struct. +* +* Given: +* cel struct celprm* +* Celestial transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null celprm pointer passed. +* +* +* celsize() - Compute the size of a celprm struct +* ----------------------------------------------- +* celsize() computes the full size of a celprm struct, including allocated +* memory. +* +* Given: +* cel const struct celprm* +* Celestial transformation parameters. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct celprm). The second element +* is the total allocated size, in bytes. This figure +* includes memory allocated for the constituent struct, +* celprm::err. +* +* It is not an error for the struct not to have been set +* up via celset(). +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* celenq() - enquire about the state of a celprm struct +* ----------------------------------------------------- +* celenq() may be used to obtain information about the state of a celprm +* struct. The function returns a true/false answer for the enquiry asked. +* +* Given: +* cel const struct celprm* +* Celestial transformation parameters. +* +* enquiry int Enquiry according to the following parameters: +* CELENQ_SET: the struct has been set up by celset(). +* CELENQ_BYP: the struct is in bypass mode (see +* celset()). +* +* Function return value: +* int Enquiry result: +* 0: No. +* 1: Yes. +* +* +* celprt() - Print routine for the celprm struct +* ---------------------------------------------- +* celprt() prints the contents of a celprm struct using wcsprintf(). Mainly +* intended for diagnostic purposes. +* +* Given: +* cel const struct celprm* +* Celestial transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null celprm pointer passed. +* +* +* celperr() - Print error messages from a celprm struct +* ----------------------------------------------------- +* celperr() prints the error message(s), if any, stored in a celprm struct and +* the prjprm struct that it contains. If there are no errors then nothing is +* printed. It uses wcserr_prt(), q.v. +* +* Given: +* cel const struct celprm* +* Coordinate transformation parameters. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null celprm pointer passed. +* +* +* celset() - Setup routine for the celprm struct +* ---------------------------------------------- +* celset() sets up a celprm struct according to information supplied within +* it. +* +* Note that this routine need not be called directly; it will be invoked by +* celx2s() and cels2x() if celprm::flag is anything other than a predefined +* magic value. + +* celset() normally operates regardless of the value of celprm::flag; i.e. +* even if a struct was previously set up it will be reset unconditionally. +* However, a celprm struct may be put into "bypass" mode by invoking celset() +* initially with celprm::flag == 1 (rather than 0). celset() will return +* immediately if invoked on a struct in that state. To take a struct out of +* bypass mode, simply reset celprm::flag to zero. See also celenq(). +* +* Given and returned: +* cel struct celprm* +* Celestial transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null celprm pointer passed. +* 2: Invalid projection parameters. +* 3: Invalid coordinate transformation parameters. +* 4: Ill-conditioned coordinate transformation +* parameters. +* +* For returns > 1, a detailed error message is set in +* celprm::err if enabled, see wcserr_enable(). +* +* +* celx2s() - Pixel-to-world celestial transformation +* -------------------------------------------------- +* celx2s() transforms (x,y) coordinates in the plane of projection to +* celestial coordinates (lng,lat). +* +* Given and returned: +* cel struct celprm* +* Celestial transformation parameters. +* +* Given: +* nx,ny int Vector lengths. +* +* sxy,sll int Vector strides. +* +* x,y const double[] +* Projected coordinates in pseudo "degrees". +* +* Returned: +* phi,theta double[] Longitude and latitude (phi,theta) in the native +* coordinate system of the projection [deg]. +* +* lng,lat double[] Celestial longitude and latitude (lng,lat) of the +* projected point [deg]. +* +* stat int[] Status return value for each vector element: +* 0: Success. +* 1: Invalid value of (x,y). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null celprm pointer passed. +* 2: Invalid projection parameters. +* 3: Invalid coordinate transformation parameters. +* 4: Ill-conditioned coordinate transformation +* parameters. +* 5: One or more of the (x,y) coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* celprm::err if enabled, see wcserr_enable(). +* +* +* cels2x() - World-to-pixel celestial transformation +* -------------------------------------------------- +* cels2x() transforms celestial coordinates (lng,lat) to (x,y) coordinates in +* the plane of projection. +* +* Given and returned: +* cel struct celprm* +* Celestial transformation parameters. +* +* Given: +* nlng,nlat int Vector lengths. +* +* sll,sxy int Vector strides. +* +* lng,lat const double[] +* Celestial longitude and latitude (lng,lat) of the +* projected point [deg]. +* +* Returned: +* phi,theta double[] Longitude and latitude (phi,theta) in the native +* coordinate system of the projection [deg]. +* +* x,y double[] Projected coordinates in pseudo "degrees". +* +* stat int[] Status return value for each vector element: +* 0: Success. +* 1: Invalid value of (lng,lat). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null celprm pointer passed. +* 2: Invalid projection parameters. +* 3: Invalid coordinate transformation parameters. +* 4: Ill-conditioned coordinate transformation +* parameters. +* 6: One or more of the (lng,lat) coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* celprm::err if enabled, see wcserr_enable(). +* +* +* celprm struct - Celestial transformation parameters +* --------------------------------------------------- +* The celprm struct contains information required to transform celestial +* coordinates. It consists of certain members that must be set by the user +* ("given") and others that are set by the WCSLIB routines ("returned"). Some +* of the latter are supplied for informational purposes and others are for +* internal use only. +* +* Returned celprm struct members must not be modified by the user. +* +* int flag +* (Given and returned) This flag must be set to zero (or 1, see celset()) +* whenever any of the following celprm struct members are set or changed: +* +* - celprm::offset, +* - celprm::phi0, +* - celprm::theta0, +* - celprm::ref[4], +* - celprm::prj: +* - prjprm::code, +* - prjprm::r0, +* - prjprm::pv[], +* - prjprm::phi0, +* - prjprm::theta0. +* +* This signals the initialization routine, celset(), to recompute the +* returned members of the celprm struct. celset() will reset flag to +* indicate that this has been done. +* +* int offset +* (Given) If true (non-zero), an offset will be applied to (x,y) to +* force (x,y) = (0,0) at the fiducial point, (phi_0,theta_0). +* Default is 0 (false). +* +* double phi0 +* (Given) The native longitude, phi_0 [deg], and ... +* +* double theta0 +* (Given) ... the native latitude, theta_0 [deg], of the fiducial point, +* i.e. the point whose celestial coordinates are given in +* celprm::ref[1:2]. If undefined (set to a magic value by prjini()) the +* initialization routine, celset(), will set this to a projection-specific +* default. +* +* double ref[4] +* (Given) The first pair of values should be set to the celestial +* longitude and latitude of the fiducial point [deg] - typically right +* ascension and declination. These are given by the CRVALia keywords in +* FITS. +* +* (Given and returned) The second pair of values are the native longitude, +* phi_p [deg], and latitude, theta_p [deg], of the celestial pole (the +* latter is the same as the celestial latitude of the native pole, +* delta_p) and these are given by the FITS keywords LONPOLEa and LATPOLEa +* (or by PVi_2a and PVi_3a attached to the longitude axis which take +* precedence if defined). +* +* LONPOLEa defaults to phi_0 (see above) if the celestial latitude of the +* fiducial point of the projection is greater than or equal to the native +* latitude, otherwise phi_0 + 180 [deg]. (This is the condition for the +* celestial latitude to increase in the same direction as the native +* latitude at the fiducial point.) ref[2] may be set to UNDEFINED (from +* wcsmath.h) or 999.0 to indicate that the correct default should be +* substituted. +* +* theta_p, the native latitude of the celestial pole (or equally the +* celestial latitude of the native pole, delta_p) is often determined +* uniquely by CRVALia and LONPOLEa in which case LATPOLEa is ignored. +* However, in some circumstances there are two valid solutions for theta_p +* and LATPOLEa is used to choose between them. LATPOLEa is set in ref[3] +* and the solution closest to this value is used to reset ref[3]. It is +* therefore legitimate, for example, to set ref[3] to +90.0 to choose the +* more northerly solution - the default if the LATPOLEa keyword is omitted +* from the FITS header. For the special case where the fiducial point of +* the projection is at native latitude zero, its celestial latitude is +* zero, and LONPOLEa = +/- 90.0 then the celestial latitude of the native +* pole is not determined by the first three reference values and LATPOLEa +* specifies it completely. +* +* The returned value, celprm::latpreq, specifies how LATPOLEa was actually +* used. +* +* struct prjprm prj +* (Given and returned) Projection parameters described in the prologue to +* prj.h. +* +* double euler[5] +* (Returned) Euler angles and associated intermediaries derived from the +* coordinate reference values. The first three values are the Z-, X-, and +* Z'-Euler angles [deg], and the remaining two are the cosine and sine of +* the X-Euler angle. +* +* int latpreq +* (Returned) For informational purposes, this indicates how the LATPOLEa +* keyword was used +* - 0: Not required, theta_p (== delta_p) was determined uniquely by the +* CRVALia and LONPOLEa keywords. +* - 1: Required to select between two valid solutions of theta_p. +* - 2: theta_p was specified solely by LATPOLEa. +* +* int isolat +* (Returned) True if the spherical rotation preserves the magnitude of the +* latitude, which occurs iff the axes of the native and celestial +* coordinates are coincident. It signals an opportunity to cache +* intermediate calculations common to all elements in a vector +* computation. +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* void *padding +* (An unused variable inserted for alignment purposes only.) +* +* +* Global variable: const char *cel_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Status messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_CEL +#define WCSLIB_CEL + +#include "prj.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum celenq_enum { + CELENQ_SET = 2, // celprm struct has been set up. + CELENQ_BYP = 4, // celprm struct is in bypass mode. +}; + +extern const char *cel_errmsg[]; + +enum cel_errmsg_enum { + CELERR_SUCCESS = 0, // Success. + CELERR_NULL_POINTER = 1, // Null celprm pointer passed. + CELERR_BAD_PARAM = 2, // Invalid projection parameters. + CELERR_BAD_COORD_TRANS = 3, // Invalid coordinate transformation + // parameters. + CELERR_ILL_COORD_TRANS = 4, // Ill-conditioned coordinated transformation + // parameters. + CELERR_BAD_PIX = 5, // One or more of the (x,y) coordinates were + // invalid. + CELERR_BAD_WORLD = 6 // One or more of the (lng,lat) coordinates + // were invalid. +}; + +struct celprm { + // Initialization flag (see the prologue above). + //-------------------------------------------------------------------------- + int flag; // Set to zero to force initialization. + + // Parameters to be provided (see the prologue above). + //-------------------------------------------------------------------------- + int offset; // Force (x,y) = (0,0) at (phi_0,theta_0). + double phi0, theta0; // Native coordinates of fiducial point. + double ref[4]; // Celestial coordinates of fiducial + // point and native coordinates of + // celestial pole. + + struct prjprm prj; // Projection parameters (see prj.h). + + // Information derived from the parameters supplied. + //-------------------------------------------------------------------------- + double euler[5]; // Euler angles and functions thereof. + int latpreq; // LATPOLEa requirement. + int isolat; // True if |latitude| is preserved. + + // Error messaging, if enabled. + //-------------------------------------------------------------------------- + struct wcserr *err; // Error handling, if enabled. + + //-------------------------------------------------------------------------- + // Private - the remainder are for internal use. + //-------------------------------------------------------------------------- + void *padding; // (Dummy inserted for alignment purposes.) +}; + +// Size of the celprm struct in int units, used by the Fortran wrappers. +#define CELLEN (sizeof(struct celprm)/sizeof(int)) + + +int celini(struct celprm *cel); + +int celfree(struct celprm *cel); + +int celsize(const struct celprm *cel, int sizes[2]); + +int celenq(const struct celprm *cel, int enquiry); + +int celprt(const struct celprm *cel); + +int celperr(const struct celprm *cel, const char *prefix); + +int celset(struct celprm *cel); + +int celx2s(struct celprm *cel, int nx, int ny, int sxy, int sll, + const double x[], const double y[], + double phi[], double theta[], double lng[], double lat[], + int stat[]); + +int cels2x(struct celprm *cel, int nlng, int nlat, int sll, int sxy, + const double lng[], const double lat[], + double phi[], double theta[], double x[], double y[], + int stat[]); + + +// Deprecated. +#define celini_errmsg cel_errmsg +#define celprt_errmsg cel_errmsg +#define celset_errmsg cel_errmsg +#define celx2s_errmsg cel_errmsg +#define cels2x_errmsg cel_errmsg + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_CEL diff --git a/deps/wcslib/C/dis.c b/deps/wcslib/C/dis.c new file mode 100644 index 0000000..43d197e --- /dev/null +++ b/deps/wcslib/C/dis.c @@ -0,0 +1,3725 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: dis.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsprintf.h" +#include "wcsutil.h" +#include "dis.h" + +// Maximum number of DPja or DQia keywords. +int NDPMAX = 256; + +// Map status return value to message. +const char *dis_errmsg[] = { + "Success", + "Null disprm pointer passed", + "Memory allocation failed", + "Invalid parameter value", + "Distort error", + "De-distort error"}; + +static const int DISSET = 137; + +static const int DIS_TPD = 1; +static const int DIS_POLYNOMIAL = 2; +static const int DIS_DOTPD = 1024; + +// Internal helper functions, not for general use. +static int polyset(int j, struct disprm *dis); +static int tpdset(int j, struct disprm *dis); + +static int pol2tpd(int j, struct disprm *dis); +static int tpvset(int j, struct disprm *dis); +static int sipset(int j, struct disprm *dis); +static int dssset(int j, struct disprm *dis); +static int watset(int j, struct disprm *dis); +static int cheleg(int type, int m, int n, double coeffm[], double coeffn[]); + +static int dispoly(DISP2X_ARGS); +static int tpd1(DISP2X_ARGS); +static int tpd2(DISP2X_ARGS); +static int tpd3(DISP2X_ARGS); +static int tpd4(DISP2X_ARGS); +static int tpd5(DISP2X_ARGS); +static int tpd6(DISP2X_ARGS); +static int tpd7(DISP2X_ARGS); +static int tpd8(DISP2X_ARGS); +static int tpd9(DISP2X_ARGS); + +// The first three iparm indices have meanings common to all distortion +// functions. They are used by disp2x(), disx2p(), disprt(), and dishdo(). +#define I_DTYPE 0 // Distortion type code. +#define I_NIPARM 1 // Full (allocated) length of iparm[]. +#define I_NDPARM 2 // No. of parameters in dparm[], excl. work space. + +// Convenience macro for invoking wcserr_set(). +#define DIS_ERRMSG(status) WCSERR_SET(status), dis_errmsg[status] + +//---------------------------------------------------------------------------- + +int disndp(int ndpmax) { if (ndpmax >= 0) NDPMAX = ndpmax; return NDPMAX; } + +//---------------------------------------------------------------------------- + +int dpfill( + struct dpkey *dp, + const char *keyword, + const char *field, + int j, + int type, + int i, + double f) + +{ + if (keyword) { + if (field) { + if (j && 2 <= strlen(keyword)) { + // Fill in the axis number from the value given. + if (keyword[2] == '\0') { + sprintf(dp->field, "%s%d.%s", keyword, j, field); + } else { + // Take care not to overwrite any alternate code. + char axno[8]; + sprintf(dp->field, "%s.%s", keyword, field); + sprintf(axno, "%d", j); + dp->field[2] = axno[0]; + } + + } else { + sprintf(dp->field, "%s.%s", keyword, field); + } + } else { + strcpy(dp->field, keyword); + } + } else if (field) { + strcpy(dp->field, field); + } + + if (j) { + dp->j = j; + } else { + // The field name must either be given or preset. + char *cp; + if ((cp = strpbrk(dp->field, "0123456789")) != 0x0) { + sscanf(cp, "%d.", &(dp->j)); + } + } + + if ((dp->type = type)) { + dp->value.f = f; + } else { + dp->value.i = i; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int dpkeyi(const struct dpkey *dp) + +{ + if (dp->type != 0) { + return (int)dp->value.f; + } + + return dp->value.i; +} + +//---------------------------------------------------------------------------- + +double dpkeyd(const struct dpkey *dp) + +{ + if (dp->type == 0) { + return (double)dp->value.i; + } + + return dp->value.f; +} + +//---------------------------------------------------------------------------- + +int disini(int alloc, int naxis, struct disprm *dis) + +{ + return disinit(alloc, naxis, dis, -1); +} + +//---------------------------------------------------------------------------- + +int disinit(int alloc, int naxis, struct disprm *dis, int ndpmax) + +{ + static const char *function = "disinit"; + + // Check inputs. + if (dis == 0x0) return DISERR_NULL_POINTER; + + if (ndpmax < 0) ndpmax = disndp(-1); + + + // Initialize error message handling. + if (dis->flag == -1) { + dis->err = 0x0; + } + struct wcserr **err = &(dis->err); + wcserr_clear(err); + + + // Initialize pointers. + if (dis->flag == -1 || dis->m_flag != DISSET) { + if (dis->flag == -1) { + dis->docorr = 0x0; + dis->Nhat = 0x0; + + dis->axmap = 0x0; + dis->offset = 0x0; + dis->scale = 0x0; + dis->iparm = 0x0; + dis->dparm = 0x0; + + dis->disp2x = 0x0; + dis->disx2p = 0x0; + + dis->i_naxis = 0; + } + + // Initialize memory management. + dis->m_flag = 0; + dis->m_naxis = 0; + dis->m_dtype = 0x0; + dis->m_dp = 0x0; + dis->m_maxdis = 0x0; + } + + if (naxis < 0) { + return wcserr_set(WCSERR_SET(DISERR_MEMORY), + "naxis must not be negative (got %d)", naxis); + } + + + // Allocate memory for arrays if required. + if (alloc || + dis->dtype == 0x0 || + (ndpmax && dis->dp == 0x0) || + dis->maxdis == 0x0) { + + // Was sufficient allocated previously? + if (dis->m_flag == DISSET && + (dis->m_naxis < naxis || + dis->ndpmax < ndpmax)) { + // No, free it. + disfree(dis); + } + + if (alloc || dis->dtype == 0x0) { + if (dis->m_dtype) { + // In case the caller fiddled with it. + dis->dtype = dis->m_dtype; + + } else { + if ((dis->dtype = calloc(naxis, sizeof(char [72]))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + dis->m_flag = DISSET; + dis->m_naxis = naxis; + dis->m_dtype = dis->dtype; + } + } + + if (alloc || dis->dp == 0x0) { + if (dis->m_dp) { + // In case the caller fiddled with it. + dis->dp = dis->m_dp; + + } else { + if (ndpmax) { + if ((dis->dp = calloc(ndpmax, sizeof(struct dpkey))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + } else { + dis->dp = 0x0; + } + + dis->ndpmax = ndpmax; + + dis->m_flag = DISSET; + dis->m_naxis = naxis; + dis->m_dp = dis->dp; + } + } + + if (alloc || dis->maxdis == 0x0) { + if (dis->m_maxdis) { + // In case the caller fiddled with it. + dis->maxdis = dis->m_maxdis; + + } else { + if ((dis->maxdis = calloc(naxis, sizeof(double))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + dis->m_flag = DISSET; + dis->m_naxis = naxis; + dis->m_maxdis = dis->maxdis; + } + } + } + + + // Set defaults. + dis->naxis = naxis; + + if (naxis) { + memset(dis->dtype, 0, naxis*sizeof(char [72])); + } + + dis->ndp = 0; + if (ndpmax) { + memset(dis->dp, 0, ndpmax*sizeof(struct dpkey)); + } + + dis->totdis = 0.0; + if (naxis) { + memset(dis->maxdis, 0, naxis*sizeof(double)); + } + + dis->flag = 0; + + return 0; +} + + +//---------------------------------------------------------------------------- + +int discpy(int alloc, const struct disprm *dissrc, struct disprm *disdst) + +{ + static const char *function = "discpy"; + + if (dissrc == 0x0) return DISERR_NULL_POINTER; + if (disdst == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(disdst->err); + + int naxis = dissrc->naxis; + if (naxis < 1) { + return wcserr_set(WCSERR_SET(DISERR_MEMORY), + "naxis must be positive (got %d)", naxis); + } + + int status; + if ((status = disinit(alloc, naxis, disdst, dissrc->ndpmax))) { + return status; + } + + memcpy(disdst->dtype, dissrc->dtype, naxis*sizeof(char [72])); + + disdst->ndp = dissrc->ndp; + memcpy(disdst->dp, dissrc->dp, dissrc->ndpmax*sizeof(struct dpkey)); + + disdst->totdis = dissrc->totdis; + memcpy(disdst->maxdis, dissrc->maxdis, naxis*sizeof(double)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int disfree(struct disprm *dis) + +{ + if (dis == 0x0) return DISERR_NULL_POINTER; + + if (dis->flag != -1) { + // Optionally allocated by disinit() for given parameters. + if (dis->m_flag == DISSET) { + if (dis->dtype == dis->m_dtype) dis->dtype = 0x0; + if (dis->dp == dis->m_dp) dis->dp = 0x0; + if (dis->maxdis == dis->m_maxdis) dis->maxdis = 0x0; + + if (dis->m_dtype) free(dis->m_dtype); + if (dis->m_dp) free(dis->m_dp); + if (dis->m_maxdis) free(dis->m_maxdis); + } + + // The remainder were allocated by disset(). + if (dis->docorr) free(dis->docorr); + if (dis->Nhat) free(dis->Nhat); + + // Recall that axmap, offset, and scale were allocated in bulk. + if (dis->axmap && dis->axmap[0]) free(dis->axmap[0]); + if (dis->offset && dis->offset[0]) free(dis->offset[0]); + if (dis->scale && dis->scale[0]) free(dis->scale[0]); + + if (dis->axmap) free(dis->axmap); + if (dis->offset) free(dis->offset); + if (dis->scale) free(dis->scale); + + if (dis->iparm) { + for (int j = 0; j < dis->i_naxis; j++) { + if (dis->iparm[j]) free(dis->iparm[j]); + } + free(dis->iparm); + } + + if (dis->dparm) { + for (int j = 0; j < dis->i_naxis; j++) { + if (dis->dparm[j]) free(dis->dparm[j]); + } + free(dis->dparm); + } + + if (dis->disp2x) free(dis->disp2x); + if (dis->disx2p) free(dis->disx2p); + } + + dis->m_flag = 0; + dis->m_naxis = 0; + dis->m_dtype = 0x0; + dis->m_dp = 0x0; + dis->m_maxdis = 0x0; + + dis->docorr = 0x0; + dis->Nhat = 0x0; + dis->axmap = 0x0; + dis->offset = 0x0; + dis->scale = 0x0; + dis->iparm = 0x0; + dis->dparm = 0x0; + dis->disp2x = 0x0; + dis->disx2p = 0x0; + + wcserr_clear(&(dis->err)); + + dis->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int dissize(const struct disprm *dis, int sizes[2]) + +{ + if (dis == 0x0) { + sizes[0] = sizes[1] = 0; + return DISERR_NULL_POINTER; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct disprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + int naxis = dis->naxis; + + // disprm::dtype[]. + sizes[1] += naxis * sizeof(char [72]); + + // disprm::dp[]. + sizes[1] += dis->ndpmax * sizeof(struct dpkey); + + // disprm::maxdis[]. + sizes[1] += naxis * sizeof(double); + + // dis::err[]. + int exsizes[2]; + wcserr_size(dis->err, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + // The remaining arrays are allocated by disset(). + if (abs(dis->flag) != DISSET) { + return 0; + } + + // dis::docorr[]. + sizes[1] += naxis * sizeof(int *); + + // dis::Nhat[]. + sizes[1] += naxis * sizeof(int *); + + // dis::axmap[][]. + sizes[1] += naxis * sizeof(int *); + sizes[1] += naxis*naxis * sizeof(int); + + // dis::offset[][]. + sizes[1] += naxis * sizeof(double *); + sizes[1] += naxis*naxis * sizeof(double); + + // dis::scale[][]. + sizes[1] += naxis * sizeof(double *); + sizes[1] += naxis*naxis * sizeof(double); + + // dis::iparm[][]. + sizes[1] += naxis * sizeof(int *); + for (int j = 0; j < naxis; j++) { + if (dis->iparm[j]) { + sizes[1] += dis->iparm[j][I_NIPARM] * sizeof(int); + } + } + + // dis::dparm[][]. + sizes[1] += naxis * sizeof(double *); + for (int j = 0; j < naxis; j++) { + if (dis->dparm[j]) { + sizes[1] += dis->dparm[j][I_NDPARM] * sizeof(double); + } + } + + // dis::disp2x[]. + sizes[1] += naxis * sizeof(int (*)(DISP2X_ARGS)); + + // dis::disx2p[]. + sizes[1] += naxis * sizeof(int (*)(DISX2P_ARGS)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int disenq(const struct disprm *dis, int enquiry) + +{ + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + + int answer = 0; + + if (enquiry & DISENQ_MEM) { + if (dis->m_flag != DISSET) return 0; + answer = 1; + } + + if (enquiry & DISENQ_SET) { + if (abs(dis->flag) != DISSET) return 0; + answer = 1; + } + + if (enquiry & DISENQ_BYP) { + if (dis->flag != 1 && dis->flag != -DISSET) return 0; + answer = 1; + } + + return answer; +} + +//---------------------------------------------------------------------------- + +int disprt(const struct disprm *dis) + +{ + if (dis == 0x0) return DISERR_NULL_POINTER; + + if (abs(dis->flag) != DISSET) { + wcsprintf("The disprm struct is UNINITIALIZED.\n"); + return 0; + } + + int naxis = dis->naxis; + + + // Parameters supplied. + wcsprintf(" flag: %d\n", dis->flag); + wcsprintf(" naxis: %d\n", naxis); + + WCSPRINTF_PTR(" dtype: ", dis->dtype, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf(" \"%s\"\n", dis->dtype[j]); + } + + wcsprintf(" ndp: %d\n", dis->ndp); + wcsprintf(" ndpmax: %d\n", dis->ndpmax); + WCSPRINTF_PTR(" dp: ", dis->dp, "\n"); + for (int i = 0; i < dis->ndp; i++) { + if (dis->dp[i].type) { + wcsprintf(" %3d%3d %#- 11.5g %.32s\n", + dis->dp[i].j, dis->dp[i].type, dis->dp[i].value.f, dis->dp[i].field); + } else { + wcsprintf(" %3d%3d %11d %.32s\n", + dis->dp[i].j, dis->dp[i].type, dis->dp[i].value.i, dis->dp[i].field); + } + } + + wcsprintf(" totdis: %#- 11.5g\n", dis->totdis); + + WCSPRINTF_PTR(" maxdis: ", dis->maxdis, "\n"); + wcsprintf(" "); + for (int j = 0; j < naxis; j++) { + wcsprintf(" %#- 11.5g", dis->maxdis[j]); + } + wcsprintf("\n"); + + // Derived values. + WCSPRINTF_PTR(" docorr: ", dis->docorr, "\n"); + wcsprintf(" "); + for (int j = 0; j < naxis; j++) { + wcsprintf("%6d", dis->docorr[j]); + } + wcsprintf("\n"); + + WCSPRINTF_PTR(" Nhat: ", dis->Nhat, "\n"); + wcsprintf(" "); + for (int j = 0; j < naxis; j++) { + wcsprintf("%6d", dis->Nhat[j]); + } + wcsprintf("\n"); + + WCSPRINTF_PTR(" axmap: ", dis->axmap, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf(" axmap[%d][]:", j); + for (int jhat = 0; jhat < naxis; jhat++) { + wcsprintf("%6d", dis->axmap[j][jhat]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" offset: ", dis->offset, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf("offset[%d][]:", j); + for (int jhat = 0; jhat < naxis; jhat++) { + wcsprintf(" %#- 11.5g", dis->offset[j][jhat]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" scale: ", dis->scale, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf(" scale[%d][]:", j); + for (int jhat = 0; jhat < naxis; jhat++) { + wcsprintf(" %#- 11.5g", dis->scale[j][jhat]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" iparm: ", dis->iparm, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf(" iparm[%d] : ", j); + WCSPRINTF_PTR("", dis->iparm[j], "\n"); + + if (dis->iparm[j]) { + wcsprintf(" iparm[%d][]:", j); + for (int k = 0; k < dis->iparm[j][I_NIPARM]; k++) { + if (k && k%5 == 0) { + wcsprintf("\n "); + } + wcsprintf(" %11d", dis->iparm[j][k]); + } + wcsprintf("\n"); + } + } + + WCSPRINTF_PTR(" dparm: ", dis->dparm, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf(" dparm[%d] : ", j); + WCSPRINTF_PTR("", dis->dparm[j], "\n"); + + if (dis->dparm[j]) { + wcsprintf(" dparm[%d][]:", j); + for (int k = 0; k < dis->iparm[j][I_NDPARM]; k++) { + if (k && k%5 == 0) { + wcsprintf("\n "); + } + wcsprintf(" %#- 11.5g", dis->dparm[j][k]); + } + wcsprintf("\n"); + } + } + + wcsprintf(" i_naxis: %d\n", dis->i_naxis); + wcsprintf(" ndis: %d\n", dis->ndis); + + // Error handling. + WCSPRINTF_PTR(" err: ", dis->err, "\n"); + if (dis->err) { + wcserr_prt(dis->err, " "); + } + + // Pointers to distortion functions. + char hext[32]; + WCSPRINTF_PTR(" disp2x: ", dis->disp2x, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf(" disp2x[%d]: %s", j, + wcsutil_fptr2str((void (*)(void))dis->disp2x[j], hext)); + if (dis->disp2x[j] == dispoly) { + wcsprintf(" (= dispoly)\n"); + } else if (dis->disp2x[j] == tpd1) { + wcsprintf(" (= tpd1)\n"); + } else if (dis->disp2x[j] == tpd2) { + wcsprintf(" (= tpd2)\n"); + } else if (dis->disp2x[j] == tpd3) { + wcsprintf(" (= tpd3)\n"); + } else if (dis->disp2x[j] == tpd4) { + wcsprintf(" (= tpd4)\n"); + } else if (dis->disp2x[j] == tpd5) { + wcsprintf(" (= tpd5)\n"); + } else if (dis->disp2x[j] == tpd6) { + wcsprintf(" (= tpd6)\n"); + } else if (dis->disp2x[j] == tpd7) { + wcsprintf(" (= tpd7)\n"); + } else if (dis->disp2x[j] == tpd8) { + wcsprintf(" (= tpd8)\n"); + } else if (dis->disp2x[j] == tpd9) { + wcsprintf(" (= tpd9)\n"); + } else { + wcsprintf("\n"); + } + } + + // Pointers to inverse distortion functions. + WCSPRINTF_PTR(" disx2p: ", dis->disx2p, "\n"); + for (int j = 0; j < naxis; j++) { + wcsprintf(" disx2p[%d]: %s\n", j, + wcsutil_fptr2str((void (*)(void))dis->disx2p[j], hext)); + } + + // Memory management. + wcsprintf(" m_flag: %d\n", dis->m_flag); + wcsprintf(" m_naxis: %d\n", dis->m_naxis); + WCSPRINTF_PTR(" m_dtype: ", dis->m_dtype, ""); + if (dis->m_dtype == dis->dtype) wcsprintf(" (= dtype)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_dp: ", dis->m_dp, ""); + if (dis->m_dp == dis->dp) wcsprintf(" (= dp)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_maxdis: ", dis->m_maxdis, ""); + if (dis->m_maxdis == dis->maxdis) wcsprintf(" (= maxdis)"); + wcsprintf("\n"); + + return 0; +} + +//---------------------------------------------------------------------------- + +int disperr(const struct disprm *dis, const char *prefix) + +{ + if (dis == 0x0) return DISERR_NULL_POINTER; + + if (dis->err) { + wcserr_prt(dis->err, prefix); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int dishdo(struct disprm *dis) + +{ + static const char *function = "dishdo"; + + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + int status = 0; + for (int j = 0; j < dis->naxis; j++) { + if (dis->iparm[j][I_DTYPE]) { + if (dis->iparm[j][I_DTYPE] == DIS_TPD) { + // Implemented as TPD... + if (strcmp(dis->dtype[j], "TPD") != 0) { + // ... but isn't TPD. + dis->iparm[j][I_DTYPE] |= DIS_DOTPD; + } + } else { + // Must be a Polynomial that can't be implemented as TPD. + status = wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Translation of %s to TPD is not possible", dis->dtype[j]); + } + } + } + + return status; +} + +//---------------------------------------------------------------------------- + +int disset(struct disprm *dis) + +{ + static const char *function = "disset"; + + if (dis == 0x0) return DISERR_NULL_POINTER; + if (dis->flag == -DISSET) return 0; + struct wcserr **err = &(dis->err); + + // Do basic checks. + if (dis->ndp < 0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "disprm::ndp is negative (%d)", dis->ndp); + } + + int naxis = dis->naxis; + int ndis = 0; + for (int j = 0; j < naxis; j++) { + if (strlen(dis->dtype[j])) { + ndis++; + break; + } + } + + char *dpq; + if (dis->ndp) { + // Is it prior or sequent? + if (dis->dp[0].field[1] == 'P') { + dpq = "DPja"; + } else if (dis->dp[0].field[1] == 'Q') { + dpq = "DQia"; + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "disprm::dp[0].field (%s) is invalid", dis->dp[0].field); + } + + } else { + if (ndis) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "No DPja or DQia keywords, NAXES at least is required for each " + "distortion"); + } + + // A Clayton's distortion. Avert compiler warnings about possible use of + // uninitialized variables. + dpq = 0x0; + } + + + // Free memory allocated separately for each axis. + for (int j = 0; j < dis->i_naxis; j++) { + if (dis->iparm[j]) free(dis->iparm[j]); + if (dis->dparm[j]) free(dis->dparm[j]); + dis->iparm[j] = 0x0; + dis->dparm[j] = 0x0; + } + + // Allocate or reallocate memory, if necessary, for derived parameter and + // work arrays sized according to the number of axes. + if (dis->i_naxis < naxis) { + if (dis->i_naxis) { + free(dis->docorr); + free(dis->Nhat); + + // Noting that axmap, offset, and scale are allocated in bulk. + free(dis->axmap[0]); + free(dis->axmap); + free(dis->offset[0]); + free(dis->offset); + free(dis->scale[0]); + free(dis->scale); + + free(dis->iparm); + free(dis->dparm); + + free(dis->disp2x); + free(dis->disx2p); + } + + if ((dis->docorr = calloc(naxis, sizeof(int *))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->Nhat = calloc(naxis, sizeof(int *))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + // Allocate axmap[][] in bulk and then carve it up. + if ((dis->axmap = calloc(naxis, sizeof(int *))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->axmap[0] = calloc(naxis*naxis, sizeof(int))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + for (int j = 1; j < naxis; j++) { + dis->axmap[j] = dis->axmap[j-1] + naxis; + } + + // Allocate offset[][] in bulk and then carve it up. + if ((dis->offset = calloc(naxis, sizeof(double *))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->offset[0] = calloc(naxis*naxis, sizeof(double))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + for (int j = 1; j < naxis; j++) { + dis->offset[j] = dis->offset[j-1] + naxis; + } + + // Allocate scale[][] in bulk and then carve it up. + if ((dis->scale = calloc(naxis, sizeof(double *))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->scale[0] = calloc(naxis*naxis, sizeof(double))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + for (int j = 1; j < naxis; j++) { + dis->scale[j] = dis->scale[j-1] + naxis; + } + + if ((dis->iparm = calloc(naxis, sizeof(int *))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->dparm = calloc(naxis, sizeof(double *))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->disp2x = calloc(naxis, sizeof(int (*)(DISP2X_ARGS)))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->disx2p = calloc(naxis, sizeof(int (*)(DISX2P_ARGS)))) == 0x0) { + disfree(dis); + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + dis->i_naxis = naxis; + } + + // Start with a clean slate. + for (int j = 0; j < naxis; j++) { + dis->docorr[j] = 1; + } + + memset(dis->Nhat, 0, naxis*sizeof(int)); + + for (int jhat = 0; jhat < naxis*naxis; jhat++) { + dis->axmap[0][jhat] = -1; + } + + memset(dis->offset[0], 0, naxis*naxis*sizeof(double)); + + for (int jhat = 0; jhat < naxis*naxis; jhat++) { + dis->scale[0][jhat] = 1.0; + } + + // polyset() etc. must look after iparm[][] and dparm[][]. + + dis->i_naxis = naxis; + dis->ndis = 0; + + memset(dis->disp2x, 0, naxis*sizeof(int (*)(DISP2X_ARGS))); + memset(dis->disx2p, 0, naxis*sizeof(int (*)(DISX2P_ARGS))); + + + // Handle DPja or DQia keywords common to all distortions. + struct dpkey *keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + // Check that they're all one kind or the other. + if (keyp->field[1] != dpq[1]) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "disprm::dp appears to contain a mix of DPja and DQia keys"); + } + + int j = keyp->j; + + if (j < 1 || naxis < j) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid axis number (%d) in %s", j, keyp->field); + } + + char *fp; + if ((fp = strchr(keyp->field, '.')) == 0x0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid record field name: %s", j, keyp->field); + } + fp++; + + // Convert to 0-relative axis number. + j--; + + if (strncmp(fp, "DOCORR", 7) == 0) { + if (dpkeyi(keyp) == 0) { + dis->docorr[j] = 0; + } + + } else if (strncmp(fp, "NAXES", 6) == 0) { + int Nhat = dpkeyi(keyp); + if (Nhat < 0 || naxis < Nhat) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid value of Nhat for %s distortion in %s: %d", dis->dtype[j], + keyp->field, Nhat); + } + + dis->Nhat[j] = Nhat; + + } else if (strncmp(fp, "AXIS.", 5) == 0) { + int jhat; + sscanf(fp+5, "%d", &jhat); + if (jhat < 1 || naxis < jhat) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid axis in axis map for %s distortion in %s: %d", + dis->dtype[j], keyp->field, jhat); + } + + // N.B. axis numbers in the map are 0-relative. + dis->axmap[j][jhat-1] = dpkeyi(keyp) - 1; + + } else if (strncmp(fp, "OFFSET.", 7) == 0) { + int jhat; + sscanf(fp+7, "%d", &jhat); + dis->offset[j][jhat-1] = dpkeyd(keyp); + + } else if (strncmp(fp, "SCALE.", 6) == 0) { + int jhat; + sscanf(fp+6, "%d", &jhat); + dis->scale[j][jhat-1] = dpkeyd(keyp); + } + } + + // Set defaults and do sanity checks on axmap[][]. + for (int j = 0; j < naxis; j++) { + if (strlen(dis->dtype[j]) == 0) { + // No distortion on this axis, check that there are no parameters. + keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j == j+1) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "No distortion type, yet %s keyvalues are present for axis %d", + dpq, j+1); + } + } + + continue; + } + + // N.B. NAXES (Nhat) has no default value. + if (dis->Nhat[j] <= 0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "%s.NAXES was not set (or bad) for %s distortion on axis %d", + dpq, dis->dtype[j], j+1); + } + + // Set defaults for axmap[][]. + int Nhat = dis->Nhat[j]; + for (int jhat = 0; jhat < Nhat; jhat++) { + if (dis->axmap[j][jhat] == -1) { + dis->axmap[j][jhat] = jhat; + } + } + + // Sanity check on the length of the axis map. + Nhat = 0; + for (int jhat = 0; jhat < naxis; jhat++) { + if (dis->axmap[j][jhat] != -1) Nhat = jhat+1; + } + + if (Nhat != dis->Nhat[j]) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Mismatch in length of axis map for %s distortion on axis %d", + dis->dtype[j], j+1); + } + + // Check uniqueness of entries in the axis map. + for (int jhat = 0; jhat < Nhat; jhat++) { + for (int k = 0; k < jhat; k++) { + if (dis->axmap[j][jhat] == dis->axmap[j][k]) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Duplicated entry in axis map for %s distortion on axis %d", + dis->dtype[j], j+1); + } + } + } + } + + + // Identify the distortion functions. + ndis = 0; + for (int j = 0; j < naxis; j++) { + if (strlen(dis->dtype[j]) == 0) { + // No distortion on this axis. + continue; + } + + if (dis->Nhat[j] == 0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Empty axis map for %s distortion on axis %d", dis->dtype[j], j+1); + } + + // Invoke the specific setup functions for each distortion. + int status; + if (strcmp(dis->dtype[j], "TPD") == 0) { + // Template Polynomial Distortion. + if ((status = tpdset(j, dis))) { + // (Preserve the error message set by tpdset().) + return status; + } + + } else if (strcmp(dis->dtype[j], "TPV") == 0) { + // TPV "projection". + if ((status = tpvset(j, dis))) { + // (Preserve the error message set by tpvset().) + return status; + } + + } else if (strcmp(dis->dtype[j], "SIP") == 0) { + // Simple Imaging Polynomial (SIP). + if ((status = sipset(j, dis))) { + // (Preserve the error message set by sipset().) + return status; + } + + } else if (strcmp(dis->dtype[j], "DSS") == 0) { + // Digitized Sky Survey (DSS). + if ((status = dssset(j, dis))) { + // (Preserve the error message set by dssset().) + return status; + } + + } else if (strncmp(dis->dtype[j], "WAT", 3) == 0) { + // WAT (TNX or ZPX "projections"). + if ((status = watset(j, dis))) { + // (Preserve the error message set by watset().) + return status; + } + + } else if (strcmp(dis->dtype[j], "Polynomial") == 0 || + strcmp(dis->dtype[j], "Polynomial*") == 0) { + // General polynomial distortion. + if ((status = polyset(j, dis))) { + // (Preserve the error message set by polyset().) + return status; + } + + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized/unimplemented distortion function: %s", dis->dtype[j]); + } + + ndis++; + } + + dis->ndis = ndis; + + dis->flag = (dis->flag == 1) ? -DISSET : DISSET; + + return 0; +} + +//---------------------------------------------------------------------------- + +int disp2x( + struct disprm *dis, + const double rawcrd[], + double discrd[]) + +{ + static const char *function = "disp2x"; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + int status = 0; + if (abs(dis->flag) != DISSET) { + if ((status = disset(dis))) return status; + } + + int naxis = dis->naxis; + + double *tmpcrd; + if ((tmpcrd = calloc(naxis, sizeof(double))) == 0x0) { + status = wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + goto cleanup; + } + + + // Invoke the distortion functions for each axis. + for (int j = 0; j < naxis; j++) { + if (dis->disp2x[j]) { + double *offset = dis->offset[j]; + double *scale = dis->scale[j]; + + int Nhat = dis->Nhat[j]; + for (int jhat = 0; jhat < Nhat; jhat++) { + int axisj = dis->axmap[j][jhat]; + tmpcrd[jhat] = (rawcrd[axisj] - offset[jhat])*scale[jhat]; + } + + double dtmp; + if ((dis->disp2x[j])(0, dis->iparm[j], dis->dparm[j], Nhat, tmpcrd, + &dtmp)) { + status = wcserr_set(DIS_ERRMSG(DISERR_DISTORT)); + goto cleanup; + } + + if (dis->docorr[j]) { + // Distortion function computes a correction to be applied. + discrd[j] = rawcrd[j] + dtmp; + } else { + // Distortion function computes corrected coordinates directly. + discrd[j] = dtmp; + } + + } else { + discrd[j] = rawcrd[j]; + } + } + +cleanup: + if (tmpcrd) free(tmpcrd); + return status; +} + +//---------------------------------------------------------------------------- +// This function is intended for debugging purposes only. +// No documentation or prototype is provided in dis.h. + +int disitermax(int itermax) + +{ + static int ITERMAX = 30; + + if (itermax >= 0) { + ITERMAX = itermax; + } + + return ITERMAX; +} + +//---------------------------------------------------------------------------- + +int disx2p( + struct disprm *dis, + const double discrd[], + double rawcrd[]) + +{ + static const char *function = "disx2p"; + + const double TOL = 1.0e-13; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + int status = 0; + if (abs(dis->flag) != DISSET) { + if ((status = disset(dis))) return status; + } + + int naxis = dis->naxis; + + double *tmpmem; + if ((tmpmem = calloc(5*naxis, sizeof(double))) == 0x0) { + status = wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + goto cleanup; + } + + // Carve up working memory. + double *tmpcrd = tmpmem; + double *dcrd0 = tmpcrd + naxis; + double *dcrd1 = dcrd0 + naxis; + double *rcrd1 = dcrd1 + naxis; + double *delta = rcrd1 + naxis; + + + // Zeroth approximation. The assumption here and below is that the + // distortion is small so that, to first order in the neighbourhood of + // the solution, discrd[j] ~= a + b*rawcrd[j], i.e. independent of + // rawcrd[i], where i != j. This is effectively equivalent to assuming + // that the distortion functions are separable to first order. + // Furthermore, a is assumed to be small, and b close to unity. + memcpy(rawcrd, discrd, naxis*sizeof(double)); + + // If available, use disprm::disx2p to improve the zeroth approximation. + for (int j = 0; j < naxis; j++) { + if (dis->disx2p[j]) { + double *offset = dis->offset[j]; + double *scale = dis->scale[j]; + + int Nhat = dis->Nhat[j]; + for (int jhat = 0; jhat < Nhat; jhat++) { + int axisj = dis->axmap[j][jhat]; + tmpcrd[jhat] = (discrd[axisj] - offset[jhat])*scale[jhat]; + } + + double rtmp; + if ((status = (dis->disx2p[j])(1, dis->iparm[j], dis->dparm[j], Nhat, + tmpcrd, &rtmp))) { + status = wcserr_set(DIS_ERRMSG(DISERR_DEDISTORT)); + goto cleanup; + } + + if (dis->docorr[j]) { + // Inverse distortion function computes a correction to be applied. + rawcrd[j] = discrd[j] + rtmp; + } else { + // Inverse distortion function computes corrected coordinates directly. + rawcrd[j] = rtmp; + } + } + } + + // Quick return debugging hook, assumes inverse functions were defined. + int itermax; + if ((itermax = disitermax(-1)) == 0) { + goto cleanup; + } + + + // Iteratively invert the (well-behaved!) distortion function. + int convergence = 0, iter; + for (iter = 0; iter < itermax; iter++) { + if ((status = disp2x(dis, rawcrd, dcrd0))) { + wcserr_set(DIS_ERRMSG(status)); + goto cleanup; + } + + // Check for convergence. + convergence = 1; + for (int j = 0; j < naxis; j++) { + delta[j] = discrd[j] - dcrd0[j]; + + double dd; + if (fabs(discrd[j]) < 1.0) { + dd = delta[j]; + } else { + // TOL may be below the precision achievable from floating point + // subtraction, so switch to a fractional tolerance. + dd = delta[j] / discrd[j]; + } + + if (TOL < fabs(dd)) { + // No convergence yet on this axis. + convergence = 0; + } + } + + if (convergence) break; + + // Determine a suitable test point for computing the gradient. + for (int j = 0; j < naxis; j++) { + // Constrain the displacement. + delta[j] /= 2.0; + if (fabs(delta[j]) < 1.0e-6) { + if (delta[j] < 0.0) { + delta[j] = -1.0e-6; + } else { + delta[j] = 1.0e-6; + } + } else if (1.0 < fabs(delta[j])) { + if (delta[j] < 0.0) { + delta[j] = -1.0; + } else { + delta[j] = 1.0; + } + } + } + + if (iter < itermax/2) { + // With the assumption of small distortions (as above), the gradient + // of discrd[j] should be dominated by the partial derivative with + // respect to rawcrd[j], and we can neglect partials with respect + // to rawcrd[i], where i != j. Thus only one test point is needed, + // not one for each axis. + for (int j = 0; j < naxis; j++) { + rcrd1[j] = rawcrd[j] + delta[j]; + } + + // Compute discrd[] at the test point. + if ((status = disp2x(dis, rcrd1, dcrd1))) { + wcserr_set(DIS_ERRMSG(status)); + goto cleanup; + } + + // Compute the next approximation. + for (int j = 0; j < naxis; j++) { + rawcrd[j] += (discrd[j] - dcrd0[j]) * + (delta[j]/(dcrd1[j] - dcrd0[j])); + } + + } else { + // Convergence should not take more than seven or so iterations. As + // it is slow, try computing the gradient in full. + memcpy(rcrd1, rawcrd, naxis*sizeof(double)); + + for (int j = 0; j < naxis; j++) { + rcrd1[j] += delta[j]; + + // Compute discrd[] at the test point. + if ((status = disp2x(dis, rcrd1, dcrd1))) { + wcserr_set(DIS_ERRMSG(status)); + goto cleanup; + } + + // Compute the next approximation. + rawcrd[j] += (discrd[j] - dcrd0[j]) * + (delta[j]/(dcrd1[j] - dcrd0[j])); + + rcrd1[j] -= delta[j]; + } + } + } + + + if (!convergence) { + double residual = 0.0; + for (int j = 0; j < naxis; j++) { + double dd = discrd[j] - dcrd0[j] ; + residual += dd*dd; + } + residual = sqrt(residual); + + status = wcserr_set(WCSERR_SET(DISERR_DEDISTORT), + "Convergence not achieved after %d iterations, residual %#7.2g", iter, + residual); + goto cleanup; + } + + +cleanup: + if (tmpmem) free(tmpmem); + return status; +} + +//---------------------------------------------------------------------------- + +int diswarp( + struct disprm *dis, + const double pixblc[], + const double pixtrc[], + const double pixsamp[], + int *nsamp, + double maxdis[], + double *maxtot, + double avgdis[], + double *avgtot, + double rmsdis[], + double *rmstot) + +{ + static const char *function = "diswarp"; + + int status = 0; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + int naxis = dis->naxis; + + if (nsamp) *nsamp = 0; + for (int j = 0; j < naxis; j++) { + if (maxdis) maxdis[j] = 0.0; + if (avgdis) avgdis[j] = 0.0; + if (rmsdis) rmsdis[j] = 0.0; + } + if (maxtot) *maxtot = 0.0; + if (avgtot) *avgtot = 0.0; + if (rmstot) *rmstot = 0.0; + + // Quick return if no distortions. + if (dis->ndis == 0) return 0; + + double *tmpmem; + if ((tmpmem = calloc(4*(size_t)naxis, sizeof(double))) == 0x0) { + status = wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + goto cleanup; + } + + // Carve up working memory. + double *pixinc = tmpmem; + double *pixend = pixinc + naxis; + double *sumdis = pixend + naxis; + double *ssqdis = sumdis + naxis; + + // Work out increments on each axis. + for (int j = 0; j < naxis; j++) { + double pixspan = pixtrc[j] - (pixblc ? pixblc[j] : 1.0); + + if (pixsamp == 0x0) { + pixinc[j] = 1.0; + } else if (pixsamp[j] == 0.0) { + pixinc[j] = 1.0; + } else if (pixsamp[j] > 0.0) { + pixinc[j] = pixsamp[j]; + } else if (pixsamp[j] > -1.5) { + pixinc[j] = 2.0*pixspan; + } else { + pixinc[j] = pixspan / ((int)(-pixsamp[j] - 0.5)); + } + } + + // Get some more memory for coordinate vectors. + double *pix0, *pix1; + if ((pix0 = calloc(2*(size_t)naxis, sizeof(double))) == 0x0) { + status = wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + goto cleanup; + } + + pix1 = pix0 + naxis; + + + // Set up the array of pixel coordinates. + for (int j = 0; j < naxis; j++) { + pix0[j] = pixblc ? pixblc[j] : 1.0; + pixend[j] = pixtrc[j] + 0.5*pixinc[j]; + } + + // Initialize accumulators. + for (int j = 0; j < naxis; j++) { + sumdis[j] = 0.0; + ssqdis[j] = 0.0; + } + double sumtot = 0.0; + double ssqtot = 0.0; + + + // Loop over N dimensions. + int carry = 0; + while (carry == 0) { + if ((status = disp2x(dis, pix0, pix1))) { + // (Preserve the error message set by disp2x().) + goto cleanup; + } + + // Accumulate statistics. + (*nsamp)++; + + double dssq = 0.0; + for (int j = 0; j < naxis; j++) { + double dpix = pix1[j] - pix0[j]; + double dpx2 = dpix*dpix; + + sumdis[j] += dpix; + ssqdis[j] += dpx2; + + if (maxdis && (dpix = fabs(dpix)) > maxdis[j]) { + maxdis[j] = dpix; + } + + dssq += dpx2; + } + + double totdis = sqrt(dssq); + sumtot += totdis; + ssqtot += totdis*totdis; + + if (maxtot && *maxtot < totdis) { + *maxtot = totdis; + } + + // Next pixel. + for (int j = 0; j < naxis; j++) { + pix0[j] += pixinc[j]; + if (pix0[j] < pixend[j]) { + carry = 0; + break; + } + + pix0[j] = pixblc ? pixblc[j] : 1.0; + carry = 1; + } + } + + + // Compute the means and RMSs. + for (int j = 0; j < naxis; j++) { + ssqdis[j] /= *nsamp; + sumdis[j] /= *nsamp; + if (avgdis) avgdis[j] = sumdis[j]; + if (rmsdis) rmsdis[j] = sqrt(ssqdis[j] - sumdis[j]*sumdis[j]); + } + + ssqtot /= *nsamp; + sumtot /= *nsamp; + if (avgtot) *avgtot = sumtot; + if (rmstot) *rmstot = sqrt(ssqtot - sumtot*sumtot); + + +cleanup: + if (tmpmem) { + free(tmpmem); + if (pix0) free(pix0); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int polyset(int j, struct disprm *dis) + +{ + static const char *function = "polyset"; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + int naxis = dis->naxis; + + char id[32]; + sprintf(id, "Polynomial on axis %d", j+1); + + + // Find the number of auxiliary variables and terms. + int K = 0; + int M = 0; + struct dpkey *keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp; + if ((fp = strchr(keyp->field, '.')) == 0x0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid field name for %s: %s", id, keyp->field); + } + fp++; + + if (strcmp(fp, "NAUX") == 0) { + K = dpkeyi(keyp); + } else if (strcmp(fp, "NTERMS") == 0) { + M = dpkeyi(keyp); + } + } + + if (K < 0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid number of auxiliaries (%d) for %s", K, id); + } + + if (M <= 0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid number of terms (%d) for %s", M, id); + } + + int Nhat = dis->Nhat[j]; + int nKparm = 2*(Nhat + 1); + int nVar = Nhat + K; + int nTparm = 1 + nVar; + int ndparm = K*nKparm + M*nTparm; + +// These iparm indices are specific to Polynomial. +#define I_NIDX 3 // No. of indexes in iparm[]. +#define I_LENDP 4 // Full (allocated) length of dparm[]. +#define I_K 5 // No. of auxiliary variables. +#define I_M 6 // No. of terms in the polynomial. +#define I_NKPARM 7 // No. of parameters used to define each auxiliary. +#define I_NTPARM 8 // No. of parameters used to define each term. +#define I_NVAR 9 // No. of independent + auxiliary variables. +#define I_MNVAR 10 // No. of powers (exponents) in the polynomial. +#define I_DPOLY 11 // dparm offset for polynomial coefficients. +#define I_DAUX 12 // dparm offset for auxiliary coefficients. +#define I_DVPOW 13 // dparm offset for integral powers of variables. +#define I_MAXPOW 14 // iparm offset for max powers. +#define I_DPOFF 15 // iparm offset for dparm offsets. +#define I_FLAGS 16 // iparm offset for flags. +#define I_IPOW 17 // iparm offset for integral powers. +#define I_NPOLY 18 + + // Add extra for handling integer exponents. See "Optimization" below. + int niparm = I_NPOLY + (2 + 2*M)*nVar; + + // Add extra memory for temporaries. + int lendp = ndparm + K; + + // Allocate memory for the indexes and parameter array. + if ((dis->iparm[j] = calloc(niparm, sizeof(int))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + if ((dis->dparm[j] = calloc(lendp, sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + // These help a bit to stop the code from turning into hieroglyphics. + int *iparm = dis->iparm[j]; + double *dparm = dis->dparm[j]; + + + // Record the indexing parameters. The first three are more widely used. + iparm[I_DTYPE] = DIS_POLYNOMIAL; + iparm[I_NIPARM] = niparm; + iparm[I_NDPARM] = ndparm; + + iparm[I_NIDX] = I_NPOLY; + iparm[I_LENDP] = lendp; + iparm[I_K] = K; + iparm[I_M] = M; + iparm[I_NKPARM] = nKparm; + iparm[I_NTPARM] = nTparm; + iparm[I_NVAR] = nVar; + iparm[I_MNVAR] = M*nVar; + iparm[I_DPOLY] = K*nKparm; + iparm[I_DAUX] = ndparm; + iparm[I_DVPOW] = ndparm + K; + iparm[I_MAXPOW] = iparm[I_NIDX]; + iparm[I_DPOFF] = iparm[I_MAXPOW] + nVar; + iparm[I_FLAGS] = iparm[I_DPOFF] + nVar; + iparm[I_IPOW] = iparm[I_FLAGS] + M*nVar; + + // Set default values of POWER for the auxiliary variables. + double *dptr = dparm + (1 + Nhat); + for (int k = 0; k < K; k++) { + for (int jhat = 0; jhat <= Nhat; jhat++) { + dptr[jhat] = 1.0; + } + dptr += nKparm; + } + + // Set default values of COEFF for the independent variables. + dptr = dparm + iparm[I_DPOLY]; + for (int m = 0; m < M; m++) { + *dptr = 1.0; + dptr += nTparm; + } + + // Extract parameter values from DPja or DQia. + int i, k, m; + k = m = 0; + keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + // N.B. keyp->j is 1-relative, but j is 0-relative. + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "AUX.", 4) == 0) { + // N.B. k here is 1-relative. + fp += 4; + sscanf(fp, "%d", &k); + if (k < 1 || K < k) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Bad auxiliary variable (%d) for %s: %s", k, id, keyp->field); + } + + if ((fp = strchr(fp, '.')) == 0x0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid field name for %s: %s", id, keyp->field); + } + fp++; + + int offset; + if (strncmp(fp, "COEFF.", 6) == 0) { + offset = 0; + + } else if (strncmp(fp, "POWER.", 6) == 0) { + offset = 1 + Nhat; + + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + + fp += 6; + int jhat; + sscanf(fp, "%d", &jhat); + if (jhat < 0 || naxis < jhat) { + // N.B. jhat == 0 is ok. + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid axis number (%d) for %s: %s", jhat, id, keyp->field); + } + + i = (k-1)*nKparm + offset + jhat; + dparm[i] = dpkeyd(keyp); + + } else if (strncmp(fp, "TERM.", 5) == 0) { + // N.B. m here is 1-relative. + fp += 5; + sscanf(fp, "%d", &m); + if (m < 1 || M < m) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Bad term (%d) for %s: %s", m, id, keyp->field); + } + + if ((fp = strchr(fp, '.')) == 0x0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid field name for %s: %s", id, keyp->field); + } + fp++; + + if (strcmp(fp, "COEFF") == 0) { + i = iparm[I_DPOLY] + (m-1)*nTparm; + dparm[i] = dpkeyd(keyp); + + } else if (strncmp(fp, "VAR.", 4) == 0) { + // N.B. jhat here is 1-relative. + fp += 4; + int jhat; + sscanf(fp, "%d", &jhat); + if (jhat < 1 || naxis < jhat) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid axis number (%d) for %s: %s", jhat, id, keyp->field); + } + + i = iparm[I_DPOLY] + (m-1)*nTparm + 1 + (jhat-1); + double power = dpkeyd(keyp); + dparm[i] = power; + + } else if (strncmp(fp, "AUX.", 4) == 0) { + // N.B. k here is 1-relative. + fp += 4; + sscanf(fp, "%d", &k); + if (k < 1 || K < k) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Bad auxiliary variable (%d) for %s: %s", k, id, keyp->field); + } + + i = iparm[I_DPOLY] + (m-1)*nTparm + 1 + Nhat + (k-1); + double power = dpkeyd(keyp); + dparm[i] = power; + + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + + } else if (strcmp(fp, "DOCORR") && + strcmp(fp, "NAXES") && + strncmp(fp, "AXIS.", 5) && + strncmp(fp, "OFFSET.", 7) && + strncmp(fp, "SCALE.", 6) && + strcmp(fp, "NAUX") && + strcmp(fp, "NTERMS")) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + } + + + // Optimization: when the power is integral, it is faster to multiply + // ------------ repeatedly than call pow(). iparm[] is constructed as + // follows: + // I_NPOLY indexing parameters, as above, + // nVar elements record the largest integral power for each variable, + // nVar elements record offsets into dparm for each variable, + // M*nVar flags to signal whether the power is integral, + // M*nVar integral powers. + for (int ivar = 0; ivar < nVar; ivar++) { + // Want at least the first degree power for all variables. + i = iparm[I_MAXPOW] + ivar; + iparm[i] = 1; + } + + for (int ivar = 0; ivar < nVar; ivar++) { + for (m = 0; m < M; m++) { + i = iparm[I_DPOLY] + m*nTparm + 1 + ivar; + double power = dparm[i]; + + // Is it integral? (Positive, negative, or zero.) + int ipow = (int)power; + if (power == (double)ipow) { + // Signal that the power is integral. + i = iparm[I_FLAGS] + m*nVar + ivar; + if (ipow == 0) { + iparm[i] = 3; + } else { + iparm[i] = 1; + } + + // The integral power itself. + i = iparm[I_IPOW] + m*nVar + ivar; + iparm[i] = ipow; + } + + // Record the largest integral power for each variable. + i = iparm[I_MAXPOW] + ivar; + if (iparm[i] < abs(ipow)) { + iparm[i] = abs(ipow); + } + } + } + + // How many of all powers of each variable will there be? + int npow = 0; + for (int ivar = 0; ivar < nVar; ivar++) { + // Offset into dparm. + i = iparm[I_DPOFF] + ivar; + iparm[i] = lendp + npow; + + i = iparm[I_MAXPOW] + ivar; + npow += iparm[i]; + } + + // Expand dparm to store the extra powers. + if (npow) { + lendp += npow; + iparm[I_LENDP] = lendp; + if ((dis->dparm[j] = realloc(dparm, lendp*sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + } + + // No specialist de-distortions. + dis->disp2x[j] = dispoly; + dis->disx2p[j] = 0x0; + + // Translate Polynomial to TPD if possible, it's much faster. + // However don't do it if the name was given as "Polynomial*". + if (strcmp(dis->dtype[j], "Polynomial") == 0) { + pol2tpd(j, dis); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpdset(int j, struct disprm *dis) + +{ + static const char *function = "tpdset"; + + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + char id[32]; + sprintf(id, "TPD on axis %d", j+1); + + + // TPD distortion. + if (dis->Nhat[j] < 1 || 2 < dis->Nhat[j]) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Axis map for %s must contain 1 or 2 entries, not %d", id, + dis->Nhat[j]); + } + + // Find the number of parameters. + int ncoeff[2] = {0, 0}; + int doaux = 0; + int doradial = 0; + struct dpkey *keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "TPD.", 4) == 0) { + fp += 4; + int idis; + if (strncmp(fp, "FWD.", 4) == 0) { + idis = 0; + + } else if (strncmp(fp, "REV.", 4) == 0) { + // TPD may provide a polynomial approximation for the inverse. + idis = 1; + + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + + int k; + sscanf(fp+4, "%d", &k); + if (0 <= k && k <= 59) { + if (ncoeff[idis] < k+1) ncoeff[idis] = k+1; + + // Any radial terms? + if (k == 3 || k == 11 || k == 23 || k == 39 || k == 59) { + doradial = 1; + } + + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid parameter number (%d) for %s: %s", k, id, keyp->field); + } + + } else if (strncmp(fp, "AUX.", 4) == 0) { + // Flag usage of auxiliary variables. + doaux = 1; + + } else if (strcmp(fp, "DOCORR") && + strcmp(fp, "NAXES") && + strncmp(fp, "AXIS.", 5) && + strncmp(fp, "OFFSET.", 7) && + strncmp(fp, "SCALE.", 6)) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + } + + int (*(distpd[2]))(DISP2X_ARGS) = {0x0, 0x0}; + for (int idis = 0; idis < 2; idis++) { + if (ncoeff[idis] <= 4) { + if (idis) { + // No inverse polynomial. + break; + } + + // First degree. + ncoeff[idis] = 4; + distpd[idis] = tpd1; + } else if (ncoeff[idis] <= 7) { + // Second degree. + ncoeff[idis] = 7; + distpd[idis] = tpd2; + } else if (ncoeff[idis] <= 12) { + // Third degree. + ncoeff[idis] = 12; + distpd[idis] = tpd3; + } else if (ncoeff[idis] <= 17) { + // Fourth degree. + ncoeff[idis] = 17; + distpd[idis] = tpd4; + } else if (ncoeff[idis] <= 24) { + // Fifth degree. + ncoeff[idis] = 24; + distpd[idis] = tpd5; + } else if (ncoeff[idis] <= 31) { + // Sixth degree. + ncoeff[idis] = 31; + distpd[idis] = tpd6; + } else if (ncoeff[idis] <= 40) { + // Seventh degree. + ncoeff[idis] = 40; + distpd[idis] = tpd7; + } else if (ncoeff[idis] <= 49) { + // Eighth degree. + ncoeff[idis] = 49; + distpd[idis] = tpd8; + } else if (ncoeff[idis] <= 60) { + // Ninth degree. + ncoeff[idis] = 60; + distpd[idis] = tpd9; + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid number of parameters (%d) for %s", ncoeff[idis], id); + } + } + + // disx2p() only uses the inverse TPD, if present, to provide a better + // zeroth approximation. + dis->disp2x[j] = distpd[0]; + dis->disx2p[j] = distpd[1]; + + +// These iparm indices are specific to TPD (matching definitions in wcshdr.c). +#define I_TPDNCO 3 // No. of TPD coefficients, forward... +#define I_TPDINV 4 // ...and inverse. +#define I_TPDAUX 5 // True if auxiliary variables are used. +#define I_TPDRAD 6 // True if the radial variable is used. +#define I_NTPD 7 + + // Record indexing parameters. + int niparm = I_NTPD; + if ((dis->iparm[j] = calloc(niparm, sizeof(int))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + int ndparm = (doaux?6:0) + ncoeff[0] + ncoeff[1]; + + // The first three are more widely used. + dis->iparm[j][I_DTYPE] = DIS_TPD; + dis->iparm[j][I_NIPARM] = niparm; + dis->iparm[j][I_NDPARM] = ndparm; + + // Number of TPD coefficients. + dis->iparm[j][I_TPDNCO] = ncoeff[0]; + dis->iparm[j][I_TPDINV] = ncoeff[1]; + + // Flag for presence of auxiliary variables. + dis->iparm[j][I_TPDAUX] = doaux; + + // Flag for presence of radial terms. + dis->iparm[j][I_TPDRAD] = doradial; + + + // Allocate memory for the polynomial coefficients and fill it. + if ((dis->dparm[j] = calloc(ndparm, sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + // Set default auxiliary coefficients. + if (doaux) { + dis->dparm[j][1] = 1.0; + dis->dparm[j][5] = 1.0; + } + + keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "AUX.", 4) == 0) { + // Auxiliary variables. + fp += 4; + int k; + sscanf(fp, "%d", &k); + if (k < 1 || 2 < k) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Bad auxiliary variable (%d) for %s: %s", k, id, keyp->field); + } + + if ((fp = strchr(fp, '.')) == 0x0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid field name for %s: %s", id, keyp->field); + } + fp++; + + if (strncmp(fp, "COEFF.", 6) != 0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + + fp += 6; + int m; + sscanf(fp, "%d", &m); + if (m < 0 || 2 < m) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid coefficient number (%d) for %s: %s", m, id, keyp->field); + } + + int idis = 3*(k-1) + m; + dis->dparm[j][idis] = dpkeyd(keyp); + + } else if (strncmp(fp, "TPD.", 4) == 0) { + fp += 4; + int idis = (doaux?6:0); + if (strncmp(fp, "REV.", 4) == 0) { + idis += ncoeff[0]; + } + + int k; + sscanf(fp+4, "%d", &k); + dis->dparm[j][idis+k] = dpkeyd(keyp); + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int pol2tpd(int j, struct disprm *dis) + +{ + static const char *function = "pol2tpd"; + + static const int map[][10] = {{ 0, 2, 6, 10, 16, 22, 30, 38, 48, 58}, + { 1, 5, 9, 15, 21, 29, 37, 47, 57, -1}, + { 4, 8, 14, 20, 28, 36, 46, 56, -1, -1}, + { 7, 13, 19, 27, 35, 45, 55, -1, -1, -1}, + {12, 18, 26, 34, 44, 54, -1, -1, -1, -1}, + {17, 25, 33, 43, 53, -1, -1, -1, -1, -1}, + {24, 32, 42, 52, -1, -1, -1, -1, -1, -1}, + {31, 41, 51, -1, -1, -1, -1, -1, -1, -1}, + {40, 50, -1, -1, -1, -1, -1, -1, -1, -1}, + {49, -1, -1, -1, -1, -1, -1, -1, -1, -1}}; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + int *iparm = dis->iparm[j]; + double *dparm = dis->dparm[j]; + + + // Check the number of independent variables, no more than two. + int Nhat = dis->Nhat[j]; + if (2 < Nhat) return -1; + + // Check auxiliaries: only one is allowed... + int K = iparm[I_K]; + if (1 < K) return -1; + if (K) { + // ...and it must be radial. + if (dparm[0] != 0.0) return -1; + if (dparm[1] != 1.0) return -1; + if (dparm[2] != 1.0) return -1; + if (dparm[3] != 0.5) return -1; + if (dparm[4] != 2.0) return -1; + if (dparm[5] != 2.0) return -1; + } + + // Check powers... + int *iflgp = iparm + iparm[I_FLAGS]; + int *ipowp = iparm + iparm[I_IPOW]; + int degree = 0; + for (int m = 0; m < iparm[I_M]; m++) { + int deg = 0; + for (int jhat = 0; jhat < Nhat; jhat++) { + // ...they must be positive integral. + if (*iflgp == 0) return -1; + if (*ipowp < 0) return -1; + deg += *ipowp; + iflgp++; + ipowp++; + } + + // The polynomial degree can't be greater than 9. + if (9 < deg) return -1; + + if (K) { + // Likewise for the radial variable. + if (*iflgp == 0) return -1; + if (*ipowp) { + if (*ipowp < 0) return -1; + if (9 < *ipowp) return -1; + + // Can't mix the radial and other terms. + if (deg) return -1; + + // Can't have even powers of the radial variable. + deg = *ipowp; + if (!(deg%2)) return -1; + } + iflgp++; + ipowp++; + } + + if (degree < deg) degree = deg; + } + + + // OK, it ticks all the boxes. Now translate it. + int ndparm = 0; + if (degree == 1) { + ndparm = 4; + dis->disp2x[j] = tpd1; + } else if (degree == 2) { + ndparm = 7; + dis->disp2x[j] = tpd2; + } else if (degree == 3) { + ndparm = 12; + dis->disp2x[j] = tpd3; + } else if (degree == 4) { + ndparm = 17; + dis->disp2x[j] = tpd4; + } else if (degree == 5) { + ndparm = 24; + dis->disp2x[j] = tpd5; + } else if (degree == 6) { + ndparm = 31; + dis->disp2x[j] = tpd6; + } else if (degree == 7) { + ndparm = 40; + dis->disp2x[j] = tpd7; + } else if (degree == 8) { + ndparm = 49; + dis->disp2x[j] = tpd8; + } else if (degree == 9) { + ndparm = 60; + dis->disp2x[j] = tpd9; + } + + // No specialist de-distortions. + dis->disx2p[j] = 0x0; + + // Record indexing parameters. + int niparm = I_NTPD; + int *tpd_iparm; + if ((tpd_iparm = calloc(niparm, sizeof(int))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + // The first three are more widely used. + tpd_iparm[I_DTYPE] = DIS_TPD; + tpd_iparm[I_NIPARM] = niparm; + tpd_iparm[I_NDPARM] = ndparm; + + // Number of TPD coefficients. + tpd_iparm[I_TPDNCO] = ndparm; + tpd_iparm[I_TPDINV] = 0; + + // No auxiliary variables yet. + tpd_iparm[I_TPDAUX] = 0; + + // Flag for presence of radial terms. + tpd_iparm[I_TPDRAD] = K; + + + // Allocate memory for the polynomial coefficients and fill it. + double *tpd_dparm; + if ((tpd_dparm = calloc(ndparm, sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + ipowp = iparm + iparm[I_IPOW]; + double *dpolp = dparm + iparm[I_DPOLY]; + for (int m = 0; m < iparm[I_M]; m++) { + if (K && ipowp[Nhat]) { + // The radial variable. + switch (ipowp[Nhat]) { + case 1: + tpd_dparm[3] = *dpolp; + break; + case 3: + tpd_dparm[11] = *dpolp; + break; + case 5: + tpd_dparm[23] = *dpolp; + break; + case 7: + tpd_dparm[39] = *dpolp; + break; + case 9: + tpd_dparm[59] = *dpolp; + break; + } + + } else { + // The independent variables. + int p[] = {0, 0}; + for (int jhat = 0; jhat < Nhat; jhat++) { + p[jhat] = ipowp[jhat]; + } + + int n = map[p[0]][p[1]]; + tpd_dparm[n] = *dpolp; + } + + + ipowp += iparm[I_NVAR]; + dpolp += iparm[I_NVAR] + 1; + } + + + // Switch from Polynomial to TPD. + free(iparm); + free(dparm); + dis->iparm[j] = tpd_iparm; + dis->dparm[j] = tpd_dparm; + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpvset(int j, struct disprm *dis) + +{ + static const char *function = "tpvset"; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + // TPV "projection". + char id[32]; + sprintf(id, "TPV on axis %d", j+1); + + // TPV is a sequent distortion, applied to intermediate world coordinates + // (normally used with CDi_ja). It computes corrected coordinates directly. + dis->docorr[j] = 0; + + if (dis->Nhat[j] != 2) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Axis map for %s must contain 2 entries, not %d", id, dis->Nhat[j]); + } + + // Find the number of parameters. + int ndparm = 0; + int doradial = 0; + struct dpkey *keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "TPV.", 4) == 0) { + int k; + sscanf(fp+4, "%d", &k); + if (0 <= k && k <= 39) { + if (ndparm < k+1) ndparm = k+1; + + // Any radial terms? + if (k == 3 || k == 11 || k == 23 || k == 39 || k == 59) { + doradial = 1; + } + + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid parameter number (%d) for %s: %s", k, id, keyp->field); + } + + } else if (strcmp(fp, "NAXES") && + strncmp(fp, "AXIS.", 5) && + strncmp(fp, "OFFSET.", 7) && + strncmp(fp, "SCALE.", 6)) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + } + + // TPD is going to do the dirty work. + if (ndparm <= 4) { + // First degree. + ndparm = 4; + dis->disp2x[j] = tpd1; + } else if (ndparm <= 7) { + // Second degree. + ndparm = 7; + dis->disp2x[j] = tpd2; + } else if (ndparm <= 12) { + // Third degree. + ndparm = 12; + dis->disp2x[j] = tpd3; + } else if (ndparm <= 17) { + // Fourth degree. + ndparm = 17; + dis->disp2x[j] = tpd4; + } else if (ndparm <= 24) { + // Fifth degree. + ndparm = 24; + dis->disp2x[j] = tpd5; + } else if (ndparm <= 31) { + // Sixth degree. + ndparm = 31; + dis->disp2x[j] = tpd6; + } else if (ndparm <= 40) { + // Seventh degree. + ndparm = 40; + dis->disp2x[j] = tpd7; + } else { + // Could go to ninth degree, but that wouldn't be legit. + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid number of parameters (%d) for %s", ndparm, id); + } + + // No specialist de-distortions. + dis->disx2p[j] = 0x0; + + // Record indexing parameters. + int niparm = I_NTPD; + if ((dis->iparm[j] = calloc(niparm, sizeof(int))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + // The first three are more widely used. + dis->iparm[j][I_DTYPE] = DIS_TPD; + dis->iparm[j][I_NIPARM] = niparm; + dis->iparm[j][I_NDPARM] = ndparm; + + // Number of TPD coefficients. + dis->iparm[j][I_TPDNCO] = ndparm; + dis->iparm[j][I_TPDINV] = 0; + + // TPV never needs auxiliary variables. + dis->iparm[j][I_TPDAUX] = 0; + + // Flag for presence of radial terms. + dis->iparm[j][I_TPDRAD] = doradial; + + + // Allocate memory for the polynomial coefficients and fill it. + if ((dis->dparm[j] = calloc(ndparm, sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + // One-to-one correspondence between TPV and TPD coefficients. + if (strncmp(fp, "TPV.", 4) == 0) { + int k; + sscanf(fp+4, "%d", &k); + dis->dparm[j][k] = dpkeyd(keyp); + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int sipset(int j, struct disprm *dis) + +{ + static const char *function = "sipset"; + + static const int map[][10] = {{ 0, 2, 6, 10, 16, 22, 30, 38, 48, 58}, + { 1, 5, 9, 15, 21, 29, 37, 47, 57, -1}, + { 4, 8, 14, 20, 28, 36, 46, 56, -1, -1}, + { 7, 13, 19, 27, 35, 45, 55, -1, -1, -1}, + {12, 18, 26, 34, 44, 54, -1, -1, -1, -1}, + {17, 25, 33, 43, 53, -1, -1, -1, -1, -1}, + {24, 32, 42, 52, -1, -1, -1, -1, -1, -1}, + {31, 41, 51, -1, -1, -1, -1, -1, -1, -1}, + {40, 50, -1, -1, -1, -1, -1, -1, -1, -1}, + {49, -1, -1, -1, -1, -1, -1, -1, -1, -1}}; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + // Simple Imaging Polynomial. + char id[32]; + sprintf(id, "SIP on axis %d", j+1); + + + // SIP is a prior distortion that computes an additive correction. + dis->docorr[j] = 1; + + if (dis->Nhat[j] != 2) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Axis map for %s must contain 2 entries, not %d", id, dis->Nhat[j]); + } + + // Find the polynomial degree, at least 1 for the forward function. + int degree[2] = {1, -1}; + struct dpkey *keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "SIP.", 4) == 0) { + fp += 4; + int idis; + if (strncmp(fp, "FWD.", 4) == 0) { + idis = 0; + + } else if (strncmp(fp, "REV.", 4) == 0) { + // SIP uses a polynomial approximation for the inverse. + idis = 1; + + } else { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + + fp += 4; + int p, q; + sscanf(fp, "%d_%d", &p, &q); + int deg = p + q; + if (p < 0 || 9 < p || q < 0 || 9 < q || 9 < deg) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid powers (%d, %d) for %s: %s", p, q, id, keyp->field); + } + + if (degree[idis] < deg) degree[idis] = deg; + + } else if (strcmp(fp, "NAXES") && + strncmp(fp, "AXIS.", 5) && + strncmp(fp, "OFFSET.", 7) && + strncmp(fp, "SCALE.", 6)) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + } + + if (degree[1] == 0 ) degree[1] = 1; + + // TPD is going to do the dirty work. + int (*(distpd[2]))(DISP2X_ARGS) = {0x0, 0x0}, ncoeff[2]; + for (int idis = 0; idis < 2; idis++) { + ncoeff[idis] = 0; + if (degree[idis] == 1) { + ncoeff[idis] = 4; + distpd[idis] = tpd1; + } else if (degree[idis] == 2) { + ncoeff[idis] = 7; + distpd[idis] = tpd2; + } else if (degree[idis] == 3) { + ncoeff[idis] = 12; + distpd[idis] = tpd3; + } else if (degree[idis] == 4) { + ncoeff[idis] = 17; + distpd[idis] = tpd4; + } else if (degree[idis] == 5) { + ncoeff[idis] = 24; + distpd[idis] = tpd5; + } else if (degree[idis] == 6) { + ncoeff[idis] = 31; + distpd[idis] = tpd6; + } else if (degree[idis] == 7) { + ncoeff[idis] = 40; + distpd[idis] = tpd7; + } else if (degree[idis] == 8) { + ncoeff[idis] = 49; + distpd[idis] = tpd8; + } else if (degree[idis] == 9) { + ncoeff[idis] = 60; + distpd[idis] = tpd9; + } + } + + // SIP uses a polynomial approximation to the inverse. It's not very + // accurate but may provide disx2p() with a better zeroth approximation. + dis->disp2x[j] = distpd[0]; + dis->disx2p[j] = distpd[1]; + + + // Record indexing parameters. + int niparm = I_NTPD; + if ((dis->iparm[j] = calloc(niparm, sizeof(int))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + int ndparm = ncoeff[0] + ncoeff[1]; + + // The first three are more widely used. + dis->iparm[j][I_DTYPE] = DIS_TPD; + dis->iparm[j][I_NIPARM] = niparm; + dis->iparm[j][I_NDPARM] = ndparm; + + // Number of TPD coefficients. + dis->iparm[j][I_TPDNCO] = ncoeff[0]; + dis->iparm[j][I_TPDINV] = ncoeff[1]; + + // SIP never needs auxiliary variables. + dis->iparm[j][I_TPDAUX] = 0; + + // SIP never needs the radial terms. + dis->iparm[j][I_TPDRAD] = 0; + + + // Allocate memory for the polynomial coefficients and fill it. + if ((dis->dparm[j] = calloc(ndparm, sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "SIP.", 4) == 0) { + fp += 4; + int idis; + if (strncmp(fp, "FWD.", 4) == 0) { + idis = 0; + } else { + idis = ncoeff[0]; + } + + int p, q; + sscanf(fp+4, "%d_%d", &p, &q); + + // Map to TPD coefficient number. + idis += map[p][q]; + + dis->dparm[j][idis] = dpkeyd(keyp); + } + } + + + return 0; +} + +//---------------------------------------------------------------------------- + +int dssset(int j, struct disprm *dis) + +{ + static const char *function = "dssset"; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + // Digitized Sky Survey. + char id[32]; + sprintf(id, "DSS on axis %d", j+1); + + + // DSS is translated into a sequent distortion, applied to intermediate + // pixel coordinates. It computes corrected coordinates directly. + dis->docorr[j] = 0; + + if (dis->Nhat[j] != 2) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Axis map for %s must contain 2 entries, not %d", id, dis->Nhat[j]); + } + + // Safe to assume the polynomial degree is 5 (or less). + int ncoeff = 24; + dis->disp2x[j] = tpd5; + + // No specialist de-distortions. + dis->disx2p[j] = 0x0; + + + // Record indexing parameters. + int niparm = I_NTPD; + if ((dis->iparm[j] = calloc(niparm, sizeof(int))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + int ndparm = 6 + ncoeff; + + // The first three are more widely used. + dis->iparm[j][I_DTYPE] = DIS_TPD; + dis->iparm[j][I_NIPARM] = niparm; + dis->iparm[j][I_NDPARM] = ndparm; + + // Number of TPD coefficients. + dis->iparm[j][I_TPDNCO] = ncoeff; + dis->iparm[j][I_TPDINV] = 0; + + // DSS always needs auxiliary variables. + dis->iparm[j][I_TPDAUX] = 1; + + // DSS never needs the radial terms. + dis->iparm[j][I_TPDRAD] = 0; + + + // Allocate memory for the polynomial coefficients and fill it. + if ((dis->dparm[j] = calloc(ndparm, sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + // This translation follows WCS Paper IV, Sect. 5.2 using the same + // variable names. Find A1, A2, A3, B1, B2, and B3. + double A1, A2, A3, B1, B2, B3; + A1 = A2 = A3 = 0.0; + B1 = B2 = B3 = 0.0; + struct dpkey *keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + char *fp = strchr(keyp->field, '.') + 1; + if (strncmp(fp, "DSS.AMD.", 8) == 0) { + fp += 8; + int m; + sscanf(fp, "%d", &m); + + if (m == 1) { + if (keyp->j == 1) { + A1 = dpkeyd(keyp); + } else { + B1 = dpkeyd(keyp); + } + } else if (m == 2) { + if (keyp->j == 1) { + A2 = dpkeyd(keyp); + } else { + B2 = dpkeyd(keyp); + } + } else if (m == 3) { + if (keyp->j == 1) { + A3 = dpkeyd(keyp); + } else { + B3 = dpkeyd(keyp); + } + } + } + } + + double X0 = (A2*B3 - A3*B1) / (A1*B1 - A2*B2); + double Y0 = (A3*B2 - A1*B3) / (A1*B1 - A2*B2); + + double S = sqrt(fabs(A1*B1 - A2*B2)); + if (S == 0.0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Coefficient scale for %s is zero.", id); + } + + // Coefficients for the auxiliary variables. + double *dparm = dis->dparm[j]; + if (j == 0) { + dparm[0] = X0; + dparm[1] = -B1/S; + dparm[2] = -A2/S; + dparm[3] = Y0; + dparm[4] = B2/S; + dparm[5] = A1/S; + + // Change the sign of S for scaling the A coefficients. + S *= -1.0; + + } else { + dparm[0] = Y0; + dparm[1] = B2/S; + dparm[2] = A1/S; + dparm[3] = X0; + dparm[4] = -B1/S; + dparm[5] = -A2/S; + } + + // Translate DSS coefficients to TPD. + dparm += 6; + int degree = 3; + keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "DSS.AMD.", 8) == 0) { + // Skip zero coefficients. + double coeff = dpkeyd(keyp); + if (coeff == 0.0) continue; + + fp += 8; + int m; + sscanf(fp, "%d", &m); + + // Apply the coefficient scale factor. + coeff /= S; + + if (m == 1) { + dparm[1] = coeff; + } else if (m == 2) { + dparm[2] = coeff; + } else if (m == 3) { + dparm[0] = coeff; + } else if (m == 4) { + dparm[4] += coeff; + } else if (m == 5) { + dparm[5] = coeff; + } else if (m == 6) { + dparm[6] += coeff; + } else if (m == 7) { + dparm[4] += coeff; + dparm[6] += coeff; + } else if (m == 8) { + dparm[7] += coeff; + } else if (m == 9) { + dparm[8] = coeff; + } else if (m == 10) { + dparm[9] += coeff; + } else if (m == 11) { + dparm[10] = coeff; + } else if (m == 12) { + dparm[7] += coeff; + dparm[9] += coeff; + } else if (m == 13) { + dparm[17] = coeff; + dparm[19] = coeff * 2.0; + dparm[21] = coeff; + degree = 5; + } else if (coeff != 0.0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid parameter for %s: %s", m, id, keyp->field); + } + + } else if (strcmp(fp, "NAXES") && + strncmp(fp, "AXIS.", 5) && + strncmp(fp, "OFFSET.", 7) && + strncmp(fp, "SCALE.", 6)) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + } + + // The DSS polynomial doesn't have 4th degree terms, and the 5th degree + // coefficient is often zero. + if (degree == 3) { + dis->iparm[j][I_TPDNCO] = 12; + dis->disp2x[j] = tpd3; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +#define CHEBYSHEV 1 +#define LEGENDRE 2 +#define MONOMIAL 3 + +int watset(int j, struct disprm *dis) + +{ + static const char *function = "watset"; + + static const int map[][10] = {{ 0, 2, 6, 10, 16, 22, 30, 38, 48, 58}, + { 1, 5, 9, 15, 21, 29, 37, 47, 57, -1}, + { 4, 8, 14, 20, 28, 36, 46, 56, -1, -1}, + { 7, 13, 19, 27, 35, 45, 55, -1, -1, -1}, + {12, 18, 26, 34, 44, 54, -1, -1, -1, -1}, + {17, 25, 33, 43, 53, -1, -1, -1, -1, -1}, + {24, 32, 42, 52, -1, -1, -1, -1, -1, -1}, + {31, 41, 51, -1, -1, -1, -1, -1, -1, -1}, + {40, 50, -1, -1, -1, -1, -1, -1, -1, -1}, + {49, -1, -1, -1, -1, -1, -1, -1, -1, -1}}; + + // Initialize. + if (dis == 0x0) return DISERR_NULL_POINTER; + struct wcserr **err = &(dis->err); + + // WAT (TNX or ZPX) Polynomial. + char id[32]; + sprintf(id, "WAT (%s) on axis %d", dis->dtype[0]+4, j+1); + + + // WAT is a sequent distortion, applied to intermediate world coordinates + // (normally used with CDi_ja). It computes an additive correction. + dis->docorr[j] = 1; + + if (dis->Nhat[j] != 2) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Axis map for %s must contain 2 entries, not %d", id, dis->Nhat[j]); + } + + // Find the polynomial degree (at least 1), kind, and domain. + int degree = 1; + int kind = 0; + double xmin = 0.0; + double xmax = 0.0; + double ymin = 0.0; + double ymax = 0.0; + struct dpkey *keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if (strncmp(fp, "WAT.", 4) == 0) { + fp += 4; + if (strncmp(fp, "CHBY.", 5) == 0 || + strncmp(fp, "LEGR.", 5) == 0 || + strncmp(fp, "MONO.", 5) == 0) { + + fp += 5; + int m, n; + sscanf(fp, "%d_%d", &m, &n); + int deg = m + n; + if (m < 0 || 9 < m || n < 0 || 9 < n || 9 < deg) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Invalid powers (%d, %d) for %s: %s", m, n, id, keyp->field); + } + + if (degree < deg) degree = deg; + + } else if (strcmp(fp, "POLY") == 0) { + kind = dpkeyi(keyp); + + } else if (strcmp(fp, "XMIN") == 0) { + xmin = dpkeyd(keyp); + + } else if (strcmp(fp, "XMAX") == 0) { + xmax = dpkeyd(keyp); + + } else if (strcmp(fp, "YMIN") == 0) { + ymin = dpkeyd(keyp); + + } else if (strcmp(fp, "YMAX") == 0) { + ymax = dpkeyd(keyp); + } + + } else if (strcmp(fp, "NAXES") && + strncmp(fp, "AXIS.", 5) && + strncmp(fp, "OFFSET.", 7) && + strncmp(fp, "SCALE.", 6)) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Unrecognized field name for %s: %s", id, keyp->field); + } + } + + int doaux = (kind == 1 || kind == 2); + + // TPD is going to do the dirty work. + int ncoeff = 0; + if (degree == 1) { + // First degree. + ncoeff = 4; + dis->disp2x[j] = tpd1; + } else if (degree == 2) { + // Second degree. + ncoeff = 7; + dis->disp2x[j] = tpd2; + } else if (degree == 3) { + // Third degree. + ncoeff = 12; + dis->disp2x[j] = tpd3; + } else if (degree == 4) { + // Fourth degree. + ncoeff = 17; + dis->disp2x[j] = tpd4; + } else if (degree == 5) { + // Fifth degree. + ncoeff = 24; + dis->disp2x[j] = tpd5; + } else if (degree == 6) { + // Sixth degree. + ncoeff = 31; + dis->disp2x[j] = tpd6; + } else if (degree == 7) { + // Seventh degree. + ncoeff = 40; + dis->disp2x[j] = tpd7; + } else if (degree == 8) { + // Eighth degree. + ncoeff = 49; + dis->disp2x[j] = tpd8; + } else if (degree == 9) { + // Ninth degree. + ncoeff = 60; + dis->disp2x[j] = tpd9; + } + + // No specialist de-distortions. + dis->disx2p[j] = 0x0; + + + // Record indexing parameters. + int niparm = I_NTPD; + if ((dis->iparm[j] = calloc(niparm, sizeof(int))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + int *iparm = dis->iparm[j]; + + int ndparm = 6 + ncoeff; + + // The first three are more widely used. + iparm[I_DTYPE] = DIS_TPD; + iparm[I_NIPARM] = niparm; + iparm[I_NDPARM] = ndparm; + + // Number of TPD coefficients. + iparm[I_TPDNCO] = ncoeff; + iparm[I_TPDINV] = 0; + + // The Chebyshev and Legendre polynomials use auxiliary variables. + iparm[I_TPDAUX] = doaux; + + // WAT never needs the radial terms. + iparm[I_TPDRAD] = 0; + + + // Allocate memory for the polynomial coefficients and fill it. + if ((dis->dparm[j] = calloc(ndparm, sizeof(double))) == 0x0) { + return wcserr_set(DIS_ERRMSG(DISERR_MEMORY)); + } + + double *dparm = dis->dparm[j]; + + + // Coefficients for the auxiliary variables. + if (doaux) { + double x0 = (xmax + xmin)/2.0; + double dx = (xmax - xmin)/2.0; + if (dx == 0.0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "X-span for %s is zero", id); + } + + dparm[0] = -x0/dx; + dparm[1] = 1.0/dx; + dparm[2] = 0.0; + + double y0 = (ymax + ymin)/2.0; + double dy = (ymax - ymin)/2.0; + if (dy == 0.0) { + return wcserr_set(WCSERR_SET(DISERR_BAD_PARAM), + "Y-span for %s is zero", id); + } + + dparm[3] = -y0/dy; + dparm[4] = 0.0; + dparm[5] = 1.0/dy; + + dparm += 6; + } + + + // Unpack the polynomial coefficients. + keyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, keyp++) { + if (keyp->j-1 != j) continue; + + char *fp = strchr(keyp->field, '.') + 1; + + if ((kind == CHEBYSHEV && strncmp(fp, "WAT.CHBY.", 9) == 0) || + (kind == LEGENDRE && strncmp(fp, "WAT.LEGR.", 9) == 0) || + (kind == MONOMIAL && strncmp(fp, "WAT.MONO.", 9) == 0)) { + fp += 9; + + int m, n; + sscanf(fp, "%d_%d", &m, &n); + + if (kind == MONOMIAL) { + // Monomial coefficient, maps simply to TPD coefficient number. + int idis = map[m][n]; + dparm[idis] = dpkeyd(keyp); + + } else { + // Coefficient of the product of two Chebyshev or two Legendre + // polynomials. Find the corresponding monomial coefficients. + double coeff = dpkeyd(keyp); + + double coeffm[10], coeffn[10]; + cheleg(kind, m, n, coeffm, coeffn); + for (int im = 0; im <= m; im++) { + if (coeffm[im] == 0.0) continue; + + for (int in = 0; in <= n; in++) { + if (coeffn[in] == 0.0) continue; + + int idis = map[im][in]; + dparm[idis] += coeff*coeffm[im]*coeffn[in]; + } + } + } + } + } + + return 0; +} + +//---------------------------------------------------------------------------- +// Compute the coefficients of Chebyshev or Legendre polynomials of degree +// m and n. + +int cheleg(int kind, int m, int n, double coeffm[], double coeffn[]) + +{ + int N = (m > n) ? m : n; + + // Allocate work arrays. + double *coeff[3]; + coeff[0] = calloc(3*(N+1), sizeof(double)); + coeff[1] = coeff[0] + (N+1); + coeff[2] = coeff[1] + (N+1); + + for (int j = 0; j <= N; j++) { + int j0 = j%3; + + if (j == 0) { + coeff[0][0] = 1.0; + + } else if (j == 1) { + coeff[1][1] = 1.0; + + } else { + // Cyclic buffer indices. + int j1 = (j-1)%3; + int j2 = (j-2)%3; + + memset(coeff[j0], 0, (N+1)*sizeof(double)); + + double d = (double)j; + for (int k = 0; k < N; k++) { + if (kind == CHEBYSHEV) { + coeff[j0][k+1] = 2.0 * coeff[j1][k]; + coeff[j0][k] -= coeff[j2][k]; + } else if (kind == LEGENDRE) { + coeff[j0][k+1] = ((2.0*d - 1.0) * coeff[j1][k]) / d; + coeff[j0][k] -= ((d - 1.0) * coeff[j2][k]) / d; + } + } + } + + if (j == m) memcpy(coeffm, coeff[j0], (m+1)*sizeof(double)); + if (j == n) memcpy(coeffn, coeff[j0], (n+1)*sizeof(double)); + } + + free(coeff[0]); + + return 0; +} + +//---------------------------------------------------------------------------- + +int dispoly( + int dummy, + const int iparm[], + const double dparm[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + // Check for zeroes. + for (int jhat = 0; jhat < Nhat; jhat++) { + if (rawcrd[jhat] == 0.0) { + *discrd = 0.0; + return 0; + } + } + + // Working memory for auxiliaries &c. was allocated at the end of p[]. + double *aux = (double *)(dparm + iparm[I_DAUX]); + + // Compute the auxiliary variables. + for (int k = 0; k < iparm[I_K]; k++) { + const double *cptr = dparm + k*iparm[I_NKPARM]; + const double *pptr = cptr + (1+Nhat); + + aux[k] = *(cptr++); + double auxp0 = *(pptr++); + + for (int jhat = 0; jhat < Nhat; jhat++) { + aux[k] += *(cptr++)*pow(rawcrd[jhat], *(pptr++)); + } + + aux[k] = pow(aux[k], auxp0); + + // Check for zeroes. + if (aux[k] == 0.0) { + *discrd = 0.0; + return 0; + } + } + + + // Compute all required integral powers of the variables. + const int *imaxpow = iparm + iparm[I_MAXPOW]; + double *dvarpow = (double *)(dparm + iparm[I_DVPOW]); + + const int *imaxp = imaxpow; + double *dpowp = dvarpow; + for (int jhat = 0; jhat < Nhat; jhat++, imaxp++) { + double var = 1.0; + for (int ip = 0; ip < *imaxp; ip++, dpowp++) { + var *= rawcrd[jhat]; + *dpowp = var; + } + } + + for (int k = 0; k < iparm[I_K]; k++, imaxp++) { + double var = 1.0; + for (int ip = 0; ip < *imaxp; ip++, dpowp++) { + var *= aux[k]; + *dpowp = var; + } + } + + // Loop for each term of the polynomial. + *discrd = 0.0; + const int *iflgp = iparm + iparm[I_FLAGS]; + const int *ipowp = iparm + iparm[I_IPOW]; + const double *dpolp = dparm + iparm[I_DPOLY]; + for (int m = 0; m < iparm[I_M]; m++) { + double term = *(dpolp++); + + // Loop over all variables. + imaxp = imaxpow; + dpowp = dvarpow - 1; + for (int ivar = 0; ivar < iparm[I_NVAR]; ivar++) { + if (*iflgp & 2) { + // Nothing (zero power). + + } else if (*iflgp) { + // Integral power. + if (*ipowp < 0) { + // Negative. + term /= dpowp[*ipowp]; + } else { + // Positive. + term *= dpowp[*ipowp]; + } + + } else { + // Fractional power. + term *= pow(dpowp[0], *dpolp); + } + + iflgp++; + ipowp++; + dpolp++; + + dpowp += *imaxp; + imaxp++; + } + + *discrd += term; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd1( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 4 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // First degree. + *discrd = p[0] + u*p[1]; + + if (Nhat == 1) return 0; + + *discrd += v*p[2]; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*p[3]; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd2( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 7 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Second degree. + *discrd = p[0] + u*(p[1] + u*(p[4])); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6])) + + u*(p[5])*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*p[3]; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd3( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 12 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Third degree. + *discrd = p[0] + u*(p[1] + u*(p[4] + u*(p[7]))); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6] + v*(p[10]))) + + u*(p[5] + v*(p[9]) + + u*(p[8]))*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*(p[3] + s*(p[11])); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd4( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 17 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Fourth degree. + *discrd = p[0] + u*(p[1] + u*(p[4] + u*(p[7] + u*(p[12])))); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6] + v*(p[10] + v*(p[16])))) + + u*(p[5] + v*(p[9] + v*(p[15])) + + u*(p[8] + v*(p[14]) + + u*(p[13])))*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*(p[3] + s*(p[11])); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd5( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 24 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Fifth degree. + *discrd = p[0] + u*(p[1] + u*(p[4] + u*(p[7] + u*(p[12] + u*(p[17]))))); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6] + v*(p[10] + v*(p[16] + v*(p[22]))))) + + u*(p[5] + v*(p[9] + v*(p[15] + v*(p[21]))) + + u*(p[8] + v*(p[14] + v*(p[20])) + + u*(p[13] + v*(p[19]) + + u*(p[18]))))*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*(p[3] + s*(p[11] + s*(p[23]))); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd6( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 31 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Sixth degree. + *discrd = p[0] + u*(p[1] + u*(p[4] + u*(p[7] + u*(p[12] + u*(p[17] + u*(p[24])))))); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6] + v*(p[10] + v*(p[16] + v*(p[22] + v*(p[30])))))) + + u*(p[5] + v*(p[9] + v*(p[15] + v*(p[21] + v*(p[29])))) + + u*(p[8] + v*(p[14] + v*(p[20] + v*(p[28]))) + + u*(p[13] + v*(p[19] + v*(p[27])) + + u*(p[18] + v*(p[26]) + + u*(p[25])))))*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*(p[3] + s*(p[11] + s*(p[23]))); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd7( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 40 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Seventh degree. + *discrd = p[0] + u*(p[1] + u*(p[4] + u*(p[7] + u*(p[12] + u*(p[17] + u*(p[24] + u*(p[31]))))))); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6] + v*(p[10] + v*(p[16] + v*(p[22] + v*(p[30] + v*(p[38]))))))) + + u*(p[5] + v*(p[9] + v*(p[15] + v*(p[21] + v*(p[29] + v*(p[37]))))) + + u*(p[8] + v*(p[14] + v*(p[20] + v*(p[28] + v*(p[36])))) + + u*(p[13] + v*(p[19] + v*(p[27] + v*(p[35]))) + + u*(p[18] + v*(p[26] + v*(p[34])) + + u*(p[25] + v*(p[33]) + + u*(p[32]))))))*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*(p[3] + s*(p[11] + s*(p[23] + s*(p[39])))); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd8( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 49 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Eighth degree. + *discrd = p[0] + u*(p[1] + u*(p[4] + u*(p[7] + u*(p[12] + u*(p[17] + u*(p[24] + u*(p[31] + u*(p[40])))))))); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6] + v*(p[10] + v*(p[16] + v*(p[22] + v*(p[30] + v*(p[38] + v*(p[48])))))))) + + u*(p[5] + v*(p[9] + v*(p[15] + v*(p[21] + v*(p[29] + v*(p[37] + v*(p[47])))))) + + u*(p[8] + v*(p[14] + v*(p[20] + v*(p[28] + v*(p[36] + v*(p[46]))))) + + u*(p[13] + v*(p[19] + v*(p[27] + v*(p[35] + v*(p[45])))) + + u*(p[18] + v*(p[26] + v*(p[34] + v*(p[44]))) + + u*(p[25] + v*(p[33] + v*(p[43])) + + u*(p[32] + v*(p[42]) + + u*(p[41])))))))*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*(p[3] + s*(p[11] + s*(p[23] + s*(p[39])))); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tpd9( + int inverse, + const int i[], + const double p[], + int Nhat, + const double rawcrd[], + double *discrd) + +{ + if (i[I_TPDNCO+inverse] != 60 || 2 < Nhat) { + return 1; + } + + double r, s; + double u = rawcrd[0]; + double v = rawcrd[1]; + + // Auxiliary variables? + if (i[I_TPDAUX]) { + r = p[0] + p[1]*u + p[2]*v; + v = p[3] + p[4]*u + p[5]*v; + u = r; + p += 6; + } + + if (inverse) p += i[I_TPDNCO]; + + // Ninth degree. + *discrd = p[0] + u*(p[1] + u*(p[4] + u*(p[7] + u*(p[12] + u*(p[17] + u*(p[24] + u*(p[31] + u*(p[40] + u*(p[49]))))))))); + + if (Nhat == 1) return 0; + + *discrd += + v*(p[2] + v*(p[6] + v*(p[10] + v*(p[16] + v*(p[22] + v*(p[30] + v*(p[38] + v*(p[48] + v*(p[58]))))))))) + + u*(p[5] + v*(p[9] + v*(p[15] + v*(p[21] + v*(p[29] + v*(p[37] + v*(p[47] + v*(p[57]))))))) + + u*(p[8] + v*(p[14] + v*(p[20] + v*(p[28] + v*(p[36] + v*(p[46] + v*(p[56])))))) + + u*(p[13] + v*(p[19] + v*(p[27] + v*(p[35] + v*(p[45] + v*(p[55]))))) + + u*(p[18] + v*(p[26] + v*(p[34] + v*(p[44] + v*(p[54])))) + + u*(p[25] + v*(p[33] + v*(p[43] + v*(p[53]))) + + u*(p[32] + v*(p[42] + v*(p[52])) + + u*(p[41] + v*(p[51]) + + u*(p[50]))))))))*v; + + // Radial terms? + if (i[I_TPDRAD]) { + s = u*u + v*v; + r = sqrt(s); + + *discrd += r*(p[3] + s*(p[11] + s*(p[23] + s*(p[39] + s*(p[59]))))); + } + + return 0; +} diff --git a/deps/wcslib/C/dis.h b/deps/wcslib/C/dis.h new file mode 100644 index 0000000..ff3bef8 --- /dev/null +++ b/deps/wcslib/C/dis.h @@ -0,0 +1,1224 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: dis.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the dis routines +* --------------------------- +* Routines in this suite implement extensions to the FITS World Coordinate +* System (WCS) standard proposed by +* += "Representations of distortions in FITS world coordinate systems", += Calabretta, M.R. et al. (WCS Paper IV, draft dated 2004/04/22), += available from http://www.atnf.csiro.au/people/Mark.Calabretta +* +* In brief, a distortion function may occupy one of two positions in the WCS +* algorithm chain. Prior distortions precede the linear transformation +* matrix, whether it be PCi_ja or CDi_ja, and sequent distortions follow it. +* WCS Paper IV defines FITS keywords used to specify parameters for predefined +* distortion functions. The following are used for prior distortions: +* += CPDISja ...(string-valued, identifies the distortion function) += DPja ...(record-valued, parameters) += CPERRja ...(floating-valued, maximum value) +* +* Their counterparts for sequent distortions are CQDISia, DQia, and CQERRia. +* An additional floating-valued keyword, DVERRa, records the maximum value of +* the combined distortions. +* +* DPja and DQia are "record-valued". Syntactically, the keyvalues are +* standard FITS strings, but they are to be interpreted in a special way. +* The general form is +* += DPja = ': ' +* +* where the field-specifier consists of a sequence of fields separated by +* periods, and the ': ' between the field-specifier and the floating-point +* value is part of the record syntax. For example: +* += DP1 = 'AXIS.1: 1' +* +* Certain field-specifiers are defined for all distortion functions, while +* others are defined only for particular distortions. Refer to WCS Paper IV +* for further details. wcspih() parses all distortion keywords and loads them +* into a disprm struct for analysis by disset() which knows (or possibly does +* not know) how to interpret them. Of the Paper IV distortion functions, only +* the general Polynomial distortion is currently implemented here. +* +* TPV - the TPV "projection": +* --------------------------- +* The distortion function component of the TPV celestial "projection" is also +* supported. The TPV projection, originally proposed in a draft of WCS Paper +* II, consists of a TAN projection with sequent polynomial distortion, the +* coefficients of which are encoded in PVi_ma keyrecords. Full details may be +* found at the registry of FITS conventions: +* += http://fits.gsfc.nasa.gov/registry/tpvwcs/tpv.html +* +* Internally, wcsset() changes TPV to a TAN projection, translates the PVi_ma +* keywords to DQia and loads them into a disprm struct. These DQia keyrecords +* have the form +* += DQia = 'TPV.m: ' +* +* where i, a, m, and the value for each DQia match each PVi_ma. Consequently, +* WCSLIB would handle a FITS header containing these keywords, along with +* CQDISia = 'TPV' and the required DQia.NAXES and DQia.AXIS.ihat keywords. +* +* Note that, as defined, TPV assumes that CDi_ja is used to define the linear +* transformation. The section on historical idiosyncrasies (below) cautions +* about translating CDi_ja to PCi_ja plus CDELTia in this case. +* +* SIP - Simple Imaging Polynomial: +* -------------------------------- +* These routines also support the Simple Imaging Polynomial (SIP), whose +* design was influenced by early drafts of WCS Paper IV. It is described in +* detail in +* += http://fits.gsfc.nasa.gov/registry/sip.html +* +* SIP, which is defined only as a prior distortion for 2-D celestial images, +* has the interesting feature that it records an approximation to the inverse +* polynomial distortion function. This is used by disx2p() to provide an +* initial estimate for its more precise iterative inversion. The +* special-purpose keywords used by SIP are parsed and translated by wcspih() +* as follows: +* += A_p_q = -> DP1 = 'SIP.FWD.p_q: ' += AP_p_q = -> DP1 = 'SIP.REV.p_q: ' += B_p_q = -> DP2 = 'SIP.FWD.p_q: ' += BP_p_q = -> DP2 = 'SIP.REV.p_q: ' += A_DMAX = -> DPERR1 = += B_DMAX = -> DPERR2 = +* +* SIP's A_ORDER and B_ORDER keywords are not used. WCSLIB would recognise a +* FITS header containing the above keywords, along with CPDISja = 'SIP' and +* the required DPja.NAXES keywords. +* +* DSS - Digitized Sky Survey: +* --------------------------- +* The Digitized Sky Survey resulted from the production of the Guide Star +* Catalogue for the Hubble Space Telescope. Plate solutions based on a +* polynomial distortion function were encoded in FITS using non-standard +* keywords. Sect. 5.2 of WCS Paper IV describes how DSS coordinates may be +* translated to a sequent Polynomial distortion using two auxiliary variables. +* That translation is based on optimising the non-distortion component of the +* plate solution. +* +* Following Paper IV, wcspih() translates the non-distortion component of DSS +* coordinates to standard WCS keywords (CRPIXja, PCi_ja, CRVALia, etc), and +* fills a wcsprm struct with their values. It encodes the DSS polynomial +* coefficients as +* += AMDXm = -> DQ1 = 'AMD.m: ' += AMDYm = -> DQ2 = 'AMD.m: ' +* +* WCSLIB would recognise a FITS header containing the above keywords, along +* with CQDISia = 'DSS' and the required DQia.NAXES keywords. +* +* WAT - the TNX and ZPX "projections": +* ------------------------------------ +* The TNX and ZPX "projections" add a polynomial distortion function to the +* standard TAN and ZPN projections respectively. Unusually, the polynomial +* may be expressed as the sum of Chebyshev or Legendre polynomials, or as a +* simple sum of monomials, as described in +* += http://fits.gsfc.nasa.gov/registry/tnx/tnx-doc.html += http://fits.gsfc.nasa.gov/registry/zpxwcs/zpx.html +* +* The polynomial coefficients are encoded in special-purpose WATi_n keywords +* as a set of continued strings, thus providing the name for this distortion +* type. WATi_n are parsed and translated by wcspih() into the following set: +* += DQi = 'WAT.POLY: ' += DQi = 'WAT.XMIN: ' += DQi = 'WAT.XMAX: ' += DQi = 'WAT.YMIN: ' += DQi = 'WAT.YMAX: ' += DQi = 'WAT.CHBY.m_n: ' or += DQi = 'WAT.LEGR.m_n: ' or += DQi = 'WAT.MONO.m_n: ' +* +* along with CQDISia = 'WAT' and the required DPja.NAXES keywords. For ZPX, +* the ZPN projection parameters are also encoded in WATi_n, and wcspih() +* translates these to standard PVi_ma. +* +* Note that, as defined, TNX and ZPX assume that CDi_ja is used to define the +* linear transformation. The section on historical idiosyncrasies (below) +* cautions about translating CDi_ja to PCi_ja plus CDELTia in this case. +* +* TPD - Template Polynomial Distortion: +* ------------------------------------- +* The "Template Polynomial Distortion" (TPD) is a superset of the TPV, SIP, +* DSS, and WAT (TNX & ZPX) polynomial distortions that also supports 1-D usage +* and inversions. Like TPV, SIP, and DSS, the form of the polynomial is fixed +* (the "template") and only the coefficients for the required terms are set +* non-zero. TPD generalizes TPV in going to 9th degree, SIP by accomodating +* TPV's linear and radial terms, and DSS in both respects. While in theory +* the degree of the WAT polynomial distortion in unconstrained, in practice it +* is limited to values that can be handled by TPD. +* +* Within WCSLIB, TPV, SIP, DSS, and WAT are all implemented as special cases +* of TPD. Indeed, TPD was developed precisely for that purpose. WAT +* distortions expressed as the sum of Chebyshev or Legendre polynomials are +* expanded for TPD as a simple sum of monomials. Moreover, the general +* Polynomial distortion is translated and implemented internally as TPD +* whenever possible. +* +* However, WCSLIB also recognizes 'TPD' as a distortion function in its own +* right (i.e. a recognized value of CPDISja or CQDISia), for use as both prior +* and sequent distortions. Its DPja and DQia keyrecords have the form +* += DPja = 'TPD.FWD.m: ' += DPja = 'TPD.REV.m: ' +* +* for the forward and reverse distortion functions. Moreover, like the +* general Polynomial distortion, TPD supports auxiliary variables, though only +* as a linear transformation of pixel coordinates (p1,p2): +* += x = a0 + a1*p1 + a2*p2 += y = b0 + b1*p1 + b2*p2 +* +* where the coefficients of the auxiliary variables (x,y) are recorded as +* += DPja = 'AUX.1.COEFF.0: a0' ...default 0.0 += DPja = 'AUX.1.COEFF.1: a1' ...default 1.0 += DPja = 'AUX.1.COEFF.2: a2' ...default 0.0 += DPja = 'AUX.2.COEFF.0: b0' ...default 0.0 += DPja = 'AUX.2.COEFF.1: b1' ...default 0.0 += DPja = 'AUX.2.COEFF.2: b2' ...default 1.0 +* +* Though nowhere near as powerful, in typical applications TPD is considerably +* faster than the general Polynomial distortion. As TPD has a finite and not +* too large number of possible terms (60), the coefficients for each can be +* stored (by disset()) in a fixed location in the disprm::dparm[] array. A +* large part of the speedup then arises from evaluating the polynomial using +* Horner's scheme. +* +* Separate implementations for polynomials of each degree, and conditionals +* for 1-D polynomials and 2-D polynomials with and without the radial +* variable, ensure that unused terms mostly do not impose a significant +* computational overhead. +* +* The TPD terms are as follows +* += 0: 1 4: xx 12: xxxx 24: xxxxxx 40: xxxxxxxx += 5: xy 13: xxxy 25: xxxxxy 41: xxxxxxxy += 1: x 6: yy 14: xxyy 26: xxxxyy 42: xxxxxxyy += 2: y 15: xyyy 27: xxxyyy 43: xxxxxyyy += 3: r 7: xxx 16: yyyy 28: xxyyyy 44: xxxxyyyy += 8: xxy 29: xyyyyy 45: xxxyyyyy += 9: xyy 17: xxxxx 30: yyyyyy 46: xxyyyyyy += 10: yyy 18: xxxxy 47: xyyyyyyy += 11: rrr 19: xxxyy 31: xxxxxxx 48: yyyyyyyy += 20: xxyyy 32: xxxxxxy += 21: xyyyy 33: xxxxxyy 49: xxxxxxxxx += 22: yyyyy 34: xxxxyyy 50: xxxxxxxxy += 23: rrrrr 35: xxxyyyy 51: xxxxxxxyy += 36: xxyyyyy 52: xxxxxxyyy += 37: xyyyyyy 53: xxxxxyyyy += 38: yyyyyyy 54: xxxxyyyyy += 39: rrrrrrr 55: xxxyyyyyy += 56: xxyyyyyyy += 57: xyyyyyyyy += 58: yyyyyyyyy += 59: rrrrrrrrr +* +* where r = sqrt(xx + yy). Note that even powers of r are excluded since they +* can be accomodated by powers of (xx + yy). +* +* Note here that "x" refers to the axis to which the distortion function is +* attached, with "y" being the complementary axis. So, for example, with +* longitude on axis 1 and latitude on axis 2, for TPD attached to axis 1, "x" +* refers to axis 1 and "y" to axis 2. For TPD attached to axis 2, "x" refers +* to axis 2, and "y" to axis 1. +* +* TPV uses all terms up to 39. The m in its PVi_ma keywords translates +* directly to the TPD coefficient number. +* +* SIP uses all terms except for 0, 3, 11, 23, 39, and 59, with terms 1 and 2 +* only used for the inverse. Its A_p_q, etc. keywords must be translated +* using a map. +* +* DSS uses terms 0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 17, 19, and 21. The presence +* of a non-zero constant term arises through the use of auxiliary variables +* with origin offset from the reference point of the TAN projection. However, +* in the translation given by WCS Paper IV, the distortion polynomial is zero, +* or very close to zero, at the reference pixel itself. The mapping between +* DSS's AMDXm (or AMDYm) keyvalues and TPD coefficients, while still simple, +* is not quite as straightforward as for TPV and SIP. +* +* WAT uses all but the radial terms, namely 3, 11, 23, 39, and 59. While the +* mapping between WAT's monomial coefficients and TPD is fairly simple, for +* its expression in terms of a sum of Chebyshev or Legendre polynomials it is +* much less so. +* +* Historical idiosyncrasies: +* -------------------------- +* In addition to the above, some historical distortion functions have further +* idiosyncrasies that must be taken into account when translating them to TPD. +* +* WCS Paper IV specifies that a distortion function returns a correction to be +* added to pixel coordinates (prior distortion) or intermediate pixel +* coordinates (sequent distortion). The correction is meant to be small so +* that ignoring the distortion function, i.e. setting the correction to zero, +* produces a commensurately small error. +* +* However, rather than an additive correction, some historical distortion +* functions (TPV, DSS) define a polynomial that returns the corrected +* coordinates directly. +* +* The difference between the two approaches is readily accounted for simply by +* adding or subtracting 1 from the coefficient of the first degree term of the +* polynomial. However, it opens the way for considerable confusion. +* +* Additional to the formalism of WCS Paper IV, both the Polynomial and TPD +* distortion functions recognise a keyword +* += DPja = 'DOCORR: 0' +* +* which is meant to apply generally to indicate that the distortion function +* returns the corrected coordinates directly. Any other value for DOCORR (or +* its absence) indicates that the distortion function returns an additive +* correction. +* +* WCS Paper IV also specifies that the independent variables of a distortion +* function are pixel coordinates (prior distortion) or intermediate pixel +* coordinates (sequent distortion). +* +* On the contrary, the independent variables of the SIP polynomial are pixel +* coordinate offsets from the reference pixel. This is readily handled via +* the renormalisation parameters +* += DPja = 'OFFSET.jhat: ' +* +* where the value corresponds to CRPIXja. +* +* Likewise, because TPV, TNX, and ZPX are defined in terms of CDi_ja, the +* independent variables of the polynomial are intermediate world coordinates +* rather than intermediate pixel coordinates. Because sequent distortions +* are always applied before CDELTia, if CDi_ja is translated to PCi_ja plus +* CDELTia, then either CDELTia must be unity, or the distortion polynomial +* coefficients must be adjusted to account for the change of scale. +* +* Summary of the dis routines: +* ---------------------------- +* These routines apply the distortion functions defined by the extension to +* the FITS WCS standard proposed in Paper IV. They are based on the disprm +* struct which contains all information needed for the computations. The +* struct contains some members that must be set by the user, and others that +* are maintained by these routines, somewhat like a C++ class but with no +* encapsulation. +* +* dpfill(), dpkeyi(), and dpkeyd() are provided to manage the dpkey struct. +* +* disndp(), disini(), disinit(), discpy(), and disfree() are provided to +* manage the disprm struct, dissize() computes its total size including +* allocated memory, disenq() returns information about the state of the +* struct, and disprt() prints its contents. +* +* disperr() prints the error message(s) (if any) stored in a disprm struct. +* +* wcshdo() normally writes SIP and TPV headers in their native form if at all +* possible. However, dishdo() may be used to set a flag that tells it to +* write the header in the form of the TPD translation used internally. +* +* A setup routine, disset(), computes intermediate values in the disprm struct +* from parameters in it that were supplied by the user. The struct always +* needs to be set up by disset(), though disset() need not be called +* explicitly - refer to the explanation of disprm::flag. +* +* disp2x() and disx2p() implement the WCS distortion functions, disp2x() using +* separate functions, such as dispoly() and tpd7(), to do the computation. +* +* An auxiliary routine, diswarp(), computes various measures of the distortion +* over a specified range of coordinates. +* +* PLEASE NOTE: Distortions are not yet handled by wcsbth(), or wcscompare(). +* +* +* disndp() - Memory allocation for DPja and DQia +* ---------------------------------------------- +* disndp() sets or gets the value of NDPMAX (default 256). This global +* variable controls the maximum number of dpkey structs, for holding DPja or +* DQia keyvalues, that disini() should allocate space for. It is also used by +* disinit() as the default value of ndpmax. +* +* PLEASE NOTE: This function is not thread-safe. +* +* Given: +* n int Value of NDPMAX; ignored if < 0. Use a value less +* than zero to get the current value. +* +* Function return value: +* int Current value of NDPMAX. +* +* +* dpfill() - Fill the contents of a dpkey struct +* ---------------------------------------------- +* dpfill() is a utility routine to aid in filling the contents of the dpkey +* struct. No checks are done on the validity of the inputs. +* +* WCS Paper IV specifies the syntax of a record-valued keyword as +* += keyword = ': ' +* +* However, some DPja and DQia record values, such as those of DPja.NAXES and +* DPja.AXIS.j, are intrinsically integer-valued. While FITS header parsers +* are not expected to know in advance which of DPja and DQia are integral and +* which are floating point, if the record's value parses as an integer (i.e. +* without decimal point or exponent), then preferably enter it into the dpkey +* struct as an integer. Either way, it doesn't matter as disset() accepts +* either data type for all record values. +* +* Given and returned: +* dp struct dpkey* +* Store for DPja and DQia keyvalues. +* +* Given: +* keyword const char * +* field const char * +* These arguments are concatenated with an intervening +* "." to construct the full record field name, i.e. +* including the keyword name, DPja or DQia (but +* excluding the colon delimiter which is NOT part of the +* name). Either may be given as a NULL pointer. Set +* both NULL to omit setting this component of the +* struct. +* +* j int Axis number (1-relative), i.e. the j in DPja or +* i in DQia. Can be given as 0, in which case the axis +* number will be obtained from the keyword component of +* the field name which must either have been given or +* preset. +* +* If j is non-zero, and keyword was given, then the +* value of j will be used to fill in the axis number. +* +* type int Data type of the record's value +* 0: Integer, +* 1: Floating point. +* +* i int For type == 0, the integer value of the record. +* +* f double For type == 1, the floating point value of the record. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* dpkeyi() - Get the data value in a dpkey struct as int +* ------------------------------------------------------ +* dpkeyi() returns the data value in a dpkey struct as an integer value. +* +* Given and returned: +* dp const struct dpkey * +* Parsed contents of a DPja or DQia keyrecord. +* +* Function return value: +* int The record's value as int. +* +* +* dpkeyd() - Get the data value in a dpkey struct as double +* --------------------------------------------------------- +* dpkeyd() returns the data value in a dpkey struct as a floating point +* value. +* +* Given and returned: +* dp const struct dpkey * +* Parsed contents of a DPja or DQia keyrecord. +* +* Function return value: +* double The record's value as double. +* +* +* disini() - Default constructor for the disprm struct +* ---------------------------------------------------- +* disini() is a thin wrapper on disinit(). It invokes it with ndpmax set +* to -1 which causes it to use the value of the global variable NDPMAX. It +* is thereby potentially thread-unsafe if NDPMAX is altered dynamically via +* disndp(). Use disinit() for a thread-safe alternative in this case. +* +* +* disinit() - Default constructor for the disprm struct +* ---------------------------------------------------- +* disinit() allocates memory for arrays in a disprm struct and sets all +* members of the struct to default values. +* +* PLEASE NOTE: every disprm struct must be initialized by disinit(), possibly +* repeatedly. On the first invokation, and only the first invokation, +* disprm::flag must be set to -1 to initialize memory management, regardless +* of whether disinit() will actually be used to allocate memory. +* +* Given: +* alloc int If true, allocate memory unconditionally for arrays in +* the disprm struct. +* +* If false, it is assumed that pointers to these arrays +* have been set by the user except if they are null +* pointers in which case memory will be allocated for +* them regardless. (In other words, setting alloc true +* saves having to initalize these pointers to zero.) +* +* naxis int The number of world coordinate axes, used to determine +* array sizes. +* +* Given and returned: +* dis struct disprm* +* Distortion function parameters. Note that, in order +* to initialize memory management disprm::flag must be +* set to -1 when dis is initialized for the first time +* (memory leaks may result if it had already been +* initialized). +* +* Given: +* ndpmax int The number of DPja or DQia keywords to allocate space +* for. If set to -1, the value of the global variable +* NDPMAX will be used. This is potentially +* thread-unsafe if disndp() is being used dynamically to +* alter its value. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* 2: Memory allocation failed. +* +* For returns > 1, a detailed error message is set in +* disprm::err if enabled, see wcserr_enable(). +* +* +* discpy() - Copy routine for the disprm struct +* --------------------------------------------- +* discpy() does a deep copy of one disprm struct to another, using disinit() +* to allocate memory unconditionally for its arrays if required. Only the +* "information to be provided" part of the struct is copied; a call to +* disset() is required to initialize the remainder. +* +* Given: +* alloc int If true, allocate memory unconditionally for arrays in +* the destination. Otherwise, it is assumed that +* pointers to these arrays have been set by the user +* except if they are null pointers in which case memory +* will be allocated for them regardless. +* +* dissrc const struct disprm* +* Struct to copy from. +* +* Given and returned: +* disdst struct disprm* +* Struct to copy to. disprm::flag should be set to -1 +* if disdst was not previously initialized (memory leaks +* may result if it was previously initialized). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* 2: Memory allocation failed. +* +* For returns > 1, a detailed error message is set in +* disprm::err if enabled, see wcserr_enable(). +* +* +* disfree() - Destructor for the disprm struct +* -------------------------------------------- +* disfree() frees memory allocated for the disprm arrays by disinit(). +* disinit() keeps a record of the memory it allocates and disfree() will only +* attempt to free this. +* +* PLEASE NOTE: disfree() must not be invoked on a disprm struct that was not +* initialized by disinit(). +* +* Given: +* dis struct disprm* +* Distortion function parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* +* +* dissize() - Compute the size of a disprm struct +* ----------------------------------------------- +* dissize() computes the full size of a disprm struct, including allocated +* memory. +* +* Given: +* dis const struct disprm* +* Distortion function parameters. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct disprm). The second element +* is the total allocated size, in bytes, assuming that +* the allocation was done by disini(). This figure +* includes memory allocated for members of constituent +* structs, such as disprm::dp. +* +* It is not an error for the struct not to have been set +* up via tabset(), which normally results in additional +* memory allocation. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* disenq() - enquire about the state of a disprm struct +* ----------------------------------------------------- +* disenq() may be used to obtain information about the state of a disprm +* struct. The function returns a true/false answer for the enquiry asked. +* +* Given: +* dis const struct disprm* +* Distortion function parameters. +* +* enquiry int Enquiry according to the following parameters: +* DISENQ_MEM: memory in the struct is being managed by +* WCSLIB (see disinit()). +* DISENQ_SET: the struct has been set up by disset(). +* DISENQ_BYP: the struct is in bypass mode (see +* disset()). +* These may be combined by logical OR, e.g. +* DISENQ_MEM | DISENQ_SET. The enquiry result will be +* the logical AND of the individual results. +* +* Function return value: +* int Enquiry result: +* 0: No. +* 1: Yes. +* +* +* disprt() - Print routine for the disprm struct +* ---------------------------------------------- +* disprt() prints the contents of a disprm struct using wcsprintf(). Mainly +* intended for diagnostic purposes. +* +* Given: +* dis const struct disprm* +* Distortion function parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* +* +* disperr() - Print error messages from a disprm struct +* ----------------------------------------------------- +* disperr() prints the error message(s) (if any) stored in a disprm struct. +* If there are no errors then nothing is printed. It uses wcserr_prt(), q.v. +* +* Given: +* dis const struct disprm* +* Distortion function parameters. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* +* +* dishdo() - write FITS headers using TPD +* --------------------------------------- +* dishdo() sets a flag that tells wcshdo() to write FITS headers in the form +* of the TPD translation used internally. Normally SIP and TPV would be +* written in their native form if at all possible. +* +* Given and returned: +* dis struct disprm* +* Distortion function parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* 3: No TPD translation. +* +* +* disset() - Setup routine for the disprm struct +* ---------------------------------------------- +* disset(), sets up the disprm struct according to information supplied within +* it - refer to the explanation of disprm::flag. +* +* Note that this routine need not be called directly; it will be invoked by +* disp2x() and disx2p() if the disprm::flag is anything other than a +* predefined magic value. +* +* disset() normally operates regardless of the value of disprm::flag; i.e. +* even if a struct was previously set up it will be reset unconditionally. +* However, a disprm struct may be put into "bypass" mode by invoking disset() +* initially with disprm::flag == 1 (rather than 0). disset() will return +* immediately if invoked on a struct in that state. To take a struct out of +* bypass mode, simply reset disprm::flag to zero. See also disenq(). +* +* Given and returned: +* dis struct disprm* +* Distortion function parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid parameter. +* +* For returns > 1, a detailed error message is set in +* disprm::err if enabled, see wcserr_enable(). +* +* +* disp2x() - Apply distortion function +* ------------------------------------ +* disp2x() applies the distortion functions. By definition, the distortion +* is in the pixel-to-world direction. +* +* Depending on the point in the algorithm chain at which it is invoked, +* disp2x() may transform pixel coordinates to corrected pixel coordinates, or +* intermediate pixel coordinates to corrected intermediate pixel coordinates, +* or image coordinates to corrected image coordinates. +* +* +* Given and returned: +* dis struct disprm* +* Distortion function parameters. +* +* Given: +* rawcrd const double[naxis] +* Array of coordinates. +* +* Returned: +* discrd double[naxis] +* Array of coordinates to which the distortion functions +* have been applied. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid parameter. +* 4: Distort error. +* +* For returns > 1, a detailed error message is set in +* disprm::err if enabled, see wcserr_enable(). +* +* +* disx2p() - Apply de-distortion function +* --------------------------------------- +* disx2p() applies the inverse of the distortion functions. By definition, +* the de-distortion is in the world-to-pixel direction. +* +* Depending on the point in the algorithm chain at which it is invoked, +* disx2p() may transform corrected pixel coordinates to pixel coordinates, or +* corrected intermediate pixel coordinates to intermediate pixel coordinates, +* or corrected image coordinates to image coordinates. +* +* disx2p() iteratively solves for the inverse using disp2x(). It assumes +* that the distortion is small and the functions are well-behaved, being +* continuous and with continuous derivatives. Also that, to first order +* in the neighbourhood of the solution, discrd[j] ~= a + b*rawcrd[j], i.e. +* independent of rawcrd[i], where i != j. This is effectively equivalent to +* assuming that the distortion functions are separable to first order. +* Furthermore, a is assumed to be small, and b close to unity. +* +* If disprm::disx2p() is defined, then disx2p() uses it to provide an initial +* estimate for its more precise iterative inversion. +* +* Given and returned: +* dis struct disprm* +* Distortion function parameters. +* +* Given: +* discrd const double[naxis] +* Array of coordinates. +* +* Returned: +* rawcrd double[naxis] +* Array of coordinates to which the inverse distortion +* functions have been applied. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid parameter. +* 5: De-distort error. +* +* For returns > 1, a detailed error message is set in +* disprm::err if enabled, see wcserr_enable(). +* +* +* diswarp() - Compute measures of distortion +* ------------------------------------------ +* diswarp() computes various measures of the distortion over a specified range +* of coordinates. +* +* For prior distortions, the measures may be interpreted simply as an offset +* in pixel coordinates. For sequent distortions, the interpretation depends +* on the nature of the linear transformation matrix (PCi_ja or CDi_ja). If +* the latter introduces a scaling, then the measures will also be scaled. +* Note also that the image domain, which is rectangular in pixel coordinates, +* may be rotated, skewed, and/or stretched in intermediate pixel coordinates, +* and in general cannot be defined using pixblc[] and pixtrc[]. +* +* PLEASE NOTE: the measures of total distortion may be essentially meaningless +* if there are multiple sequent distortions with different scaling. +* +* See also linwarp(). +* +* Given and returned: +* dis struct disprm* +* Distortion function parameters. +* +* Given: +* pixblc const double[naxis] +* Start of the range of pixel coordinates (for prior +* distortions), or intermediate pixel coordinates (for +* sequent distortions). May be specified as a NULL +* pointer which is interpreted as (1,1,...). +* +* pixtrc const double[naxis] +* End of the range of pixel coordinates (prior) or +* intermediate pixel coordinates (sequent). +* +* pixsamp const double[naxis] +* If positive or zero, the increment on the particular +* axis, starting at pixblc[]. Zero is interpreted as a +* unit increment. pixsamp may also be specified as a +* NULL pointer which is interpreted as all zeroes, i.e. +* unit increments on all axes. +* +* If negative, the grid size on the particular axis (the +* absolute value being rounded to the nearest integer). +* For example, if pixsamp is (-128.0,-128.0,...) then +* each axis will be sampled at 128 points between +* pixblc[] and pixtrc[] inclusive. Use caution when +* using this option on non-square images. +* +* Returned: +* nsamp int* The number of pixel coordinates sampled. +* +* Can be specified as a NULL pointer if not required. +* +* maxdis double[naxis] +* For each individual distortion function, the +* maximum absolute value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* maxtot double* For the combination of all distortion functions, the +* maximum absolute value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* avgdis double[naxis] +* For each individual distortion function, the +* mean value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* avgtot double* For the combination of all distortion functions, the +* mean value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* rmsdis double[naxis] +* For each individual distortion function, the +* root mean square deviation of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* rmstot double* For the combination of all distortion functions, the +* root mean square deviation of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null disprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid parameter. +* 4: Distort error. +* +* +* disprm struct - Distortion parameters +* ------------------------------------- +* The disprm struct contains all of the information required to apply a set of +* distortion functions. It consists of certain members that must be set by +* the user ("given") and others that are set by the WCSLIB routines +* ("returned"). While the addresses of the arrays themselves may be set by +* disinit() if it (optionally) allocates memory, their contents must be set by +* the user. +* +* int flag +* (Given and returned) This flag must be set to zero (or 1, see disset()) +* whenever any of the following disprm members are set or changed: +* +* - disprm::naxis, +* - disprm::dtype, +* - disprm::ndp, +* - disprm::dp. +* +* This signals the initialization routine, disset(), to recompute the +* returned members of the disprm struct. disset() will reset flag to +* indicate that this has been done. +* +* PLEASE NOTE: flag must be set to -1 when disinit() is called for the +* first time for a particular disprm struct in order to initialize memory +* management. It must ONLY be used on the first initialization otherwise +* memory leaks may result. +* +* int naxis +* (Given or returned) Number of pixel and world coordinate elements. +* +* If disinit() is used to initialize the disprm struct (as would normally +* be the case) then it will set naxis from the value passed to it as a +* function argument. The user should not subsequently modify it. +* +* char (*dtype)[72] +* (Given) Pointer to the first element of an array of char[72] containing +* the name of the distortion function for each axis. +* +* int ndp +* (Given) The number of entries in the disprm::dp[] array. +* +* int ndpmax +* (Given) The length of the disprm::dp[] array. +* +* ndpmax will be set by disinit() if it allocates memory for disprm::dp[], +* otherwise it must be set by the user. See also disndp(). +* +* struct dpkey dp +* (Given) Address of the first element of an array of length ndpmax of +* dpkey structs. +* +* As a FITS header parser encounters each DPja or DQia keyword it should +* load it into a dpkey struct in the array and increment ndp. However, +* note that a single disprm struct must hold only DPja or DQia keyvalues, +* not both. disset() interprets them as required by the particular +* distortion function. +* +* double *maxdis +* (Given) Pointer to the first element of an array of double specifying +* the maximum absolute value of the distortion for each axis computed over +* the whole image. +* +* It is not necessary to reset the disprm struct (via disset()) when +* disprm::maxdis is changed. +* +* double totdis +* (Given) The maximum absolute value of the combination of all distortion +* functions specified as an offset in pixel coordinates computed over the +* whole image. +* +* It is not necessary to reset the disprm struct (via disset()) when +* disprm::totdis is changed. +* +* int *docorr +* (Returned) Pointer to the first element of an array of int containing +* flags that indicate the mode of correction for each axis. +* +* If docorr is zero, the distortion function returns the corrected +* coordinates directly. Any other value indicates that the distortion +* function computes a correction to be added to pixel coordinates (prior +* distortion) or intermediate pixel coordinates (sequent distortion). +* +* int *Nhat +* (Returned) Pointer to the first element of an array of int containing +* the number of coordinate axes that form the independent variables of the +* distortion function for each axis. +* +* int **axmap +* (Returned) Pointer to the first element of an array of int* containing +* pointers to the first elements of the axis mapping arrays for each axis. +* +* An axis mapping associates the independent variables of a distortion +* function with the 0-relative image axis number. For example, consider +* an image with a spectrum on the first axis (axis 0), followed by RA +* (axis 1), Dec (axis2), and time (axis 3) axes. For a distortion in +* (RA,Dec) and no distortion on the spectral or time axes, the axis +* mapping arrays, axmap[j][], would be +* += j=0: [-1, -1, -1, -1] ...no distortion on spectral axis, += 1: [ 1, 2, -1, -1] ...RA distortion depends on RA and Dec, += 2: [ 2, 1, -1, -1] ...Dec distortion depends on Dec and RA, += 3: [-1, -1, -1, -1] ...no distortion on time axis, +* +* where -1 indicates that there is no corresponding independent +* variable. +* +* double **offset +* (Returned) Pointer to the first element of an array of double* +* containing pointers to the first elements of arrays of offsets used to +* renormalize the independent variables of the distortion function for +* each axis. +* +* The offsets are subtracted from the independent variables before +* scaling. +* +* double **scale +* (Returned) Pointer to the first element of an array of double* +* containing pointers to the first elements of arrays of scales used to +* renormalize the independent variables of the distortion function for +* each axis. +* +* The scale is applied to the independent variables after the offsets are +* subtracted. +* +* int **iparm +* (Returned) Pointer to the first element of an array of int* +* containing pointers to the first elements of the arrays of integer +* distortion parameters for each axis. +* +* double **dparm +* (Returned) Pointer to the first element of an array of double* +* containing pointers to the first elements of the arrays of floating +* point distortion parameters for each axis. +* +* int i_naxis +* (Returned) Dimension of the internal arrays (normally equal to naxis). +* +* int ndis +* (Returned) The number of distortion functions. +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* int (**disp2x)(DISP2X_ARGS) +* (For internal use only.) +* int (**disx2p)(DISX2P_ARGS) +* (For internal use only.) +* int m_flag +* (For internal use only.) +* int m_naxis +* (For internal use only.) +* char (*m_dtype)[72] +* (For internal use only.) +* double **m_dp +* (For internal use only.) +* double *m_maxdis +* (For internal use only.) +* +* +* dpkey struct - Store for DPja and DQia keyvalues +* ------------------------------------------------ +* The dpkey struct is used to pass the parsed contents of DPja or DQia +* keyrecords to disset() via the disprm struct. A disprm struct must hold +* only DPja or DQia keyvalues, not both. +* +* All members of this struct are to be set by the user. +* +* char field[72] +* (Given) The full field name of the record, including the keyword name. +* Note that the colon delimiter separating the field name and the value in +* record-valued keyvalues is not part of the field name. For example, in +* the following: +* += DP3A = 'AXIS.1: 2' +* +* the full record field name is "DP3A.AXIS.1", and the record's value +* is 2. +* +* int j +* (Given) Axis number (1-relative), i.e. the j in DPja or i in DQia. +* +* int type +* (Given) The data type of the record's value +* - 0: Integer (stored as an int), +* - 1: Floating point (stored as a double). +* +* union value +* (Given) A union comprised of +* - dpkey::i, +* - dpkey::f, +* +* the record's value. +* +* +* Global variable: const char *dis_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_DIS +#define WCSLIB_DIS + +#ifdef __cplusplus +extern "C" { +#endif + +enum disenq_enum { + DISENQ_MEM = 1, // disprm struct memory is managed by WCSLIB. + DISENQ_SET = 2, // disprm struct has been set up. + DISENQ_BYP = 4, // disprm struct is in bypass mode. +}; + +extern const char *dis_errmsg[]; + +enum dis_errmsg_enum { + DISERR_SUCCESS = 0, // Success. + DISERR_NULL_POINTER = 1, // Null disprm pointer passed. + DISERR_MEMORY = 2, // Memory allocation failed. + DISERR_BAD_PARAM = 3, // Invalid parameter value. + DISERR_DISTORT = 4, // Distortion error. + DISERR_DEDISTORT = 5 // De-distortion error. +}; + +// For use in declaring distortion function prototypes (= DISX2P_ARGS). +#define DISP2X_ARGS int inverse, const int iparm[], const double dparm[], \ +int ncrd, const double rawcrd[], double *discrd + +// For use in declaring de-distortion function prototypes (= DISP2X_ARGS). +#define DISX2P_ARGS int inverse, const int iparm[], const double dparm[], \ +int ncrd, const double discrd[], double *rawcrd + + +// Struct used for storing DPja and DQia keyvalues. +struct dpkey { + char field[72]; // Full record field name (no colon). + int j; // Axis number, as in DPja (1-relative). + int type; // Data type of value. + union { + int i; // Integer record value. + double f; // Floating point record value. + } value; // Record value. +}; + +// Size of the dpkey struct in int units, used by the Fortran wrappers. +#define DPLEN (sizeof(struct dpkey)/sizeof(int)) + + +struct disprm { + // Initialization flag (see the prologue above). + //-------------------------------------------------------------------------- + int flag; // Set to zero to force initialization. + + // Parameters to be provided (see the prologue above). + //-------------------------------------------------------------------------- + int naxis; // The number of pixel coordinate elements, + // given by NAXIS. + char (*dtype)[72]; // For each axis, the distortion type. + int ndp; // Number of DPja or DQia keywords, and the + int ndpmax; // number for which space was allocated. + struct dpkey *dp; // DPja or DQia keyvalues (not both). + double totdis; // The maximum combined distortion. + double *maxdis; // For each axis, the maximum distortion. + + // Information derived from the parameters supplied. + //-------------------------------------------------------------------------- + int *docorr; // For each axis, the mode of correction. + int *Nhat; // For each axis, the number of coordinate + // axes that form the independent variables + // of the distortion function. + int **axmap; // For each axis, the axis mapping array. + double **offset; // For each axis, renormalization offsets. + double **scale; // For each axis, renormalization scales. + int **iparm; // For each axis, the array of integer + // distortion parameters. + double **dparm; // For each axis, the array of floating + // point distortion parameters. + int i_naxis; // Dimension of the internal arrays. + int ndis; // The number of distortion functions. + + // Error messaging, if enabled. + //-------------------------------------------------------------------------- + struct wcserr *err; + + //-------------------------------------------------------------------------- + // Private - the remainder are for internal use. + //-------------------------------------------------------------------------- + int (**disp2x)(DISP2X_ARGS); // For each axis, pointers to the + int (**disx2p)(DISX2P_ARGS); // distortion function and its inverse. + + int m_flag, m_naxis; // The remainder are for memory management. + char (*m_dtype)[72]; + struct dpkey *m_dp; + double *m_maxdis; +}; + +// Size of the disprm struct in int units, used by the Fortran wrappers. +#define DISLEN (sizeof(struct disprm)/sizeof(int)) + + +int disndp(int n); + +int dpfill(struct dpkey *dp, const char *keyword, const char *field, int j, + int type, int i, double f); + +int dpkeyi(const struct dpkey *dp); + +double dpkeyd(const struct dpkey *dp); + +int disini(int alloc, int naxis, struct disprm *dis); + +int disinit(int alloc, int naxis, struct disprm *dis, int ndpmax); + +int discpy(int alloc, const struct disprm *dissrc, struct disprm *disdst); + +int disfree(struct disprm *dis); + +int dissize(const struct disprm *dis, int sizes[2]); + +int disenq(const struct disprm *dis, int enquiry); + +int disprt(const struct disprm *dis); + +int disperr(const struct disprm *dis, const char *prefix); + +int dishdo(struct disprm *dis); + +int disset(struct disprm *dis); + +int disp2x(struct disprm *dis, const double rawcrd[], double discrd[]); + +int disx2p(struct disprm *dis, const double discrd[], double rawcrd[]); + +int diswarp(struct disprm *dis, const double pixblc[], const double pixtrc[], + const double pixsamp[], int *nsamp, + double maxdis[], double *maxtot, + double avgdis[], double *avgtot, + double rmsdis[], double *rmstot); + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_DIS diff --git a/deps/wcslib/C/fitshdr.c b/deps/wcslib/C/fitshdr.c new file mode 100644 index 0000000..2694258 --- /dev/null +++ b/deps/wcslib/C/fitshdr.c @@ -0,0 +1,12372 @@ +#line 1 "fitshdr.c" + +#line 3 "fitshdr.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define fitshdr_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer fitshdr_create_buffer +#endif + +#ifdef yy_delete_buffer +#define fitshdr_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer fitshdr_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define fitshdr_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer fitshdr_scan_buffer +#endif + +#ifdef yy_scan_string +#define fitshdr_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string fitshdr_scan_string +#endif + +#ifdef yy_scan_bytes +#define fitshdr_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes fitshdr_scan_bytes +#endif + +#ifdef yy_init_buffer +#define fitshdr_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer fitshdr_init_buffer +#endif + +#ifdef yy_flush_buffer +#define fitshdr_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer fitshdr_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define fitshdr_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state fitshdr_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define fitshdr_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer fitshdr_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define fitshdrpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state fitshdrpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define fitshdrpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state fitshdrpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define fitshdrensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack fitshdrensure_buffer_stack +#endif + +#ifdef yylex +#define fitshdrlex_ALREADY_DEFINED +#else +#define yylex fitshdrlex +#endif + +#ifdef yyrestart +#define fitshdrrestart_ALREADY_DEFINED +#else +#define yyrestart fitshdrrestart +#endif + +#ifdef yylex_init +#define fitshdrlex_init_ALREADY_DEFINED +#else +#define yylex_init fitshdrlex_init +#endif + +#ifdef yylex_init_extra +#define fitshdrlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra fitshdrlex_init_extra +#endif + +#ifdef yylex_destroy +#define fitshdrlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy fitshdrlex_destroy +#endif + +#ifdef yyget_debug +#define fitshdrget_debug_ALREADY_DEFINED +#else +#define yyget_debug fitshdrget_debug +#endif + +#ifdef yyset_debug +#define fitshdrset_debug_ALREADY_DEFINED +#else +#define yyset_debug fitshdrset_debug +#endif + +#ifdef yyget_extra +#define fitshdrget_extra_ALREADY_DEFINED +#else +#define yyget_extra fitshdrget_extra +#endif + +#ifdef yyset_extra +#define fitshdrset_extra_ALREADY_DEFINED +#else +#define yyset_extra fitshdrset_extra +#endif + +#ifdef yyget_in +#define fitshdrget_in_ALREADY_DEFINED +#else +#define yyget_in fitshdrget_in +#endif + +#ifdef yyset_in +#define fitshdrset_in_ALREADY_DEFINED +#else +#define yyset_in fitshdrset_in +#endif + +#ifdef yyget_out +#define fitshdrget_out_ALREADY_DEFINED +#else +#define yyget_out fitshdrget_out +#endif + +#ifdef yyset_out +#define fitshdrset_out_ALREADY_DEFINED +#else +#define yyset_out fitshdrset_out +#endif + +#ifdef yyget_leng +#define fitshdrget_leng_ALREADY_DEFINED +#else +#define yyget_leng fitshdrget_leng +#endif + +#ifdef yyget_text +#define fitshdrget_text_ALREADY_DEFINED +#else +#define yyget_text fitshdrget_text +#endif + +#ifdef yyget_lineno +#define fitshdrget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno fitshdrget_lineno +#endif + +#ifdef yyset_lineno +#define fitshdrset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno fitshdrset_lineno +#endif + +#ifdef yyget_column +#define fitshdrget_column_ALREADY_DEFINED +#else +#define yyget_column fitshdrget_column +#endif + +#ifdef yyset_column +#define fitshdrset_column_ALREADY_DEFINED +#else +#define yyset_column fitshdrset_column +#endif + +#ifdef yywrap +#define fitshdrwrap_ALREADY_DEFINED +#else +#define yywrap fitshdrwrap +#endif + +#ifdef yyalloc +#define fitshdralloc_ALREADY_DEFINED +#else +#define yyalloc fitshdralloc +#endif + +#ifdef yyrealloc +#define fitshdrrealloc_ALREADY_DEFINED +#else +#define yyrealloc fitshdrrealloc +#endif + +#ifdef yyfree +#define fitshdrfree_ALREADY_DEFINED +#else +#define yyfree fitshdrfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define fitshdrwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16 + }, + + { + 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 18, 17, 17, 17, 17, 17, 17, 17, + + 17, 17, 17, 17, 17, 19, 17, 17, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 17, 17, + 17, 17, 17, 17, 17, 19, 19, 20, 19, 21, + 19, 19, 22, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 17, 17, 17, 17, 19, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17 + }, + + { + 15, 23, 23, 23, 23, 23, 23, 23, 23, 23, + + 16, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 24, 23, 23, 23, 23, 23, 23, 25, + 26, 23, 23, 27, 23, 27, 28, 29, 30, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23 + }, + + { + 15, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 16, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 24, 23, 23, 23, 23, 23, 23, 25, + 26, 23, 23, 27, 23, 27, 28, 29, 30, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, + + 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23 + }, + + { + 15, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 35, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 36, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33 + }, + + { + 15, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 35, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 36, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33 + }, + + { + 15, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 16, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + + 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37 + }, + + { + 15, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 16, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37 + }, + + { + 15, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 16, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39 + + }, + + { + 15, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 16, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39 + }, + + { + 15, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40 + }, + + { + 15, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40 + }, + + { + 15, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + 15, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15 + }, + + { + 15, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -17, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -18, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 44, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -19, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -20, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -21, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + + 46, 46, 46, 46, 46, 46, 46, 46, 48, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -22, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + 46, 46, 46, 49, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23 + }, + + { + 15, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, 50, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, 51, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24 + }, + + { + 15, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52 + }, + + { + 15, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, 54, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, 55, -26, 55, 56, -26, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26 + }, + + { + 15, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, 58, -27, 59, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27 + }, + + { + 15, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, -28, -28, + + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28 + }, + + { + 15, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29 + + }, + + { + 15, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, 62, -30, 63, 64, + 64, 64, 64, 64, 64, 64, 64, 64, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, 65, 65, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + + 65, 65, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30 + }, + + { + 15, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, 62, -31, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, 65, 65, + + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + 65, 65, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31 + }, + + { + 15, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32 + }, + + { + 15, -33, -33, -33, -33, -33, -33, -33, -33, -33, + + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33 + }, + + { + 15, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34 + }, + + { + 15, -35, -35, -35, -35, -35, -35, -35, -35, -35, + 67, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, 68, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, 69, -35, -35, + + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35 + }, + + { + 15, -36, -36, -36, -36, -36, -36, -36, -36, -36, + 70, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, 71, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36 + }, + + { + 15, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37 + }, + + { + 15, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, 72, -38, -38, -38, -38, -38, -38, -38, + 72, 72, 72, 72, -38, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, -38, -38, + + -38, -38, -38, -38, -38, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, -38, -38, -38, 72, -38, -38, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, -38, -38, -38, -38, -38 + }, + + { + 15, 73, 73, 73, 73, 73, 73, 73, 73, 73, + -39, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73 + + }, + + { + 15, 74, 74, 74, 74, 74, 74, 74, 74, 74, + -40, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74 + }, + + { + 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75 + }, + + { + 15, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + -43, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -44, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 78, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -45, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 79, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -46, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -47, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 82, 83, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -48, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + + 77, 77, 77, 77, 77, 81, 81, 81, 84, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -49, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 85, 81, 81, 81, 81, 81, 81, + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + + }, + + { + 15, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, 50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, 51, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50 + }, + + { + 15, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51 + }, + + { + 15, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, + + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52 + }, + + { + 15, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, 52, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53 + }, + + { + 15, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, 54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, 55, -54, 55, 56, -54, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54 + }, + + { + 15, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, 56, -55, 57, 57, + + 57, 57, 57, 57, 57, 57, 57, 57, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55 + }, + + { + 15, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56 + }, + + { + 15, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, 87, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, 88, -57, 89, -57, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, 91, 91, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + 91, 91, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57 + }, + + { + 15, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, -58, -58, + + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58 + }, + + { + 15, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, 62, -59, 63, 64, + 64, 64, 64, 64, 64, 64, 64, 64, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, 65, 65, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + 65, 65, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59 + + }, + + { + 15, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, 62, -60, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, 65, 65, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + + 65, 65, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60 + }, + + { + 15, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, 65, 65, + + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + 65, 65, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61 + }, + + { + 15, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + + -62, -62, -62, -62, -62, -62, -62, -62, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, 65, 65, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + 65, 65, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62 + }, + + { + 15, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, 62, -63, 93, 94, + 94, 94, 94, 94, 94, 94, 94, 94, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, 65, 65, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + 65, 65, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63 + }, + + { + 15, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, 62, -64, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, 65, 65, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + 65, 65, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64 + }, + + { + 15, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, 96, -65, 96, -65, -65, 97, 97, + + 97, 97, 97, 97, 97, 97, 97, 97, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65 + }, + + { + 15, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, 62, -66, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, 65, 65, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + 65, 65, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66 + }, + + { + 15, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67 + }, + + { + 15, -68, -68, -68, -68, -68, -68, -68, -68, -68, + 67, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, 68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, 69, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68 + }, + + { + 15, -69, -69, -69, -69, -69, -69, -69, -69, -69, + 70, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, 71, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69 + + }, + + { + 15, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70 + }, + + { + 15, -71, -71, -71, -71, -71, -71, -71, -71, -71, + 70, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, 71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71 + }, + + { + 15, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, 72, -72, -72, -72, -72, -72, -72, -72, + + 72, 72, 72, 72, -72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, -72, -72, + -72, -72, -72, -72, -72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, -72, -72, 99, 72, -72, -72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, -72, -72, -72, -72, -72 + }, + + { + 15, 73, 73, 73, 73, 73, 73, 73, 73, 73, + + -73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73 + }, + + { + 15, 74, 74, 74, 74, 74, 74, 74, 74, 74, + -74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74 + }, + + { + 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75 + }, + + { + 15, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -77, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -78, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -79, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 102, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -80, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 103, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -81, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -82, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 106, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + -83, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 107, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -84, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 108, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -85, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 109, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, 110, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, 111, -86, -86, -86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, 91, 91, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + 91, 91, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86 + }, + + { + 15, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, 87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, 88, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 15, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, 112, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, 113, -88, 113, 114, -88, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, -88, -88, + + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88 + }, + + { + 15, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, 110, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, 111, -89, -89, -89, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, 91, 91, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + 91, 91, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89 + + }, + + { + 15, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, 87, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, 88, -90, 89, -90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, 91, 91, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + + 91, 91, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 15, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, 117, -91, 117, -91, -91, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91 + }, + + { + 15, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, 65, 65, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + 65, 65, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92 + }, + + { + 15, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, 62, -93, 119, 120, + 120, 120, 120, 120, 120, 120, 120, 120, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, 65, 65, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + 65, 65, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 15, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, 62, -94, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, 65, 65, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + 65, 65, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94 + }, + + { + 15, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, 62, -95, 122, 122, + + 122, 122, 122, 122, 122, 122, 122, 122, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, 65, 65, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + 65, 65, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95 + }, + + { + 15, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96 + }, + + { + 15, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97 + }, + + { + 15, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, 62, -98, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, -98, -98, + + -98, -98, -98, -98, -98, -98, -98, -98, 65, 65, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + 65, 65, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98 + }, + + { + 15, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99 + + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -100, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -101, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 125, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -102, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 126, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + -103, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 127, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -104, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 128, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -105, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -106, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 131, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -107, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, + 130, 130, 130, 132, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -108, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 133, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -109, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 134, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + + }, + + { + 15, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, 110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, 111, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110 + }, + + { + 15, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, 135, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, 136, -111, 136, 114, -111, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111 + }, + + { + 15, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, 112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, 113, -112, 113, 114, -112, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112 + }, + + { + 15, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, 114, -113, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113 + }, + + { + 15, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114 + }, + + { + 15, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, 139, -115, -115, -115, -115, -115, -115, -115, + -115, 140, -115, -115, -115, -115, 141, -115, 142, 142, + + 142, 142, 142, 142, 142, 142, 142, 142, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, 143, 143, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + 143, 143, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115 + }, + + { + 15, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, 110, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, 111, -116, -116, -116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, 91, 91, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + 91, 91, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116 + }, + + { + 15, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117 + }, + + { + 15, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, 110, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, 111, -118, -118, -118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, -118, -118, + + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118 + }, + + { + 15, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, 62, -119, 144, 145, + 145, 145, 145, 145, 145, 145, 145, 145, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, 65, 65, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + 65, 65, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119 + + }, + + { + 15, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, 62, -120, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, 65, 65, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + + 65, 65, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120 + }, + + { + 15, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, 62, -121, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, 65, 65, + + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + 65, 65, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121 + }, + + { + 15, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, 62, -122, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, 65, 65, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + 65, 65, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122 + }, + + { + 15, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, 62, -123, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, 65, 65, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + 65, 65, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -124, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -125, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 151, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -126, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 152, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -127, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 153, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -128, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 154, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -129, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 155, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -130, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -131, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + + 157, 157, 157, 157, 157, 157, 157, 157, 158, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -132, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 159, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + -133, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 160, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -134, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + + 157, 157, 161, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, 135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, 136, -135, 136, 114, -135, 137, 137, + + 137, 137, 137, 137, 137, 137, 137, 137, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135 + }, + + { + 15, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, 114, -136, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136 + }, + + { + 15, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, 162, -137, -137, -137, -137, -137, -137, -137, + -137, 163, -137, -137, -137, -137, 141, -137, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, 143, 143, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + 143, 143, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137 + }, + + { + 15, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, 162, -138, -138, -138, -138, -138, -138, -138, + -138, 163, -138, -138, -138, -138, -138, -138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, -138, -138, + + -138, -138, -138, -138, -138, -138, -138, -138, 143, 143, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + 143, 143, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138 + }, + + { + 15, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + + -139, -139, 139, -139, -139, -139, -139, -139, -139, -139, + -139, 140, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139 + + }, + + { + 15, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140 + }, + + { + 15, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, 162, -141, -141, -141, -141, -141, -141, -141, + -141, 163, -141, -141, -141, -141, -141, -141, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, 143, 143, + + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + 143, 143, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141 + }, + + { + 15, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, 139, -142, -142, -142, -142, -142, -142, -142, + + -142, 140, -142, -142, -142, -142, 141, -142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, 143, 143, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + 143, 143, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142 + }, + + { + 15, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, 166, -143, 166, -143, -143, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143 + }, + + { + 15, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, 62, -144, 168, 169, + 169, 169, 169, 169, 169, 169, 169, 169, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, 65, 65, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + 65, 65, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144 + }, + + { + 15, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, 62, -145, 170, 170, + + 170, 170, 170, 170, 170, 170, 170, 170, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, 65, 65, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + 65, 65, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145 + }, + + { + 15, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, 62, -146, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, 65, 65, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + 65, 65, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146 + }, + + { + 15, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, 62, -147, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, 65, 65, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + 65, 65, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147 + }, + + { + 15, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, 62, -148, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 173, -148, -148, + + -148, -148, -148, -148, -148, -148, -148, -148, 65, 65, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + 65, 65, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148 + }, + + { + 15, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, 62, -149, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, 65, 65, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + 65, 65, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149 + + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -150, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -151, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 176, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -152, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 177, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + -153, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 178, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -154, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 179, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -155, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 180, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -156, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 181, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -157, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -158, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 184, 183, 183, 183, 183, 183, + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -159, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 185, 183, 183, 183, 183, + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -160, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 186, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -161, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, 162, -162, -162, -162, -162, -162, -162, -162, + + -162, 163, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162 + }, + + { + 15, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163 + }, + + { + 15, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, 162, -164, -164, -164, -164, -164, -164, -164, + -164, 163, -164, -164, -164, -164, 141, -164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, 143, 143, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + 143, 143, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164 + }, + + { + 15, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, 162, -165, -165, -165, -165, -165, -165, -165, + -165, 163, -165, -165, -165, -165, -165, -165, 165, 165, + + 165, 165, 165, 165, 165, 165, 165, 165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, 143, 143, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + 143, 143, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165 + }, + + { + 15, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166 + }, + + { + 15, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, 162, -167, -167, -167, -167, -167, -167, -167, + -167, 163, -167, -167, -167, -167, -167, -167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167 + }, + + { + 15, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, 62, -168, 187, 188, + 188, 188, 188, 188, 188, 188, 188, 188, -168, -168, + + -168, -168, -168, -168, -168, -168, -168, -168, 65, 65, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + 65, 65, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168 + }, + + { + 15, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, 62, -169, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, 65, 65, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + 65, 65, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169 + + }, + + { + 15, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, 62, -170, 190, 190, + 190, 190, 190, 190, 190, 190, 190, 190, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, 65, 65, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + + 65, 65, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170 + }, + + { + 15, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, 62, -171, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, 65, 65, + + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + 65, 65, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171 + }, + + { + 15, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, 62, -172, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, 65, 65, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + 65, 65, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172 + }, + + { + 15, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, 62, -173, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, 65, 65, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + 65, 65, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173 + }, + + { + 15, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, 62, -174, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, 65, 65, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + 65, 65, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -175, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -176, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 196, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -177, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -178, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -179, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -180, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -181, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -182, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + -183, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, + 195, 195, 195, 195, 195, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -184, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, + 195, 195, 195, 195, 195, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -185, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, + + 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, + 195, 195, 195, 195, 195, 197, 197, 197, 197, 199, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -186, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 200, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, 62, -187, 201, 202, + 202, 202, 202, 202, 202, 202, 202, 202, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, 65, 65, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + 65, 65, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187 + }, + + { + 15, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, 62, -188, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, -188, -188, + + -188, -188, -188, -188, -188, -188, -188, -188, 65, 65, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + 65, 65, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188 + }, + + { + 15, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, 62, -189, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, 65, 65, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + 65, 65, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189 + + }, + + { + 15, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, 62, -190, 205, 205, + 205, 205, 205, 205, 205, 205, 205, 205, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, 65, 65, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + + 65, 65, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190 + }, + + { + 15, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, 62, -191, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, 65, 65, + + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + 65, 65, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191 + }, + + { + 15, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, 62, -192, 207, 207, + 207, 207, 207, 207, 207, 207, 207, 207, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, 65, 65, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 65, 65, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192 + }, + + { + 15, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, 62, -193, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, 65, 65, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + 65, 65, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193 + }, + + { + 15, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, 62, -194, 209, 209, + 209, 209, 209, 209, 209, 209, 209, 209, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, 65, 65, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + 65, 65, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194 + }, + + { + 15, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, 210, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195 + }, + + { + 15, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, 211, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, 210, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196 + }, + + { + 15, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, 212, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197 + }, + + { + 15, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + + -198, 212, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198 + }, + + { + 15, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, 213, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, 212, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199 + + }, + + { + 15, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, 214, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, 215, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200 + }, + + { + 15, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, 62, -201, 216, 217, + 217, 217, 217, 217, 217, 217, 217, 217, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, 65, 65, + + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + 65, 65, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201 + }, + + { + 15, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, 62, -202, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, 65, 65, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + 65, 65, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202 + }, + + { + 15, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, 62, -203, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, 65, 65, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + 65, 65, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203 + }, + + { + 15, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, 62, -204, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, 65, 65, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + 65, 65, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204 + }, + + { + 15, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, 62, -205, 221, 221, + + 221, 221, 221, 221, 221, 221, 221, 221, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, 65, 65, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + 65, 65, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205 + }, + + { + 15, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, 62, -206, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, 65, 65, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + 65, 65, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206 + }, + + { + 15, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, 62, -207, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, 65, 65, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + 65, 65, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207 + }, + + { + 15, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, 62, -208, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, -208, -208, + + -208, -208, -208, -208, -208, -208, -208, -208, 65, 65, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + 65, 65, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208 + }, + + { + 15, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, 62, -209, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 65, 65, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + 65, 65, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209 + + }, + + { + 15, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, 226, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210 + }, + + { + 15, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, 227, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211 + }, + + { + 15, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, 228, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212 + }, + + { + 15, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, 229, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 + }, + + { + 15, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, 230, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214 + }, + + { + 15, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, 231, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215 + }, + + { + 15, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, 62, -216, 232, 233, + 233, 233, 233, 233, 233, 233, 233, 233, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, 65, 65, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + 65, 65, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216 + }, + + { + 15, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, 62, -217, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, 65, 65, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + 65, 65, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217 + }, + + { + 15, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, 62, -218, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, -218, -218, + + -218, -218, -218, -218, -218, -218, -218, -218, 65, 65, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + 65, 65, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218 + }, + + { + 15, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, 62, -219, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, 65, 65, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + 65, 65, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219 + + }, + + { + 15, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, 62, -220, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, 65, 65, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + + 65, 65, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220 + }, + + { + 15, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, 62, -221, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, 65, 65, + + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + 65, 65, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221 + }, + + { + 15, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + + -222, -222, -222, -222, -222, -222, 62, -222, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, 65, 65, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + 65, 65, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222 + }, + + { + 15, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, 62, -223, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, 65, 65, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + 65, 65, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223 + }, + + { + 15, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, 62, -224, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, 65, 65, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + 65, 65, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224 + }, + + { + 15, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, 62, -225, 242, 242, + + 242, 242, 242, 242, 242, 242, 242, 242, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, 65, 65, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + 65, 65, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225 + }, + + { + 15, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, 226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226 + }, + + { + 15, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, 243, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227 + }, + + { + 15, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, 228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228 + }, + + { + 15, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + + -229, -229, 213, -229, -229, -229, -229, -229, -229, 244, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229 + + }, + + { + 15, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, 245, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230 + }, + + { + 15, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, 231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231 + }, + + { + 15, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + + -232, -232, -232, -232, -232, -232, 62, -232, 246, 247, + 247, 247, 247, 247, 247, 247, 247, 247, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, 65, 65, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + 65, 65, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232 + }, + + { + 15, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, 62, -233, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 65, 65, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + 65, 65, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233 + }, + + { + 15, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, 62, -234, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, 65, 65, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + 65, 65, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234 + }, + + { + 15, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, 62, -235, 250, 250, + + 250, 250, 250, 250, 250, 250, 250, 250, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, 65, 65, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + 65, 65, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235 + }, + + { + 15, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, 62, -236, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, 65, 65, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + 65, 65, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236 + }, + + { + 15, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, 62, -237, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, 65, 65, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + 65, 65, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237 + }, + + { + 15, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, 62, -238, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, -238, -238, + + -238, -238, -238, -238, -238, -238, -238, -238, 65, 65, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + 65, 65, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238 + }, + + { + 15, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, 62, -239, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 65, 65, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + 65, 65, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239 + + }, + + { + 15, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, 62, -240, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, 65, 65, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + + 65, 65, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240 + }, + + { + 15, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, 62, -241, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, 65, 65, + + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + 65, 65, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241 + }, + + { + 15, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + + -242, -242, -242, -242, -242, -242, 62, -242, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, 65, 65, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + 65, 65, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242 + }, + + { + 15, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, 258, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243 + }, + + { + 15, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259 + }, + + { + 15, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, 261, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245 + }, + + { + 15, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, 62, -246, 262, 263, + 263, 263, 263, 263, 263, 263, 263, 263, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, 65, 65, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + 65, 65, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246 + }, + + { + 15, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, 62, -247, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, 65, 65, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + 65, 65, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247 + }, + + { + 15, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, 62, -248, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, -248, -248, + + -248, -248, -248, -248, -248, -248, -248, -248, 65, 65, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + 65, 65, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248 + }, + + { + 15, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, 62, -249, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, 65, 65, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + 65, 65, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249 + + }, + + { + 15, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, 62, -250, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 65, 65, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + + 65, 65, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250 + }, + + { + 15, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, 62, -251, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, 65, 65, + + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + 65, 65, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251 + }, + + { + 15, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + + -252, -252, -252, -252, -252, -252, 62, -252, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, 65, 65, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + 65, 65, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252 + }, + + { + 15, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, 62, -253, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, 65, 65, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + 65, 65, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253 + }, + + { + 15, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, 62, -254, 271, 271, + 271, 271, 271, 271, 271, 271, 271, 271, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, 65, 65, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + 65, 65, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254 + }, + + { + 15, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, 62, -255, 272, 272, + + 272, 272, 272, 272, 272, 272, 272, 272, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, 65, 65, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + 65, 65, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255 + }, + + { + 15, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, 62, -256, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, 65, 65, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + 65, 65, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256 + }, + + { + 15, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, 62, -257, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, 65, 65, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + 65, 65, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257 + }, + + { + 15, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, 275, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258 + }, + + { + 15, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + + 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259 + + }, + + { + 15, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, 259, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260 + }, + + { + 15, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, 276, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261 + }, + + { + 15, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + + -262, -262, -262, -262, -262, -262, 62, -262, 277, 278, + 278, 278, 278, 278, 278, 278, 278, 278, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, 65, 65, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + 65, 65, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262 + }, + + { + 15, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, 62, -263, 279, 279, + 279, 279, 279, 279, 279, 279, 279, 279, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, 65, 65, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + 65, 65, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263 + }, + + { + 15, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, 62, -264, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, 65, 65, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + 65, 65, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264 + }, + + { + 15, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, 62, -265, 281, 281, + + 281, 281, 281, 281, 281, 281, 281, 281, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, 65, 65, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + 65, 65, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265 + }, + + { + 15, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, 62, -266, 282, 282, + 282, 282, 282, 282, 282, 282, 282, 282, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, 65, 65, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + 65, 65, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266 + }, + + { + 15, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, 62, -267, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 65, 65, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + 65, 65, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267 + }, + + { + 15, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, 62, -268, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, -268, -268, + + -268, -268, -268, -268, -268, -268, -268, -268, 65, 65, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + 65, 65, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268 + }, + + { + 15, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, 62, -269, 285, 285, + 285, 285, 285, 285, 285, 285, 285, 285, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, 65, 65, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + 65, 65, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269 + + }, + + { + 15, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, 62, -270, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, 65, 65, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + + 65, 65, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270 + }, + + { + 15, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, 62, -271, 287, 287, + 287, 287, 287, 287, 287, 287, 287, 287, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 65, 65, + + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + 65, 65, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271 + }, + + { + 15, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + + -272, -272, -272, -272, -272, -272, 62, -272, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, 65, 65, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + 65, 65, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272 + }, + + { + 15, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, 62, -273, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, 65, 65, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + 65, 65, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273 + }, + + { + 15, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, 62, -274, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, 65, 65, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + 65, 65, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274 + }, + + { + 15, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, 291, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275 + }, + + { + 15, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, 292, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276 + }, + + { + 15, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, 62, -277, 293, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, 65, 65, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + 65, 65, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277 + }, + + { + 15, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, 62, -278, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, -278, -278, + + -278, -278, -278, -278, -278, -278, -278, -278, 65, 65, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + 65, 65, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278 + }, + + { + 15, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, 62, -279, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, 65, 65, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + 65, 65, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279 + + }, + + { + 15, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, 62, -280, 297, 297, + 297, 297, 297, 297, 297, 297, 297, 297, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 65, 65, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + + 65, 65, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280 + }, + + { + 15, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, 62, -281, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, 65, 65, + + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 65, 65, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281 + }, + + { + 15, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + + -282, -282, -282, -282, -282, -282, 62, -282, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, 65, 65, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + 65, 65, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282 + }, + + { + 15, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, 62, -283, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, 65, 65, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + 65, 65, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283 + }, + + { + 15, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, 62, -284, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, 65, 65, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + 65, 65, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 + }, + + { + 15, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, 62, -285, 302, 302, + + 302, 302, 302, 302, 302, 302, 302, 302, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, 65, 65, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + 65, 65, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285 + }, + + { + 15, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, 62, -286, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 65, 65, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + 65, 65, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286 + }, + + { + 15, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, 62, -287, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, 65, 65, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + 65, 65, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287 + }, + + { + 15, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, 62, -288, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, -288, -288, + + -288, -288, -288, -288, -288, -288, -288, -288, 65, 65, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + 65, 65, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288 + }, + + { + 15, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, 62, -289, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, 65, 65, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + 65, 65, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289 + + }, + + { + 15, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, 62, -290, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 307, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, 65, 65, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + + 65, 65, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290 + }, + + { + 15, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, 308, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291 + }, + + { + 15, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, 309, -292, -292, -292, -292, -292, -292, -292, + + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292 + }, + + { + 15, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, 62, -293, 310, 311, + 311, 311, 311, 311, 311, 311, 311, 311, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 65, 65, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 65, 65, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293 + }, + + { + 15, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, 62, -294, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, 65, 65, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + 65, 65, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294 + }, + + { + 15, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, 62, -295, 313, 313, + + 313, 313, 313, 313, 313, 313, 313, 313, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, 65, 65, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + 65, 65, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295 + }, + + { + 15, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, 62, -296, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, 65, 65, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + 65, 65, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296 + }, + + { + 15, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, 62, -297, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, 65, 65, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + 65, 65, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297 + }, + + { + 15, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, 62, -298, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, -298, -298, + + -298, -298, -298, -298, -298, -298, -298, -298, 65, 65, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + 65, 65, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298 + }, + + { + 15, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, 62, -299, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, 65, 65, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + 65, 65, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299 + + }, + + { + 15, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, 62, -300, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, 65, 65, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + + 65, 65, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300 + }, + + { + 15, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, 62, -301, 319, 319, + 319, 319, 319, 319, 319, 319, 319, 319, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, 65, 65, + + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + 65, 65, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301 + }, + + { + 15, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + + -302, -302, -302, -302, -302, -302, 62, -302, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, 65, 65, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + 65, 65, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302 + }, + + { + 15, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, 62, -303, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, 65, 65, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + 65, 65, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303 + }, + + { + 15, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, 62, -304, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, 65, 65, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + 65, 65, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304 + }, + + { + 15, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, 62, -305, 323, 323, + + 323, 323, 323, 323, 323, 323, 323, 323, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, 65, 65, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + 65, 65, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305 + }, + + { + 15, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, 62, -306, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, 65, 65, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + 65, 65, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306 + }, + + { + 15, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, 62, -307, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, 65, 65, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + 65, 65, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307 + }, + + { + 15, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, 326, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308 + }, + + { + 15, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + + -309, -309, 327, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309 + + }, + + { + 15, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, 62, -310, 328, 329, + 329, 329, 329, 329, 329, 329, 329, 329, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, 65, 65, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + + 65, 65, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310 + }, + + { + 15, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, 62, -311, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, 65, 65, + + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + 65, 65, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311 + }, + + { + 15, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + + -312, -312, -312, -312, -312, -312, 62, -312, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, 65, 65, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + 65, 65, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312 + }, + + { + 15, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, 62, -313, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, 65, 65, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + 65, 65, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313 + }, + + { + 15, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, 62, -314, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, 65, 65, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + 65, 65, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314 + }, + + { + 15, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, 62, -315, 334, 334, + + 334, 334, 334, 334, 334, 334, 334, 334, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, 65, 65, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + 65, 65, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315 + }, + + { + 15, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, 62, -316, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, 65, 65, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + 65, 65, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316 + }, + + { + 15, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, 62, -317, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, 65, 65, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + 65, 65, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317 + }, + + { + 15, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, 62, -318, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, -318, -318, + + -318, -318, -318, -318, -318, -318, -318, -318, 65, 65, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + 65, 65, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318 + }, + + { + 15, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, 62, -319, 338, 338, + 338, 338, 338, 338, 338, 338, 338, 338, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, 65, 65, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + 65, 65, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319 + + }, + + { + 15, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, 62, -320, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, 65, 65, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + + 65, 65, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320 + }, + + { + 15, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, 62, -321, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, 65, 65, + + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + 65, 65, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321 + }, + + { + 15, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + + -322, -322, -322, -322, -322, -322, 62, -322, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, 65, 65, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + 65, 65, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322 + }, + + { + 15, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, 62, -323, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, 65, 65, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + 65, 65, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323 + }, + + { + 15, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, 62, -324, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, 65, 65, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + 65, 65, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324 + }, + + { + 15, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, 62, -325, 344, 344, + + 344, 344, 344, 344, 344, 344, 344, 344, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, 65, 65, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + 65, 65, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325 + }, + + { + 15, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, 345, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326 + }, + + { + 15, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, 346, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327 + }, + + { + 15, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, 62, -328, 347, 348, + 348, 348, 348, 348, 348, 348, 348, 348, -328, -328, + + -328, -328, -328, -328, -328, -328, -328, -328, 65, 65, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + 65, 65, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328 + }, + + { + 15, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, 62, -329, 349, 349, + 349, 349, 349, 349, 349, 349, 349, 349, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, 65, 65, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + 65, 65, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329 + + }, + + { + 15, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, 62, -330, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, 65, 65, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + + 65, 65, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330 + }, + + { + 15, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, 62, -331, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, 65, 65, + + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + 65, 65, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331 + }, + + { + 15, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + + -332, -332, -332, -332, -332, -332, 62, -332, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, 65, 65, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + 65, 65, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332 + }, + + { + 15, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, 62, -333, 353, 353, + 353, 353, 353, 353, 353, 353, 353, 353, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, 65, 65, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + 65, 65, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333 + }, + + { + 15, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, 62, -334, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 354, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, 65, 65, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + 65, 65, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334 + }, + + { + 15, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, 62, -335, 355, 355, + + 355, 355, 355, 355, 355, 355, 355, 355, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, 65, 65, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + 65, 65, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335 + }, + + { + 15, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, 62, -336, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, 65, 65, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + 65, 65, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336 + }, + + { + 15, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, 62, -337, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, 65, 65, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + 65, 65, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337 + }, + + { + 15, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, 62, -338, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, -338, -338, + + -338, -338, -338, -338, -338, -338, -338, -338, 65, 65, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + 65, 65, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338 + }, + + { + 15, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, 62, -339, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, 65, 65, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + 65, 65, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339 + + }, + + { + 15, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, 62, -340, 360, 360, + 360, 360, 360, 360, 360, 360, 360, 360, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, 65, 65, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + + 65, 65, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340 + }, + + { + 15, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, 62, -341, 361, 361, + 361, 361, 361, 361, 361, 361, 361, 361, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, 65, 65, + + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + 65, 65, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341 + }, + + { + 15, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + + -342, -342, -342, -342, -342, -342, 62, -342, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, 65, 65, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + 65, 65, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342 + }, + + { + 15, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, 62, -343, 363, 363, + 363, 363, 363, 363, 363, 363, 363, 363, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, 65, 65, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + 65, 65, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343 + }, + + { + 15, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, 62, -344, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, 65, 65, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + 65, 65, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344 + }, + + { + 15, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, 365, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345 + }, + + { + 15, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, 366, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346 + }, + + { + 15, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, 62, -347, 367, 368, + 368, 368, 368, 368, 368, 368, 368, 368, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, 65, 65, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + 65, 65, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347 + }, + + { + 15, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, 62, -348, 369, 369, + 369, 369, 369, 369, 369, 369, 369, 369, -348, -348, + + -348, -348, -348, -348, -348, -348, -348, -348, 65, 65, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + 65, 65, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348 + }, + + { + 15, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, 62, -349, 370, 370, + 370, 370, 370, 370, 370, 370, 370, 370, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, 65, 65, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + 65, 65, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349 + + }, + + { + 15, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, 62, -350, 371, 371, + 371, 371, 371, 371, 371, 371, 371, 371, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, 65, 65, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + + 65, 65, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350 + }, + + { + 15, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, 62, -351, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, 65, 65, + + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + 65, 65, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351 + }, + + { + 15, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + + -352, -352, -352, -352, -352, -352, 62, -352, 373, 373, + 373, 373, 373, 373, 373, 373, 373, 373, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, 65, 65, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + 65, 65, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352 + }, + + { + 15, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, 62, -353, 374, 374, + 374, 374, 374, 374, 374, 374, 374, 374, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, 65, 65, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + 65, 65, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353 + }, + + { + 15, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, 62, -354, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, 65, 65, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + 65, 65, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354 + }, + + { + 15, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, 62, -355, 376, 376, + + 376, 376, 376, 376, 376, 376, 376, 376, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, 65, 65, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + 65, 65, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355 + }, + + { + 15, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, 62, -356, 377, 377, + 377, 377, 377, 377, 377, 377, 377, 377, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, 65, 65, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + 65, 65, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356 + }, + + { + 15, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, 62, -357, 378, 378, + 378, 378, 378, 378, 378, 378, 378, 378, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, 65, 65, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + 65, 65, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357 + }, + + { + 15, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, 62, -358, 379, 379, + 379, 379, 379, 379, 379, 379, 379, 379, -358, -358, + + -358, -358, -358, -358, -358, -358, -358, -358, 65, 65, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + 65, 65, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358 + }, + + { + 15, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, 62, -359, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, 65, 65, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + 65, 65, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359 + + }, + + { + 15, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, 62, -360, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, 65, 65, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + + 65, 65, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360 + }, + + { + 15, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, 62, -361, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, 65, 65, + + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + 65, 65, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361 + }, + + { + 15, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + + -362, -362, -362, -362, -362, -362, 62, -362, 383, 383, + 383, 383, 383, 383, 383, 383, 383, 383, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, 65, 65, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + 65, 65, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362 + }, + + { + 15, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, 62, -363, 384, 384, + 384, 384, 384, 384, 384, 384, 384, 384, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, 65, 65, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + 65, 65, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363 + }, + + { + 15, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, 62, -364, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, 65, 65, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + 65, 65, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364 + }, + + { + 15, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, 386, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365 + }, + + { + 15, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, 387, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366 + }, + + { + 15, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, 62, -367, 388, 389, + 389, 389, 389, 389, 389, 389, 389, 389, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, 65, 65, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + 65, 65, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367 + }, + + { + 15, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, 62, -368, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, -368, -368, + + -368, -368, -368, -368, -368, -368, -368, -368, 65, 65, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + 65, 65, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368 + }, + + { + 15, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, 62, -369, 391, 391, + 391, 391, 391, 391, 391, 391, 391, 391, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, 65, 65, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + 65, 65, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369 + + }, + + { + 15, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, 62, -370, 392, 392, + 392, 392, 392, 392, 392, 392, 392, 392, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, 65, 65, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + + 65, 65, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370 + }, + + { + 15, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, 62, -371, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, 65, 65, + + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + 65, 65, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371 + }, + + { + 15, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + + -372, -372, -372, -372, -372, -372, 62, -372, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, 65, 65, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + 65, 65, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372 + }, + + { + 15, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, 62, -373, 395, 395, + 395, 395, 395, 395, 395, 395, 395, 395, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, 65, 65, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + 65, 65, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373 + }, + + { + 15, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, 62, -374, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, 65, 65, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + 65, 65, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374 + }, + + { + 15, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, 62, -375, 397, 397, + + 397, 397, 397, 397, 397, 397, 397, 397, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, 65, 65, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + 65, 65, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375 + }, + + { + 15, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, 62, -376, 398, 398, + 398, 398, 398, 398, 398, 398, 398, 398, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, 65, 65, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + 65, 65, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376 + }, + + { + 15, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, 62, -377, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, 65, 65, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + 65, 65, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377 + }, + + { + 15, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, 62, -378, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, -378, -378, + + -378, -378, -378, -378, -378, -378, -378, -378, 65, 65, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + 65, 65, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378 + }, + + { + 15, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, 62, -379, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, 65, 65, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + 65, 65, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379 + + }, + + { + 15, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, 62, -380, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 402, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, 65, 65, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + + 65, 65, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380 + }, + + { + 15, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, 62, -381, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, 65, 65, + + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + 65, 65, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381 + }, + + { + 15, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + + -382, -382, -382, -382, -382, -382, 62, -382, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, 65, 65, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + 65, 65, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382 + }, + + { + 15, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, 62, -383, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, 65, 65, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + 65, 65, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383 + }, + + { + 15, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, 62, -384, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, 65, 65, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + 65, 65, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384 + }, + + { + 15, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, 62, -385, 407, 407, + + 407, 407, 407, 407, 407, 407, 407, 407, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, 65, 65, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + 65, 65, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385 + }, + + { + 15, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, 408, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386 + }, + + { + 15, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, 409, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387 + }, + + { + 15, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, 62, -388, 410, 411, + 411, 411, 411, 411, 411, 411, 411, 411, -388, -388, + + -388, -388, -388, -388, -388, -388, -388, -388, 65, 65, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + 65, 65, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388 + }, + + { + 15, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, 62, -389, 412, 412, + 412, 412, 412, 412, 412, 412, 412, 412, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, 65, 65, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + 65, 65, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389 + + }, + + { + 15, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, 62, -390, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, 65, 65, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + + 65, 65, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390 + }, + + { + 15, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, 62, -391, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, 65, 65, + + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + 65, 65, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391 + }, + + { + 15, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + + -392, -392, -392, -392, -392, -392, 62, -392, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, 65, 65, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + 65, 65, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392 + }, + + { + 15, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, 62, -393, 416, 416, + 416, 416, 416, 416, 416, 416, 416, 416, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, 65, 65, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + 65, 65, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393 + }, + + { + 15, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, 62, -394, 417, 417, + 417, 417, 417, 417, 417, 417, 417, 417, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, 65, 65, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + 65, 65, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394 + }, + + { + 15, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, 62, -395, 418, 418, + + 418, 418, 418, 418, 418, 418, 418, 418, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, 65, 65, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + 65, 65, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395 + }, + + { + 15, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, 62, -396, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, 65, 65, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + 65, 65, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396 + }, + + { + 15, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, 62, -397, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, 65, 65, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + 65, 65, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397 + }, + + { + 15, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, 62, -398, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, -398, -398, + + -398, -398, -398, -398, -398, -398, -398, -398, 65, 65, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + 65, 65, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398 + }, + + { + 15, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, 62, -399, 422, 422, + 422, 422, 422, 422, 422, 422, 422, 422, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, 65, 65, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + 65, 65, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399 + + }, + + { + 15, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, 62, -400, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, 65, 65, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + + 65, 65, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400 + }, + + { + 15, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, 62, -401, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 424, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, 65, 65, + + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + 65, 65, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401 + }, + + { + 15, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + + -402, -402, -402, -402, -402, -402, 62, -402, 425, 425, + 425, 425, 425, 425, 425, 425, 425, 425, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, 65, 65, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + 65, 65, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402 + }, + + { + 15, -403, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, 62, -403, 426, 426, + 426, 426, 426, 426, 426, 426, 426, 426, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, 65, 65, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + 65, 65, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403 + }, + + { + 15, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, 62, -404, 427, 427, + 427, 427, 427, 427, 427, 427, 427, 427, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, 65, 65, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + 65, 65, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404 + }, + + { + 15, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, 62, -405, 428, 428, + + 428, 428, 428, 428, 428, 428, 428, 428, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, 65, 65, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + 65, 65, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405 + }, + + { + 15, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, 62, -406, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, 65, 65, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + 65, 65, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406 + }, + + { + 15, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, 62, -407, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, 65, 65, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + 65, 65, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407 + }, + + { + 15, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, 431, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408 + }, + + { + 15, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + + -409, -409, 432, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409 + + }, + + { + 15, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, 62, -410, 410, 411, + 411, 411, 411, 411, 411, 411, 411, 411, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, 65, 65, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + + 65, 65, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410 + }, + + { + 15, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, 62, -411, 412, 412, + 412, 412, 412, 412, 412, 412, 412, 412, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, 65, 65, + + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + 65, 65, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411 + }, + + { + 15, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + + -412, -412, -412, -412, -412, -412, 62, -412, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, 65, 65, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + 65, 65, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412 + }, + + { + 15, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, 62, -413, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, 65, 65, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + 65, 65, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413 + }, + + { + 15, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, 62, -414, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, 65, 65, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + 65, 65, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414 + }, + + { + 15, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, 62, -415, 416, 416, + + 416, 416, 416, 416, 416, 416, 416, 416, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, 65, 65, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + 65, 65, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415 + }, + + { + 15, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, 62, -416, 417, 417, + 417, 417, 417, 417, 417, 417, 417, 417, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, 65, 65, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + 65, 65, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416 + }, + + { + 15, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, 62, -417, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, 65, 65, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + 65, 65, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417 + }, + + { + 15, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, 62, -418, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, -418, -418, + + -418, -418, -418, -418, -418, -418, -418, -418, 65, 65, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + 65, 65, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418 + }, + + { + 15, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, 62, -419, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, 65, 65, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + 65, 65, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419 + + }, + + { + 15, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, 62, -420, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, 65, 65, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + + 65, 65, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420 + }, + + { + 15, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, 62, -421, 422, 422, + 422, 422, 422, 422, 422, 422, 422, 422, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, 65, 65, + + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + 65, 65, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421 + }, + + { + 15, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + + -422, -422, -422, -422, -422, -422, 62, -422, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, 65, 65, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + 65, 65, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422 + }, + + { + 15, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, 62, -423, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 424, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, 65, 65, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + 65, 65, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423 + }, + + { + 15, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, 62, -424, 425, 425, + 425, 425, 425, 425, 425, 425, 425, 425, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, 65, 65, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + 65, 65, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424 + }, + + { + 15, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, 62, -425, 426, 426, + + 426, 426, 426, 426, 426, 426, 426, 426, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, 65, 65, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + 65, 65, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425 + }, + + { + 15, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, 62, -426, 427, 427, + 427, 427, 427, 427, 427, 427, 427, 427, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, 65, 65, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + 65, 65, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426 + }, + + { + 15, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, 62, -427, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, 65, 65, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + 65, 65, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427 + }, + + { + 15, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, 62, -428, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, -428, -428, + + -428, -428, -428, -428, -428, -428, -428, -428, 65, 65, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + 65, 65, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428 + }, + + { + 15, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, 62, -429, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, 65, 65, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + 65, 65, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429 + + }, + + { + 15, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, 62, -430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, 65, 65, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + + 65, 65, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430 + }, + + { + 15, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, 433, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431 + }, + + { + 15, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, 434, -432, -432, -432, -432, -432, -432, -432, + + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432 + }, + + { + 15, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, 435, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433 + }, + + { + 15, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, 436, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434 + }, + + { + 15, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, 437, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435 + }, + + { + 15, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, 438, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436 + }, + + { + 15, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, 439, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437 + }, + + { + 15, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, 440, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438 + }, + + { + 15, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + + -439, -439, 441, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439 + + }, + + { + 15, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, 442, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440 + }, + + { + 15, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, 443, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441 + }, + + { + 15, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, 444, -442, -442, -442, -442, -442, -442, -442, + + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442 + }, + + { + 15, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, 445, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443 + }, + + { + 15, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, 446, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444 + }, + + { + 15, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, 447, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445 + }, + + { + 15, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, 448, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446 + }, + + { + 15, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, 449, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447 + }, + + { + 15, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, 450, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448 + }, + + { + 15, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + + -449, -449, 451, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449 + + }, + + { + 15, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, 452, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450 + }, + + { + 15, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, 453, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451 + }, + + { + 15, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, 454, -452, -452, -452, -452, -452, -452, -452, + + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452 + }, + + { + 15, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, 455, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453 + }, + + { + 15, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, 456, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454 + }, + + { + 15, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, 457, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455 + }, + + { + 15, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, 458, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456 + }, + + { + 15, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, 459, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457 + }, + + { + 15, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, 460, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458 + }, + + { + 15, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + + -459, -459, 461, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459 + + }, + + { + 15, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, 462, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460 + }, + + { + 15, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, 463, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461 + }, + + { + 15, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, 464, -462, -462, -462, -462, -462, -462, -462, + + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462 + }, + + { + 15, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, 465, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463 + }, + + { + 15, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, 466, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464 + }, + + { + 15, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, 467, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465 + }, + + { + 15, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, 468, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466 + }, + + { + 15, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, 469, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467 + }, + + { + 15, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, 470, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468 + }, + + { + 15, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + + -469, -469, 471, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469 + + }, + + { + 15, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, 472, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470 + }, + + { + 15, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, 473, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471 + }, + + { + 15, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, 474, -472, -472, -472, -472, -472, -472, -472, + + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472 + }, + + { + 15, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, 475, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473 + }, + + { + 15, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, 476, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474 + }, + + { + 15, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, 477, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475 + }, + + { + 15, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, 478, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476 + }, + + { + 15, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, 479, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477 + }, + + { + 15, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, 480, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478 + }, + + { + 15, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + + -479, -479, 481, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479 + + }, + + { + 15, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, 482, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480 + }, + + { + 15, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, 483, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481 + }, + + { + 15, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, 484, -482, -482, -482, -482, -482, -482, -482, + + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482 + }, + + { + 15, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, 485, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483 + }, + + { + 15, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, 486, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484 + }, + + { + 15, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, 487, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485 + }, + + { + 15, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, 488, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486 + }, + + { + 15, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, 489, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487 + }, + + { + 15, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, 490, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488 + }, + + { + 15, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + + -489, -489, 491, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489 + + }, + + { + 15, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, 492, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490 + }, + + { + 15, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, 493, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491 + }, + + { + 15, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, 494, -492, -492, -492, -492, -492, -492, -492, + + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492 + }, + + { + 15, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, 495, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493 + }, + + { + 15, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, 496, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494 + }, + + { + 15, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, 497, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495 + }, + + { + 15, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, 498, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496 + }, + + { + 15, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, 499, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497 + }, + + { + 15, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, 500, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498 + }, + + { + 15, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + + -499, -499, 501, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499 + + }, + + { + 15, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, 502, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500 + }, + + { + 15, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, 503, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501 + }, + + { + 15, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, 504, -502, -502, -502, -502, -502, -502, -502, + + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502 + }, + + { + 15, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, 505, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503 + }, + + { + 15, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, 506, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504 + }, + + { + 15, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, 507, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505 + }, + + { + 15, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, 508, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506 + }, + + { + 15, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, 509, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507 + }, + + { + 15, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, 510, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508 + }, + + { + 15, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + + -509, -509, 511, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509 + + }, + + { + 15, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, 512, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510 + }, + + { + 15, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, 513, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511 + }, + + { + 15, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, 514, -512, -512, -512, -512, -512, -512, -512, + + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512 + }, + + { + 15, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, 515, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513 + }, + + { + 15, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, 516, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514 + }, + + { + 15, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, 517, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515 + }, + + { + 15, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, 518, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516 + }, + + { + 15, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, 519, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517 + }, + + { + 15, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, 520, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518 + }, + + { + 15, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + + -519, -519, 521, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519 + + }, + + { + 15, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, 522, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520 + }, + + { + 15, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, 523, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521 + }, + + { + 15, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, 524, -522, -522, -522, -522, -522, -522, -522, + + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522 + }, + + { + 15, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, 525, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523 + }, + + { + 15, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, 526, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524 + }, + + { + 15, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, 527, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525 + }, + + { + 15, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, 528, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526 + }, + + { + 15, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, 529, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527 + }, + + { + 15, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, 530, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528 + }, + + { + 15, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + + -529, -529, 531, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529 + + }, + + { + 15, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, 532, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530 + }, + + { + 15, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, 533, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531 + }, + + { + 15, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, 534, -532, -532, -532, -532, -532, -532, -532, + + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532 + }, + + { + 15, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, 535, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533 + }, + + { + 15, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, 536, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534 + }, + + { + 15, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, 537, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535 + }, + + { + 15, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, 538, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536 + }, + + { + 15, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, 539, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537 + }, + + { + 15, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, 540, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538 + }, + + { + 15, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + + -539, -539, 541, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539 + + }, + + { + 15, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, 542, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540 + }, + + { + 15, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, 543, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541 + }, + + { + 15, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, 544, -542, -542, -542, -542, -542, -542, -542, + + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542 + }, + + { + 15, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, 545, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543 + }, + + { + 15, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, 546, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544 + }, + + { + 15, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, 547, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545 + }, + + { + 15, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, 548, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546 + }, + + { + 15, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, 549, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547 + }, + + { + 15, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, 550, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548 + }, + + { + 15, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549 + + }, + + { + 15, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyg->yytext_ptr -= yyg->yy_more_len; \ + yyleng = (yy_size_t) (yy_cp - yyg->yytext_ptr); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 31 +#define YY_END_OF_BUFFER 32 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[551] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, + 29, 29, 0, 0, 32, 31, 31, 31, 31, 31, + 31, 31, 20, 20, 20, 20, 20, 20, 11, 13, + 13, 12, 25, 21, 24, 23, 27, 27, 28, 29, + 31, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 19, 0, 0, 0, 0, 0, 13, 13, + 16, 16, 13, 13, 0, 13, 21, 0, 23, 22, + 23, 0, 28, 29, 0, 30, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 13, 13, 13, 0, 16, 13, 26, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, + 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 13, 13, 13, 13, 13, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 0, 0, 0, 13, 13, 13, + 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 10, 2, 8, 8, 8, 5, + + 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, + 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 9, 0, 6, 0, 0, + 4, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 14, 0, 0, 0, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 14, 14, 0, 0, 7, + 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 14, 14, 14, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, + 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, + + 13, 13, 14, 14, 14, 14, 14, 0, 0, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, + 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, + 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, + 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, + + 14, 14, 14, 14, 14, 14, 15, 0, 0, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, + 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, 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, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 3 + } ; + +static const yy_state_type yy_NUL_trans[551] = + { 0, + 16, 17, 23, 23, 33, 33, 37, 37, 39, 39, + 40, 40, 41, 41, 0, 0, 43, 43, 43, 43, + 43, 43, 0, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, + 75, 0, 77, 77, 77, 77, 77, 77, 77, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 73, 74, 75, 0, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 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, 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, 259, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() (yyg->yy_more_flag = 1) +#define YY_MORE_ADJ yyg->yy_more_len +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: fitshdr.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* fitshdr.l is a Flex description file containing a lexical scanner +* definition for extracting keywords and keyvalues from a FITS header. +* +* It requires Flex v2.5.4 or later. +* +* Refer to fitshdr.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Keywords. */ +/* Keyvalue data types. */ +/* Characters forming standard unit strings (jwBIQX are not used). */ +/* Exclusive start states. */ + +#line 76 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +#include +#include +#include +#include +#include + +#include "fitshdr.h" +#include "wcsutil.h" + +// User data associated with yyscanner. +struct fitshdr_extra { + // Values passed to YY_INPUT. + const char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int fitshdr_scanner(const char header[], int nkeyrec, \ + int nkeyids, struct fitskeyid keyids[], int *nreject, \ + struct fitskey **keys, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; +static void nullfill(char cptr[], int len); + +// Map status return value to message. +const char *fitshdr_errmsg[] = { + "Success", + "Null fitskey pointer-pointer passed", + "Memory allocation failed", + "Fatal error returned by Flex parser"}; + +#line 10326 "fitshdr.c" +#line 10327 "fitshdr.c" + +#define INITIAL 0 +#define VALUE 1 +#define INLINE 2 +#define UNITS 3 +#define COMMENT 4 +#define ERROR 5 +#define FLUSH 6 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct fitshdr_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + yy_size_t yy_n_chars; + yy_size_t yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + yy_size_t yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 128 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" + +#line 130 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" + char ctmp[72]; + + if (keys == 0x0) { + return FITSHDRERR_NULL_POINTER; + } + + // Allocate memory for the required number of fitskey structs. + // Recall that calloc() initializes allocated memory to zero. + struct fitskey *kptr; + if (!(kptr = *keys = calloc(nkeyrec, sizeof(struct fitskey)))) { + return FITSHDRERR_MEMORY; + } + + // Initialize returned values. + *nreject = 0; + + // Initialize keyids[]. + struct fitskeyid *iptr = keyids; + for (int j = 0; j < nkeyids; j++, iptr++) { + iptr->count = 0; + iptr->idx[0] = -1; + iptr->idx[1] = -1; + } + + int keyno = 0; + + int blank = 0; + int continuation = 0; + int end = 0; + + #ifdef WCSLIB_INT64 + #define asString(S) stringize(S) + #define stringize(S) #S + + const char *int64fmt; + if (strcmp(asString(WCSLIB_INT64), "long long int") == 0) { + int64fmt = "%lld"; + } else if (strcmp(asString(WCSLIB_INT64), "long int") == 0) { + int64fmt = "%ld"; + } else if (strcmp(asString(WCSLIB_INT64), "int") == 0) { + int64fmt = "%d"; + } else { + return FITSHDRERR_DATA_TYPE; + } + #endif + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return FITSHDRERR_FLEX_PARSER; + } + + BEGIN(INITIAL); + +#line 10636 "fitshdr.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yyg->yy_more_len = 0; + if ( yyg->yy_more_flag ) + { + yyg->yy_more_len = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + yyg->yy_more_flag = 0; + } + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 187 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // A completely blank keyrecord. + strncpy(kptr->keyword, yytext, 8); + yyless(0); + blank = 1; + BEGIN(COMMENT); + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 195 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + strncpy(kptr->keyword, yytext, 8); + BEGIN(COMMENT); + } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 200 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + strncpy(kptr->keyword, yytext, 8); + end = 1; + BEGIN(FLUSH); + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 206 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Illegal END keyrecord. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYREC; + BEGIN(VALUE); + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 213 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Illegal END keyrecord. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYREC; + BEGIN(COMMENT); + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 220 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + strncpy(kptr->keyword, yytext, 8); + BEGIN(VALUE); + } + YY_BREAK +case 7: +/* rule 7 can match eol */ +YY_RULE_SETUP +#line 225 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Continued string keyvalue. + strncpy(kptr->keyword, yytext, 8); + + if (keyno > 0 && (kptr-1)->type%10 == 8) { + // Put back the string keyvalue. + int k; + for (k = 10; yytext[k] != '\''; k++); + yyless(k); + continuation = 1; + BEGIN(VALUE); + + } else { + // Not a valid continuation. + yyless(8); + BEGIN(COMMENT); + } + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 244 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Keyword without value. + strncpy(kptr->keyword, yytext, 8); + BEGIN(COMMENT); + } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 250 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Illegal keyword, carry on regardless. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYWORD; + BEGIN(VALUE); + } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 257 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Illegal keyword, carry on regardless. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYWORD; + BEGIN(COMMENT); + } + YY_BREAK +case 11: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 264 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Null keyvalue. + BEGIN(INLINE); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 269 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Logical keyvalue. + kptr->type = 1; + kptr->keyvalue.i = (*yytext == 'T'); + BEGIN(INLINE); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 276 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // 32-bit signed integer keyvalue. + kptr->type = 2; + if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 287 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // 64-bit signed integer keyvalue (up to 18 digits). + double dtmp; + if (wcsutil_str2double(yytext, &dtmp)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + + } else if (INT_MIN <= dtmp && dtmp <= INT_MAX) { + // Can be accomodated as a 32-bit signed integer. + kptr->type = 2; + if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + } else { + // 64-bit signed integer. + kptr->type = 3; + #ifdef WCSLIB_INT64 + // Native 64-bit integer is available. + if (sscanf(yytext, int64fmt, &(kptr->keyvalue.k)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + #else + // 64-bit integer (up to 18 digits) implemented as int[3]. + kptr->keyvalue.k[2] = 0; + + sprintf(ctmp, "%%%dd%%9d", yyleng-9); + if (sscanf(yytext, ctmp, kptr->keyvalue.k+1, + kptr->keyvalue.k) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } else if (*yytext == '-') { + kptr->keyvalue.k[0] *= -1; + } + #endif + } + + BEGIN(INLINE); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 329 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Very long integer keyvalue (and 19-digit int64). + kptr->type = 4; + strcpy(ctmp, yytext); + int j, k = yyleng; + for (j = 0; j < 8; j++) { + // Read it backwards. + k -= 9; + if (k < 0) k = 0; + if (sscanf(ctmp+k, "%d", kptr->keyvalue.l+j) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + if (*yytext == '-') { + kptr->keyvalue.l[j] = -abs(kptr->keyvalue.l[j]); + } + + if (k == 0) break; + ctmp[k] = '\0'; + } + + // Can it be accomodated as a 64-bit signed integer? + if (j == 2 && abs(kptr->keyvalue.l[2]) <= 9 && + abs(kptr->keyvalue.l[1]) <= 223372036 && + kptr->keyvalue.l[0] <= 854775807 && + kptr->keyvalue.l[0] >= -854775808) { + kptr->type = 3; + + #ifdef WCSLIB_INT64 + // Native 64-bit integer is available. + kptr->keyvalue.l[2] = 0; + if (sscanf(yytext, int64fmt, &(kptr->keyvalue.k)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + #endif + } + + BEGIN(INLINE); + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 370 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Float keyvalue. + kptr->type = 5; + if (wcsutil_str2double(yytext, &(kptr->keyvalue.f))) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 381 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Integer complex keyvalue. + kptr->type = 6; + if (sscanf(yytext, "(%lf,%lf)", kptr->keyvalue.c, + kptr->keyvalue.c+1) < 2) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 393 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Floating point complex keyvalue. + kptr->type = 7; + + char *cptr; + int k; + for (cptr = ctmp, k = 1; yytext[k] != ','; cptr++, k++) { + *cptr = yytext[k]; + } + *cptr = '\0'; + + if (wcsutil_str2double(ctmp, kptr->keyvalue.c)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + for (cptr = ctmp, k++; yytext[k] != ')'; cptr++, k++) { + *cptr = yytext[k]; + } + *cptr = '\0'; + + if (wcsutil_str2double(ctmp, kptr->keyvalue.c+1)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 19: +/* rule 19 can match eol */ +YY_RULE_SETUP +#line 422 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // String keyvalue. + kptr->type = 8; + char *cptr = kptr->keyvalue.s; + strcpy(cptr, yytext+1); + + // Squeeze out repeated quotes. + int k = 0; + for (int j = 0; j < 72; j++) { + if (k < j) { + cptr[k] = cptr[j]; + } + + if (cptr[j] == '\0') { + if (k) cptr[k-1] = '\0'; + break; + } else if (cptr[j] == '\'' && cptr[j+1] == '\'') { + j++; + } + + k++; + } + + if (*cptr) { + // Retain the initial blank in all-blank strings. + nullfill(cptr+1, 71); + } else { + nullfill(cptr, 72); + } + + BEGIN(INLINE); + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 455 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + YY_BREAK +case 21: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 460 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + BEGIN(FLUSH); + } + YY_BREAK +case 22: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 464 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + BEGIN(FLUSH); + } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 468 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + BEGIN(UNITS); + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 472 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + kptr->status |= FITSHDR_COMMENT; + BEGIN(ERROR); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 477 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Keyvalue parsing must now also be suspect. + kptr->status |= FITSHDR_COMMENT; + kptr->type = 0; + BEGIN(ERROR); + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 484 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + kptr->ulen = yyleng; + yymore(); + BEGIN(COMMENT); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 490 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + yymore(); + BEGIN(COMMENT); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 495 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + strcpy(kptr->comment, yytext); + nullfill(kptr->comment, 84); + BEGIN(FLUSH); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 501 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + if (!continuation) kptr->type = -abs(kptr->type); + + sprintf(kptr->comment, "%.80s", yyextra->hdr-80); + kptr->comment[80] = '\0'; + nullfill(kptr->comment+80, 4); + + BEGIN(FLUSH); + } + YY_BREAK +case 30: +/* rule 30 can match eol */ +YY_RULE_SETUP +#line 511 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // Discard the rest of the input line. + kptr->keyno = ++keyno; + + // Null-fill the keyword. + kptr->keyword[8] = '\0'; + nullfill(kptr->keyword, 12); + + // Do indexing. + iptr = keyids; + kptr->keyid = -1; + for (int j = 0; j < nkeyids; j++, iptr++) { + int k; + char *cptr = iptr->name; + cptr[8] = '\0'; + nullfill(cptr, 12); + for (k = 0; k < 8; k++, cptr++) { + if (*cptr != '.' && *cptr != kptr->keyword[k]) break; + } + + if (k == 8) { + // Found a match. + iptr->count++; + if (iptr->idx[0] == -1) { + iptr->idx[0] = keyno-1; + } else { + iptr->idx[1] = keyno-1; + } + + kptr->keyno = -abs(kptr->keyno); + if (kptr->keyid < 0) kptr->keyid = j; + } + } + + // Deal with continued strings. + if (continuation) { + // Tidy up the previous string keyvalue. + if ((kptr-1)->type == 8) (kptr-1)->type += 10; + char *cptr = (kptr-1)->keyvalue.s; + if (cptr[strlen(cptr)-1] == '&') cptr[strlen(cptr)-1] = '\0'; + + kptr->type = (kptr-1)->type + 10; + } + + // Check for keyrecords following the END keyrecord. + if (end && (end++ > 1) && !blank) { + kptr->status |= FITSHDR_TRAILER; + } + if (kptr->status) (*nreject)++; + + kptr++; + blank = 0; + continuation = 0; + + BEGIN(INITIAL); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(VALUE): +case YY_STATE_EOF(INLINE): +case YY_STATE_EOF(UNITS): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(ERROR): +case YY_STATE_EOF(FLUSH): +#line 568 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +{ + // End-of-input. + return 0; + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 573 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" +ECHO; + YY_BREAK +#line 11189 "fitshdr.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + yy_size_t i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + yy_size_t yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +yy_size_t yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 573 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/fitshdr.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int fitshdr( + const char header[], + int nkeyrec, + int nkeyids, + struct fitskeyid keyids[], + int *nreject, + struct fitskey **keys) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct fitshdr_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = fitshdr_scanner(header, nkeyrec, nkeyids, keyids, nreject, + keys, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + +/*---------------------------------------------------------------------------- +* Pad a string with null characters. +*---------------------------------------------------------------------------*/ + +void nullfill(char cptr[], int len) + +{ + // Propagate the terminating null to the end of the string. + int j; + for (j = 0; j < len; j++) { + if (cptr[j] == '\0') { + for (int k = j+1; k < len; k++) { + cptr[k] = '\0'; + } + break; + } + } + + // Remove trailing blanks. + for (int k = j-1; k >= 0; k--) { + if (cptr[k] != ' ') break; + cptr[k] = '\0'; + } + + return; +} + diff --git a/deps/wcslib/C/fitshdr.h b/deps/wcslib/C/fitshdr.h new file mode 100644 index 0000000..0591fc3 --- /dev/null +++ b/deps/wcslib/C/fitshdr.h @@ -0,0 +1,449 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: fitshdr.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the fitshdr routines +* ------------------------------- +* The Flexible Image Transport System (FITS), is a data format widely used in +* astronomy for data interchange and archive. It is described in +* += "Definition of the Flexible Image Transport System (FITS), version 3.0", += Pence, W.D., Chiappetti, L., Page, C.G., Shaw, R.A., & Stobie, E. 2010, += A&A, 524, A42 - http://dx.doi.org/10.1051/0004-6361/201015362 +* +* See also http://fits.gsfc.nasa.gov +* +* fitshdr() is a generic FITS header parser provided to handle keyrecords that +* are ignored by the WCS header parsers, wcspih() and wcsbth(). Typically the +* latter may be set to remove WCS keyrecords from a header leaving fitshdr() +* to handle the remainder. +* +* +* fitshdr() - FITS header parser routine +* -------------------------------------- +* fitshdr() parses a character array containing a FITS header, extracting +* all keywords and their values into an array of fitskey structs. +* +* Given: +* header const char [] +* Character array containing the (entire) FITS header, +* for example, as might be obtained conveniently via the +* CFITSIO routine fits_hdr2str(). +* +* Each header "keyrecord" (formerly "card image") +* consists of exactly 80 7-bit ASCII printing characters +* in the range 0x20 to 0x7e (which excludes NUL, BS, +* TAB, LF, FF and CR) especially noting that the +* keyrecords are NOT null-terminated. +* +* nkeyrec int Number of keyrecords in header[]. +* +* nkeyids int Number of entries in keyids[]. +* +* Given and returned: +* keyids struct fitskeyid [] +* While all keywords are extracted from the header, +* keyids[] provides a convienient way of indexing them. +* The fitskeyid struct contains three members; +* fitskeyid::name must be set by the user while +* fitskeyid::count and fitskeyid::idx are returned by +* fitshdr(). All matched keywords will have their +* fitskey::keyno member negated. +* +* Returned: +* nreject int* Number of header keyrecords rejected for syntax +* errors. +* +* keys struct fitskey** +* Pointer to an array of nkeyrec fitskey structs +* containing all keywords and keyvalues extracted from +* the header. +* +* Memory for the array is allocated by fitshdr() and +* this must be freed by the user. See wcsdealloc(). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null fitskey pointer passed. +* 2: Memory allocation failed. +* 3: Fatal error returned by Flex parser. +* 4: Unrecognised data type. +* +* Notes: +* 1: Keyword parsing is done in accordance with the syntax defined by +* NOST 100-2.0, noting the following points in particular: +* +* a: Sect. 5.1.2.1 specifies that keywords be left-justified in columns +* 1-8, blank-filled with no embedded spaces, composed only of the +* ASCII characters ABCDEFGHJKLMNOPQRSTUVWXYZ0123456789-_ +* +* fitshdr() accepts any characters in columns 1-8 but flags keywords +* that do not conform to standard syntax. +* +* b: Sect. 5.1.2.2 defines the "value indicator" as the characters "= " +* occurring in columns 9 and 10. If these are absent then the +* keyword has no value and columns 9-80 may contain any ASCII text +* (but see note 2 for CONTINUE keyrecords). This is copied to the +* comment member of the fitskey struct. +* +* c: Sect. 5.1.2.3 states that a keyword may have a null (undefined) +* value if the value/comment field, columns 11-80, consists entirely +* of spaces, possibly followed by a comment. +* +* d: Sect. 5.1.1 states that trailing blanks in a string keyvalue are +* not significant and the parser always removes them. A string +* containing nothing but blanks will be replaced with a single +* blank. +* +* Sect. 5.2.1 also states that a quote character (') in a string +* value is to be represented by two successive quote characters and +* the parser removes the repeated quote. +* +* e: The parser recognizes free-format character (NOST 100-2.0, +* Sect. 5.2.1), integer (Sect. 5.2.3), and floating-point values +* (Sect. 5.2.4) for all keywords. +* +* f: Sect. 5.2.3 offers no comment on the size of an integer keyvalue +* except indirectly in limiting it to 70 digits. The parser will +* translate an integer keyvalue to a 32-bit signed integer if it +* lies in the range -2147483648 to +2147483647, otherwise it +* interprets it as a 64-bit signed integer if possible, or else a +* "very long" integer (see fitskey::type). +* +* g: END not followed by 77 blanks is not considered to be a legitimate +* end keyrecord. +* +* 2: The parser supports a generalization of the OGIP Long String Keyvalue +* Convention (v1.0) whereby strings may be continued onto successive +* header keyrecords. A keyrecord contains a segment of a continued +* string if and only if +* +* a: it contains the pseudo-keyword CONTINUE, +* +* b: columns 9 and 10 are both blank, +* +* c: columns 11 to 80 contain what would be considered a valid string +* keyvalue, including optional keycomment, if column 9 had contained +* '=', +* +* d: the previous keyrecord contained either a valid string keyvalue or +* a valid CONTINUE keyrecord. +* +* If any of these conditions is violated, the keyrecord is considered in +* isolation. +* +* Syntax errors in keycomments in a continued string are treated more +* permissively than usual; the '/' delimiter may be omitted provided that +* parsing of the string keyvalue is not compromised. However, the +* FITSHDR_COMMENT status bit will be set for the keyrecord (see +* fitskey::status). +* +* As for normal strings, trailing blanks in a continued string are not +* significant. +* +* In the OGIP convention "the '&' character is used as the last non-blank +* character of the string to indicate that the string is (probably) +* continued on the following keyword". This additional syntax is not +* required by fitshdr(), but if '&' does occur as the last non-blank +* character of a continued string keyvalue then it will be removed, along +* with any trailing blanks. However, blanks that occur before the '&' +* will be preserved. +* +* +* fitskeyid struct - Keyword indexing +* ----------------------------------- +* fitshdr() uses the fitskeyid struct to return indexing information for +* specified keywords. The struct contains three members, the first of which, +* fitskeyid::name, must be set by the user with the remainder returned by +* fitshdr(). +* +* char name[12]: +* (Given) Name of the required keyword. This is to be set by the user; +* the '.' character may be used for wildcarding. Trailing blanks will be +* replaced with nulls. +* +* int count: +* (Returned) The number of matches found for the keyword. +* +* int idx[2]: +* (Returned) Indices into keys[], the array of fitskey structs returned by +* fitshdr(). Note that these are 0-relative array indices, not keyrecord +* numbers. +* +* If the keyword is found in the header the first index will be set to the +* array index of its first occurrence, otherwise it will be set to -1. +* +* If multiples of the keyword are found, the second index will be set to +* the array index of its last occurrence, otherwise it will be set to -1. +* +* +* fitskey struct - Keyword/value information +* ------------------------------------------ +* fitshdr() returns an array of fitskey structs, each of which contains the +* result of parsing one FITS header keyrecord. All members of the fitskey +* struct are returned by fitshdr(), none are given by the user. +* +* int keyno +* (Returned) Keyrecord number (1-relative) in the array passed as input to +* fitshdr(). This will be negated if the keyword matched any specified in +* the keyids[] index. +* +* int keyid +* (Returned) Index into the first entry in keyids[] with which the +* keyrecord matches, else -1. +* +* int status +* (Returned) Status flag bit-vector for the header keyrecord employing the +* following bit masks defined as preprocessor macros: +* +* - FITSHDR_KEYWORD: Illegal keyword syntax. +* - FITSHDR_KEYVALUE: Illegal keyvalue syntax. +* - FITSHDR_COMMENT: Illegal keycomment syntax. +* - FITSHDR_KEYREC: Illegal keyrecord, e.g. an END keyrecord with +* trailing text. +* - FITSHDR_TRAILER: Keyrecord following a valid END keyrecord. +* +* The header keyrecord is syntactically correct if no bits are set. +* +* char keyword[12] +* (Returned) Keyword name, null-filled for keywords of less than eight +* characters (trailing blanks replaced by nulls). +* +* Use +* += sprintf(dst, "%.8s", keyword) +* +* to copy it to a character array with null-termination, or +* += sprintf(dst, "%8.8s", keyword) +* +* to blank-fill to eight characters followed by null-termination. +* +* int type +* (Returned) Keyvalue data type: +* - 0: No keyvalue (both the value and type are undefined). +* - 1: Logical, represented as int. +* - 2: 32-bit signed integer. +* - 3: 64-bit signed integer (see below). +* - 4: Very long integer (see below). +* - 5: Floating point (stored as double). +* - 6: Integer complex (stored as double[2]). +* - 7: Floating point complex (stored as double[2]). +* - 8: String. +* - 8+10*n: Continued string (described below and in fitshdr() note 2). +* +* A negative type indicates that a syntax error was encountered when +* attempting to parse a keyvalue of the particular type. +* +* Comments on particular data types: +* - 64-bit signed integers lie in the range +* += (-9223372036854775808 <= int64 < -2147483648) || += (+2147483647 < int64 <= +9223372036854775807) +* +* A native 64-bit data type may be defined via preprocessor macro +* WCSLIB_INT64 defined in wcsconfig.h, e.g. as 'long long int'; this +* will be typedef'd to 'int64' here. If WCSLIB_INT64 is not set, then +* int64 is typedef'd to int[3] instead and fitskey::keyvalue is to be +* computed as +* += ((keyvalue.k[2]) * 1000000000 + += keyvalue.k[1]) * 1000000000 + += keyvalue.k[0] +* +* and may reported via +* += if (keyvalue.k[2]) { += printf("%d%09d%09d", keyvalue.k[2], abs(keyvalue.k[1]), += abs(keyvalue.k[0])); += } else { += printf("%d%09d", keyvalue.k[1], abs(keyvalue.k[0])); += } +* +* where keyvalue.k[0] and keyvalue.k[1] range from -999999999 to +* +999999999. +* +* - Very long integers, up to 70 decimal digits in length, are encoded +* in keyvalue.l as an array of int[8], each of which stores 9 decimal +* digits. fitskey::keyvalue is to be computed as +* += (((((((keyvalue.l[7]) * 1000000000 + += keyvalue.l[6]) * 1000000000 + += keyvalue.l[5]) * 1000000000 + += keyvalue.l[4]) * 1000000000 + += keyvalue.l[3]) * 1000000000 + += keyvalue.l[2]) * 1000000000 + += keyvalue.l[1]) * 1000000000 + += keyvalue.l[0] +* +* - Continued strings are not reconstructed, they remain split over +* successive fitskey structs in the keys[] array returned by +* fitshdr(). fitskey::keyvalue data type, 8 + 10n, indicates the +* segment number, n, in the continuation. +* +* int padding +* (An unused variable inserted for alignment purposes only.) +* +* union keyvalue +* (Returned) A union comprised of +* +* - fitskey::i, +* - fitskey::k, +* - fitskey::l, +* - fitskey::f, +* - fitskey::c, +* - fitskey::s, +* +* used by the fitskey struct to contain the value associated with a +* keyword. +* +* int i +* (Returned) Logical (fitskey::type == 1) and 32-bit signed integer +* (fitskey::type == 2) data types in the fitskey::keyvalue union. +* +* int64 k +* (Returned) 64-bit signed integer (fitskey::type == 3) data type in the +* fitskey::keyvalue union. +* +* int l[8] +* (Returned) Very long integer (fitskey::type == 4) data type in the +* fitskey::keyvalue union. +* +* double f +* (Returned) Floating point (fitskey::type == 5) data type in the +* fitskey::keyvalue union. +* +* double c[2] +* (Returned) Integer and floating point complex (fitskey::type == 6 || 7) +* data types in the fitskey::keyvalue union. +* +* char s[72] +* (Returned) Null-terminated string (fitskey::type == 8) data type in the +* fitskey::keyvalue union. +* +* int ulen +* (Returned) Where a keycomment contains a units string in the standard +* form, e.g. [m/s], the ulen member indicates its length, inclusive of +* square brackets. Otherwise ulen is zero. +* +* char comment[84] +* (Returned) Keycomment, i.e. comment associated with the keyword or, for +* keyrecords rejected because of syntax errors, the compete keyrecord +* itself with null-termination. +* +* Comments are null-terminated with trailing spaces removed. Leading +* spaces are also removed from keycomments (i.e. those immediately +* following the '/' character), but not from COMMENT or HISTORY keyrecords +* or keyrecords without a value indicator ("= " in columns 9-80). +* +* +* Global variable: const char *fitshdr_errmsg[] - Status return messages +* ---------------------------------------------------------------------- +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_FITSHDR +#define WCSLIB_FITSHDR + +#include "wcsconfig.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define FITSHDR_KEYWORD 0x01 +#define FITSHDR_KEYVALUE 0x02 +#define FITSHDR_COMMENT 0x04 +#define FITSHDR_KEYREC 0x08 +#define FITSHDR_CARD 0x08 // Alias for backwards compatibility. +#define FITSHDR_TRAILER 0x10 + + +extern const char *fitshdr_errmsg[]; + +enum fitshdr_errmsg_enum { + FITSHDRERR_SUCCESS = 0, // Success. + FITSHDRERR_NULL_POINTER = 1, // Null fitskey pointer passed. + FITSHDRERR_MEMORY = 2, // Memory allocation failed. + FITSHDRERR_FLEX_PARSER = 3, // Fatal error returned by Flex parser. + FITSHDRERR_DATA_TYPE = 4 // Unrecognised data type. +}; + +#ifdef WCSLIB_INT64 + typedef WCSLIB_INT64 int64; +#else + typedef int int64[3]; +#endif + + +// Struct used for indexing the keywords. +struct fitskeyid { + char name[12]; // Keyword name, null-terminated. + int count; // Number of occurrences of keyword. + int idx[2]; // Indices into fitskey array. +}; + +// Size of the fitskeyid struct in int units, used by the Fortran wrappers. +#define KEYIDLEN (sizeof(struct fitskeyid)/sizeof(int)) + + +// Struct used for storing FITS keywords. +struct fitskey { + int keyno; // Header keyrecord sequence number (1-rel). + int keyid; // Index into fitskeyid[]. + int status; // Header keyrecord status bit flags. + char keyword[12]; // Keyword name, null-filled. + int type; // Keyvalue type (see above). + int padding; // (Dummy inserted for alignment purposes.) + union { + int i; // 32-bit integer and logical values. + int64 k; // 64-bit integer values. + int l[8]; // Very long signed integer values. + double f; // Floating point values. + double c[2]; // Complex values. + char s[72]; // String values, null-terminated. + } keyvalue; // Keyvalue. + int ulen; // Length of units string. + char comment[84]; // Comment (or keyrecord), null-terminated. +}; + +// Size of the fitskey struct in int units, used by the Fortran wrappers. +#define KEYLEN (sizeof(struct fitskey)/sizeof(int)) + + +int fitshdr(const char header[], int nkeyrec, int nkeyids, + struct fitskeyid keyids[], int *nreject, struct fitskey **keys); + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_FITSHDR diff --git a/deps/wcslib/C/fitshdr.l b/deps/wcslib/C/fitshdr.l new file mode 100644 index 0000000..18d65e6 --- /dev/null +++ b/deps/wcslib/C/fitshdr.l @@ -0,0 +1,626 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: fitshdr.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* fitshdr.l is a Flex description file containing a lexical scanner +* definition for extracting keywords and keyvalues from a FITS header. +* +* It requires Flex v2.5.4 or later. +* +* Refer to fitshdr.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ + +/* Options. */ +%option full +%option never-interactive +%option noinput +%option nounput +%option noyywrap +%option outfile="fitshdr.c" +%option prefix="fitshdr" +%option reentrant +%option extra-type="struct fitshdr_extra *" + +/* Keywords. */ +KEYCHR [-_A-Z0-9] +KW1 {KEYCHR}{1}" "{7} +KW2 {KEYCHR}{2}" "{6} +KW3 {KEYCHR}{3}" "{5} +KW4 {KEYCHR}{4}" "{4} +KW5 {KEYCHR}{5}" "{3} +KW6 {KEYCHR}{6}" "{2} +KW7 {KEYCHR}{7}" "{1} +KW8 {KEYCHR}{8} +KEYWORD ({KW1}|{KW2}|{KW3}|{KW4}|{KW5}|{KW6}|{KW7}|{KW8}) + +/* Keyvalue data types. */ +LOGICAL [TF] +INT32 [+-]?0*[0-9]{1,9} +INT64 [+-]?0*[0-9]{10,18} +INTVL [+-]?0*[0-9]{19,} +INTEGER [+-]?[0-9]+ +FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eEdD][+-]?[0-9]+)? +ICOMPLX \(" "*{INTEGER}" "*," "*{INTEGER}" "*\) +FCOMPLX \(" "*{FLOAT}" "*," "*{FLOAT}" "*\) +STRING '([^']|'')*' + +/* Characters forming standard unit strings (jwBIQX are not used). */ +UNITSTR \[[-+*/^(). 0-9a-zA-Z]+\] + +/* Exclusive start states. */ +%x VALUE INLINE UNITS COMMENT ERROR FLUSH + +%{ +#include +#include +#include +#include +#include + +#include "fitshdr.h" +#include "wcsutil.h" + +// User data associated with yyscanner. +struct fitshdr_extra { + // Values passed to YY_INPUT. + const char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int fitshdr_scanner(const char header[], int nkeyrec, \ + int nkeyids, struct fitskeyid keyids[], int *nreject, \ + struct fitskey **keys, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; +static void nullfill(char cptr[], int len); + +// Map status return value to message. +const char *fitshdr_errmsg[] = { + "Success", + "Null fitskey pointer-pointer passed", + "Memory allocation failed", + "Fatal error returned by Flex parser"}; + +%} + +%% + char ctmp[72]; + + if (keys == 0x0) { + return FITSHDRERR_NULL_POINTER; + } + + // Allocate memory for the required number of fitskey structs. + // Recall that calloc() initializes allocated memory to zero. + struct fitskey *kptr; + if (!(kptr = *keys = calloc(nkeyrec, sizeof(struct fitskey)))) { + return FITSHDRERR_MEMORY; + } + + // Initialize returned values. + *nreject = 0; + + // Initialize keyids[]. + struct fitskeyid *iptr = keyids; + for (int j = 0; j < nkeyids; j++, iptr++) { + iptr->count = 0; + iptr->idx[0] = -1; + iptr->idx[1] = -1; + } + + int keyno = 0; + + int blank = 0; + int continuation = 0; + int end = 0; + + #ifdef WCSLIB_INT64 + #define asString(S) stringize(S) + #define stringize(S) #S + + const char *int64fmt; + if (strcmp(asString(WCSLIB_INT64), "long long int") == 0) { + int64fmt = "%lld"; + } else if (strcmp(asString(WCSLIB_INT64), "long int") == 0) { + int64fmt = "%ld"; + } else if (strcmp(asString(WCSLIB_INT64), "int") == 0) { + int64fmt = "%d"; + } else { + return FITSHDRERR_DATA_TYPE; + } + #endif + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return FITSHDRERR_FLEX_PARSER; + } + + BEGIN(INITIAL); + +^" "{80} { + // A completely blank keyrecord. + strncpy(kptr->keyword, yytext, 8); + yyless(0); + blank = 1; + BEGIN(COMMENT); + } + +^(COMMENT|HISTORY|" "{8}) { + strncpy(kptr->keyword, yytext, 8); + BEGIN(COMMENT); + } + +^END" "{77} { + strncpy(kptr->keyword, yytext, 8); + end = 1; + BEGIN(FLUSH); + } + +^END" "{5}=" "+ { + // Illegal END keyrecord. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYREC; + BEGIN(VALUE); + } + +^END" "{5} { + // Illegal END keyrecord. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYREC; + BEGIN(COMMENT); + } + +^{KEYWORD}=" "+ { + strncpy(kptr->keyword, yytext, 8); + BEGIN(VALUE); + } + +^CONTINUE" "+{STRING} { + // Continued string keyvalue. + strncpy(kptr->keyword, yytext, 8); + + if (keyno > 0 && (kptr-1)->type%10 == 8) { + // Put back the string keyvalue. + int k; + for (k = 10; yytext[k] != '\''; k++); + yyless(k); + continuation = 1; + BEGIN(VALUE); + + } else { + // Not a valid continuation. + yyless(8); + BEGIN(COMMENT); + } + } + +^{KEYWORD} { + // Keyword without value. + strncpy(kptr->keyword, yytext, 8); + BEGIN(COMMENT); + } + +^.{8}=" "+ { + // Illegal keyword, carry on regardless. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYWORD; + BEGIN(VALUE); + } + +^.{8} { + // Illegal keyword, carry on regardless. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYWORD; + BEGIN(COMMENT); + } + +" "*/\/ { + // Null keyvalue. + BEGIN(INLINE); + } + +{LOGICAL} { + // Logical keyvalue. + kptr->type = 1; + kptr->keyvalue.i = (*yytext == 'T'); + BEGIN(INLINE); + } + +{INT32} { + // 32-bit signed integer keyvalue. + kptr->type = 2; + if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + +{INT64} { + // 64-bit signed integer keyvalue (up to 18 digits). + double dtmp; + if (wcsutil_str2double(yytext, &dtmp)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + + } else if (INT_MIN <= dtmp && dtmp <= INT_MAX) { + // Can be accomodated as a 32-bit signed integer. + kptr->type = 2; + if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + } else { + // 64-bit signed integer. + kptr->type = 3; + #ifdef WCSLIB_INT64 + // Native 64-bit integer is available. + if (sscanf(yytext, int64fmt, &(kptr->keyvalue.k)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + #else + // 64-bit integer (up to 18 digits) implemented as int[3]. + kptr->keyvalue.k[2] = 0; + + sprintf(ctmp, "%%%dd%%9d", yyleng-9); + if (sscanf(yytext, ctmp, kptr->keyvalue.k+1, + kptr->keyvalue.k) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } else if (*yytext == '-') { + kptr->keyvalue.k[0] *= -1; + } + #endif + } + + BEGIN(INLINE); + } + +{INTVL} { + // Very long integer keyvalue (and 19-digit int64). + kptr->type = 4; + strcpy(ctmp, yytext); + int j, k = yyleng; + for (j = 0; j < 8; j++) { + // Read it backwards. + k -= 9; + if (k < 0) k = 0; + if (sscanf(ctmp+k, "%d", kptr->keyvalue.l+j) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + if (*yytext == '-') { + kptr->keyvalue.l[j] = -abs(kptr->keyvalue.l[j]); + } + + if (k == 0) break; + ctmp[k] = '\0'; + } + + // Can it be accomodated as a 64-bit signed integer? + if (j == 2 && abs(kptr->keyvalue.l[2]) <= 9 && + abs(kptr->keyvalue.l[1]) <= 223372036 && + kptr->keyvalue.l[0] <= 854775807 && + kptr->keyvalue.l[0] >= -854775808) { + kptr->type = 3; + + #ifdef WCSLIB_INT64 + // Native 64-bit integer is available. + kptr->keyvalue.l[2] = 0; + if (sscanf(yytext, int64fmt, &(kptr->keyvalue.k)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + #endif + } + + BEGIN(INLINE); + } + +{FLOAT} { + // Float keyvalue. + kptr->type = 5; + if (wcsutil_str2double(yytext, &(kptr->keyvalue.f))) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + +{ICOMPLX} { + // Integer complex keyvalue. + kptr->type = 6; + if (sscanf(yytext, "(%lf,%lf)", kptr->keyvalue.c, + kptr->keyvalue.c+1) < 2) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + +{FCOMPLX} { + // Floating point complex keyvalue. + kptr->type = 7; + + char *cptr; + int k; + for (cptr = ctmp, k = 1; yytext[k] != ','; cptr++, k++) { + *cptr = yytext[k]; + } + *cptr = '\0'; + + if (wcsutil_str2double(ctmp, kptr->keyvalue.c)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + for (cptr = ctmp, k++; yytext[k] != ')'; cptr++, k++) { + *cptr = yytext[k]; + } + *cptr = '\0'; + + if (wcsutil_str2double(ctmp, kptr->keyvalue.c+1)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + +{STRING} { + // String keyvalue. + kptr->type = 8; + char *cptr = kptr->keyvalue.s; + strcpy(cptr, yytext+1); + + // Squeeze out repeated quotes. + int k = 0; + for (int j = 0; j < 72; j++) { + if (k < j) { + cptr[k] = cptr[j]; + } + + if (cptr[j] == '\0') { + if (k) cptr[k-1] = '\0'; + break; + } else if (cptr[j] == '\'' && cptr[j+1] == '\'') { + j++; + } + + k++; + } + + if (*cptr) { + // Retain the initial blank in all-blank strings. + nullfill(cptr+1, 71); + } else { + nullfill(cptr, 72); + } + + BEGIN(INLINE); + } + +. { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + +" "*$ { + BEGIN(FLUSH); + } + +" "*\/" "*$ { + BEGIN(FLUSH); + } + +" "*\/" "* { + BEGIN(UNITS); + } + +" " { + kptr->status |= FITSHDR_COMMENT; + BEGIN(ERROR); + } + +. { + // Keyvalue parsing must now also be suspect. + kptr->status |= FITSHDR_COMMENT; + kptr->type = 0; + BEGIN(ERROR); + } + +{UNITSTR} { + kptr->ulen = yyleng; + yymore(); + BEGIN(COMMENT); + } + +. { + yymore(); + BEGIN(COMMENT); + } + +.* { + strcpy(kptr->comment, yytext); + nullfill(kptr->comment, 84); + BEGIN(FLUSH); + } + +.* { + if (!continuation) kptr->type = -abs(kptr->type); + + sprintf(kptr->comment, "%.80s", yyextra->hdr-80); + kptr->comment[80] = '\0'; + nullfill(kptr->comment+80, 4); + + BEGIN(FLUSH); + } + +.*\n { + // Discard the rest of the input line. + kptr->keyno = ++keyno; + + // Null-fill the keyword. + kptr->keyword[8] = '\0'; + nullfill(kptr->keyword, 12); + + // Do indexing. + iptr = keyids; + kptr->keyid = -1; + for (int j = 0; j < nkeyids; j++, iptr++) { + int k; + char *cptr = iptr->name; + cptr[8] = '\0'; + nullfill(cptr, 12); + for (k = 0; k < 8; k++, cptr++) { + if (*cptr != '.' && *cptr != kptr->keyword[k]) break; + } + + if (k == 8) { + // Found a match. + iptr->count++; + if (iptr->idx[0] == -1) { + iptr->idx[0] = keyno-1; + } else { + iptr->idx[1] = keyno-1; + } + + kptr->keyno = -abs(kptr->keyno); + if (kptr->keyid < 0) kptr->keyid = j; + } + } + + // Deal with continued strings. + if (continuation) { + // Tidy up the previous string keyvalue. + if ((kptr-1)->type == 8) (kptr-1)->type += 10; + char *cptr = (kptr-1)->keyvalue.s; + if (cptr[strlen(cptr)-1] == '&') cptr[strlen(cptr)-1] = '\0'; + + kptr->type = (kptr-1)->type + 10; + } + + // Check for keyrecords following the END keyrecord. + if (end && (end++ > 1) && !blank) { + kptr->status |= FITSHDR_TRAILER; + } + if (kptr->status) (*nreject)++; + + kptr++; + blank = 0; + continuation = 0; + + BEGIN(INITIAL); + } + +<> { + // End-of-input. + return 0; + } + +%% + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int fitshdr( + const char header[], + int nkeyrec, + int nkeyids, + struct fitskeyid keyids[], + int *nreject, + struct fitskey **keys) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct fitshdr_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = fitshdr_scanner(header, nkeyrec, nkeyids, keyids, nreject, + keys, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + +/*---------------------------------------------------------------------------- +* Pad a string with null characters. +*---------------------------------------------------------------------------*/ + +void nullfill(char cptr[], int len) + +{ + // Propagate the terminating null to the end of the string. + int j; + for (j = 0; j < len; j++) { + if (cptr[j] == '\0') { + for (int k = j+1; k < len; k++) { + cptr[k] = '\0'; + } + break; + } + } + + // Remove trailing blanks. + for (int k = j-1; k >= 0; k--) { + if (cptr[k] != ' ') break; + cptr[k] = '\0'; + } + + return; +} diff --git a/deps/wcslib/C/flexed/README b/deps/wcslib/C/flexed/README new file mode 100644 index 0000000..17ba34b --- /dev/null +++ b/deps/wcslib/C/flexed/README @@ -0,0 +1,6 @@ +This directory contains C code generated by flex 2.6.4 under KDE Neon User +Edition 5.19 (Kubuntu 18.04) from the Flex description files (*.l) in the +parent directory. + +These pre-generated source files may be used during installation if +Flex 2.5.9 or later is not available on the build host. diff --git a/deps/wcslib/C/flexed/fitshdr.c b/deps/wcslib/C/flexed/fitshdr.c new file mode 100644 index 0000000..94a5764 --- /dev/null +++ b/deps/wcslib/C/flexed/fitshdr.c @@ -0,0 +1,12372 @@ +#line 2 "fitshdr.c" + +#line 4 "fitshdr.c" + +#define _POSIX_C_SOURCE 1 +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define fitshdr_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer fitshdr_create_buffer +#endif + +#ifdef yy_delete_buffer +#define fitshdr_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer fitshdr_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define fitshdr_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer fitshdr_scan_buffer +#endif + +#ifdef yy_scan_string +#define fitshdr_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string fitshdr_scan_string +#endif + +#ifdef yy_scan_bytes +#define fitshdr_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes fitshdr_scan_bytes +#endif + +#ifdef yy_init_buffer +#define fitshdr_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer fitshdr_init_buffer +#endif + +#ifdef yy_flush_buffer +#define fitshdr_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer fitshdr_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define fitshdr_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state fitshdr_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define fitshdr_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer fitshdr_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define fitshdrpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state fitshdrpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define fitshdrpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state fitshdrpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define fitshdrensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack fitshdrensure_buffer_stack +#endif + +#ifdef yylex +#define fitshdrlex_ALREADY_DEFINED +#else +#define yylex fitshdrlex +#endif + +#ifdef yyrestart +#define fitshdrrestart_ALREADY_DEFINED +#else +#define yyrestart fitshdrrestart +#endif + +#ifdef yylex_init +#define fitshdrlex_init_ALREADY_DEFINED +#else +#define yylex_init fitshdrlex_init +#endif + +#ifdef yylex_init_extra +#define fitshdrlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra fitshdrlex_init_extra +#endif + +#ifdef yylex_destroy +#define fitshdrlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy fitshdrlex_destroy +#endif + +#ifdef yyget_debug +#define fitshdrget_debug_ALREADY_DEFINED +#else +#define yyget_debug fitshdrget_debug +#endif + +#ifdef yyset_debug +#define fitshdrset_debug_ALREADY_DEFINED +#else +#define yyset_debug fitshdrset_debug +#endif + +#ifdef yyget_extra +#define fitshdrget_extra_ALREADY_DEFINED +#else +#define yyget_extra fitshdrget_extra +#endif + +#ifdef yyset_extra +#define fitshdrset_extra_ALREADY_DEFINED +#else +#define yyset_extra fitshdrset_extra +#endif + +#ifdef yyget_in +#define fitshdrget_in_ALREADY_DEFINED +#else +#define yyget_in fitshdrget_in +#endif + +#ifdef yyset_in +#define fitshdrset_in_ALREADY_DEFINED +#else +#define yyset_in fitshdrset_in +#endif + +#ifdef yyget_out +#define fitshdrget_out_ALREADY_DEFINED +#else +#define yyget_out fitshdrget_out +#endif + +#ifdef yyset_out +#define fitshdrset_out_ALREADY_DEFINED +#else +#define yyset_out fitshdrset_out +#endif + +#ifdef yyget_leng +#define fitshdrget_leng_ALREADY_DEFINED +#else +#define yyget_leng fitshdrget_leng +#endif + +#ifdef yyget_text +#define fitshdrget_text_ALREADY_DEFINED +#else +#define yyget_text fitshdrget_text +#endif + +#ifdef yyget_lineno +#define fitshdrget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno fitshdrget_lineno +#endif + +#ifdef yyset_lineno +#define fitshdrset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno fitshdrset_lineno +#endif + +#ifdef yyget_column +#define fitshdrget_column_ALREADY_DEFINED +#else +#define yyget_column fitshdrget_column +#endif + +#ifdef yyset_column +#define fitshdrset_column_ALREADY_DEFINED +#else +#define yyset_column fitshdrset_column +#endif + +#ifdef yywrap +#define fitshdrwrap_ALREADY_DEFINED +#else +#define yywrap fitshdrwrap +#endif + +#ifdef yyalloc +#define fitshdralloc_ALREADY_DEFINED +#else +#define yyalloc fitshdralloc +#endif + +#ifdef yyrealloc +#define fitshdrrealloc_ALREADY_DEFINED +#else +#define yyrealloc fitshdrrealloc +#endif + +#ifdef yyfree +#define fitshdrfree_ALREADY_DEFINED +#else +#define yyfree fitshdrfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + +#define YY_LESS_LINENO(n) +#define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define fitshdrwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16 + }, + + { + 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 18, 17, 17, 17, 17, 17, 17, 17, + + 17, 17, 17, 17, 17, 19, 17, 17, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 17, 17, + 17, 17, 17, 17, 17, 19, 19, 20, 19, 21, + 19, 19, 22, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 17, 17, 17, 17, 19, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17 + }, + + { + 15, 23, 23, 23, 23, 23, 23, 23, 23, 23, + + 16, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 24, 23, 23, 23, 23, 23, 23, 25, + 26, 23, 23, 27, 23, 27, 28, 29, 30, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23 + }, + + { + 15, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 16, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 24, 23, 23, 23, 23, 23, 23, 25, + 26, 23, 23, 27, 23, 27, 28, 29, 30, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 32, 23, 23, 23, 23, 23, 23, 23, 23, 23, + + 23, 23, 23, 23, 32, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23 + }, + + { + 15, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 35, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 36, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33 + }, + + { + 15, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 34, 33, 33, 33, 33, 33, 33, 33, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 35, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 36, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + + 33, 33, 33, 33, 33, 33, 33, 33 + }, + + { + 15, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 16, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + + 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37 + }, + + { + 15, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 16, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 38, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37 + }, + + { + 15, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 16, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39 + + }, + + { + 15, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 16, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, + 39, 39, 39, 39, 39, 39, 39, 39 + }, + + { + 15, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40 + }, + + { + 15, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 16, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40 + }, + + { + 15, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + 15, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15 + }, + + { + 15, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -17, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -18, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 44, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -19, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -20, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -21, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + + 46, 46, 46, 46, 46, 46, 46, 46, 48, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, 43, 43, 43, 43, 43, 43, 43, 43, 43, + -22, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 45, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 46, 43, 43, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 43, 43, + 43, 43, 43, 43, 43, 46, 46, 46, 46, 46, + 46, 46, 46, 49, 46, 46, 46, 46, 46, 46, + 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, + 46, 43, 43, 43, 43, 46, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43 + }, + + { + 15, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23 + }, + + { + 15, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, 50, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, 51, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24 + }, + + { + 15, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52 + }, + + { + 15, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, 54, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, 55, -26, 55, 56, -26, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26 + }, + + { + 15, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, 58, -27, 59, 60, + 60, 60, 60, 60, 60, 60, 60, 60, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27 + }, + + { + 15, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, -28, -28, + + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28 + }, + + { + 15, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29 + + }, + + { + 15, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, 62, -30, 63, 64, + 64, 64, 64, 64, 64, 64, 64, 64, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, 65, 65, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + + 65, 65, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30 + }, + + { + 15, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, 62, -31, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, 65, 65, + + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + 65, 65, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31 + }, + + { + 15, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32 + }, + + { + 15, -33, -33, -33, -33, -33, -33, -33, -33, -33, + + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33 + }, + + { + 15, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34 + }, + + { + 15, -35, -35, -35, -35, -35, -35, -35, -35, -35, + 67, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, 68, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, 69, -35, -35, + + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35 + }, + + { + 15, -36, -36, -36, -36, -36, -36, -36, -36, -36, + 70, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, 71, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36 + }, + + { + 15, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37 + }, + + { + 15, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, 72, -38, -38, -38, -38, -38, -38, -38, + 72, 72, 72, 72, -38, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, -38, -38, + + -38, -38, -38, -38, -38, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, -38, -38, -38, 72, -38, -38, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, -38, -38, -38, -38, -38 + }, + + { + 15, 73, 73, 73, 73, 73, 73, 73, 73, 73, + -39, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73 + + }, + + { + 15, 74, 74, 74, 74, 74, 74, 74, 74, 74, + -40, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74 + }, + + { + 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75 + }, + + { + 15, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + -43, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -44, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 78, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -45, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 79, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -46, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -47, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 82, 83, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -48, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + + 77, 77, 77, 77, 77, 81, 81, 81, 84, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + }, + + { + 15, 77, 77, 77, 77, 77, 77, 77, 77, 77, + -49, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + + 77, 77, 80, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 81, 77, 77, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 77, 77, + 77, 77, 77, 77, 77, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 85, 81, 81, 81, 81, 81, 81, + 81, 77, 77, 77, 77, 81, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77 + + }, + + { + 15, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, 50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, 51, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50 + }, + + { + 15, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51 + }, + + { + 15, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, + + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, + 52, 52, 52, 52, 52, 52, 52, 52 + }, + + { + 15, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, 52, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53 + }, + + { + 15, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, 54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, 55, -54, 55, 56, -54, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54 + }, + + { + 15, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, 56, -55, 57, 57, + + 57, 57, 57, 57, 57, 57, 57, 57, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55 + }, + + { + 15, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56 + }, + + { + 15, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, 87, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, 88, -57, 89, -57, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, 91, 91, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + 91, 91, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57 + }, + + { + 15, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, -58, -58, + + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58 + }, + + { + 15, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, 62, -59, 63, 64, + 64, 64, 64, 64, 64, 64, 64, 64, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, 65, 65, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + 65, 65, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59 + + }, + + { + 15, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, 62, -60, 66, 66, + 66, 66, 66, 66, 66, 66, 66, 66, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, 65, 65, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + + 65, 65, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60 + }, + + { + 15, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, 65, 65, + + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + 65, 65, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61 + }, + + { + 15, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + + -62, -62, -62, -62, -62, -62, -62, -62, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, 65, 65, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + 65, 65, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62 + }, + + { + 15, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, 62, -63, 93, 94, + 94, 94, 94, 94, 94, 94, 94, 94, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, 65, 65, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + 65, 65, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63 + }, + + { + 15, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, 62, -64, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, 65, 65, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + 65, 65, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64 + }, + + { + 15, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, 96, -65, 96, -65, -65, 97, 97, + + 97, 97, 97, 97, 97, 97, 97, 97, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65 + }, + + { + 15, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, 62, -66, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, 65, 65, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + 65, 65, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66 + }, + + { + 15, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67 + }, + + { + 15, -68, -68, -68, -68, -68, -68, -68, -68, -68, + 67, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, 68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, 69, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68 + }, + + { + 15, -69, -69, -69, -69, -69, -69, -69, -69, -69, + 70, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, 71, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69 + + }, + + { + 15, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70 + }, + + { + 15, -71, -71, -71, -71, -71, -71, -71, -71, -71, + 70, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, 71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71 + }, + + { + 15, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, 72, -72, -72, -72, -72, -72, -72, -72, + + 72, 72, 72, 72, -72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, -72, -72, + -72, -72, -72, -72, -72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, -72, -72, 99, 72, -72, -72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, -72, -72, -72, -72, -72 + }, + + { + 15, 73, 73, 73, 73, 73, 73, 73, 73, 73, + + -73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + + 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 73, 73 + }, + + { + 15, 74, 74, 74, 74, 74, 74, 74, 74, 74, + -74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, + 74, 74, 74, 74, 74, 74, 74, 74 + }, + + { + 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75 + }, + + { + 15, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -77, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -78, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 101, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -79, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 102, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -80, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 103, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -81, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -82, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 106, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + -83, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 107, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -84, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 108, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, 100, 100, 100, 100, 100, 100, 100, 100, 100, + -85, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 104, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 105, 100, 100, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 100, 100, + 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 109, 105, 105, 105, 105, 105, + 105, 100, 100, 100, 100, 105, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 15, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, 110, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, 111, -86, -86, -86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, 91, 91, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + 91, 91, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86 + }, + + { + 15, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, 87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, 88, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 15, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, 112, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, 113, -88, 113, 114, -88, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, -88, -88, + + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88 + }, + + { + 15, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, 110, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, 111, -89, -89, -89, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, 91, 91, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + 91, 91, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89 + + }, + + { + 15, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, 87, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, 88, -90, 89, -90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, 91, 91, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + + 91, 91, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 15, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, 117, -91, 117, -91, -91, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91 + }, + + { + 15, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, 65, 65, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + 65, 65, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92 + }, + + { + 15, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, 62, -93, 119, 120, + 120, 120, 120, 120, 120, 120, 120, 120, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, 65, 65, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + 65, 65, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 15, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, 62, -94, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, 65, 65, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + 65, 65, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94 + }, + + { + 15, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, 62, -95, 122, 122, + + 122, 122, 122, 122, 122, 122, 122, 122, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, 65, 65, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + 65, 65, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95 + }, + + { + 15, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96 + }, + + { + 15, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97 + }, + + { + 15, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, 62, -98, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, -98, -98, + + -98, -98, -98, -98, -98, -98, -98, -98, 65, 65, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + 65, 65, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98 + }, + + { + 15, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99 + + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -100, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -101, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 125, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -102, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 126, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + -103, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 127, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -104, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 128, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -105, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -106, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 131, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -107, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, + 130, 130, 130, 132, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -108, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 133, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 15, 124, 124, 124, 124, 124, 124, 124, 124, 124, + -109, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 129, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 130, 124, 124, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 124, 124, + 124, 124, 124, 124, 124, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 134, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 124, 124, 124, 124, 130, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + + }, + + { + 15, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, 110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, 111, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110 + }, + + { + 15, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, 135, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, 136, -111, 136, 114, -111, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111 + }, + + { + 15, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, 112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, 113, -112, 113, 114, -112, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112 + }, + + { + 15, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, 114, -113, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113 + }, + + { + 15, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114 + }, + + { + 15, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, 139, -115, -115, -115, -115, -115, -115, -115, + -115, 140, -115, -115, -115, -115, 141, -115, 142, 142, + + 142, 142, 142, 142, 142, 142, 142, 142, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, 143, 143, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + 143, 143, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115 + }, + + { + 15, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, 110, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, 111, -116, -116, -116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, 91, 91, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + 91, 91, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116 + }, + + { + 15, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117 + }, + + { + 15, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, 110, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, 111, -118, -118, -118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, -118, -118, + + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118 + }, + + { + 15, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, 62, -119, 144, 145, + 145, 145, 145, 145, 145, 145, 145, 145, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, 65, 65, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + 65, 65, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119 + + }, + + { + 15, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, 62, -120, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, 65, 65, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + + 65, 65, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120 + }, + + { + 15, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, 62, -121, 147, 147, + 147, 147, 147, 147, 147, 147, 147, 147, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, 65, 65, + + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + 65, 65, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121 + }, + + { + 15, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, 62, -122, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, 65, 65, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + 65, 65, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122 + }, + + { + 15, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, 62, -123, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, 65, 65, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + 65, 65, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -124, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -125, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 151, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -126, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 152, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -127, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 153, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -128, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 154, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -129, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 155, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -130, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -131, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + + 157, 157, 157, 157, 157, 157, 157, 157, 158, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -132, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 159, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + -133, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 160, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, 150, 150, 150, 150, 150, 150, 150, 150, 150, + -134, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 156, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 157, 150, 150, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 150, 150, + 150, 150, 150, 150, 150, 157, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, + + 157, 157, 161, 157, 157, 157, 157, 157, 157, 157, + 157, 150, 150, 150, 150, 157, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 150, 150, 150, 150 + }, + + { + 15, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, 135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, 136, -135, 136, 114, -135, 137, 137, + + 137, 137, 137, 137, 137, 137, 137, 137, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135 + }, + + { + 15, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, 114, -136, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136 + }, + + { + 15, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, 162, -137, -137, -137, -137, -137, -137, -137, + -137, 163, -137, -137, -137, -137, 141, -137, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, 143, 143, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + 143, 143, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137 + }, + + { + 15, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, 162, -138, -138, -138, -138, -138, -138, -138, + -138, 163, -138, -138, -138, -138, -138, -138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, -138, -138, + + -138, -138, -138, -138, -138, -138, -138, -138, 143, 143, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + 143, 143, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138 + }, + + { + 15, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + + -139, -139, 139, -139, -139, -139, -139, -139, -139, -139, + -139, 140, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139 + + }, + + { + 15, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140 + }, + + { + 15, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, 162, -141, -141, -141, -141, -141, -141, -141, + -141, 163, -141, -141, -141, -141, -141, -141, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, 143, 143, + + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + 143, 143, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141 + }, + + { + 15, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, 139, -142, -142, -142, -142, -142, -142, -142, + + -142, 140, -142, -142, -142, -142, 141, -142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, 143, 143, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + 143, 143, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142 + }, + + { + 15, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, 166, -143, 166, -143, -143, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143 + }, + + { + 15, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, 62, -144, 168, 169, + 169, 169, 169, 169, 169, 169, 169, 169, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, 65, 65, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + 65, 65, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144 + }, + + { + 15, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, 62, -145, 170, 170, + + 170, 170, 170, 170, 170, 170, 170, 170, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, 65, 65, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + 65, 65, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145 + }, + + { + 15, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, 62, -146, 171, 171, + 171, 171, 171, 171, 171, 171, 171, 171, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, 65, 65, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + 65, 65, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146 + }, + + { + 15, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, 62, -147, 172, 172, + 172, 172, 172, 172, 172, 172, 172, 172, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, 65, 65, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + 65, 65, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147 + }, + + { + 15, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, 62, -148, 173, 173, + 173, 173, 173, 173, 173, 173, 173, 173, -148, -148, + + -148, -148, -148, -148, -148, -148, -148, -148, 65, 65, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + 65, 65, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148 + }, + + { + 15, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, 62, -149, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, 65, 65, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + 65, 65, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149 + + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -150, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -151, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 176, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -152, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 177, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + -153, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 178, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -154, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 179, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -155, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 180, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -156, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 181, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -157, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -158, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 184, 183, 183, 183, 183, 183, + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -159, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 185, 183, 183, 183, 183, + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -160, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 186, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, 175, 175, 175, 175, 175, 175, 175, 175, 175, + -161, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 182, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 183, 175, 175, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 175, 175, + 175, 175, 175, 175, 175, 183, 183, 183, 183, 183, + + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, + 183, 175, 175, 175, 175, 183, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 175, 175, 175, 175, 175, 175, 175 + }, + + { + 15, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, 162, -162, -162, -162, -162, -162, -162, -162, + + -162, 163, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162 + }, + + { + 15, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163 + }, + + { + 15, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, 162, -164, -164, -164, -164, -164, -164, -164, + -164, 163, -164, -164, -164, -164, 141, -164, 164, 164, + 164, 164, 164, 164, 164, 164, 164, 164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, 143, 143, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + 143, 143, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164 + }, + + { + 15, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, 162, -165, -165, -165, -165, -165, -165, -165, + -165, 163, -165, -165, -165, -165, -165, -165, 165, 165, + + 165, 165, 165, 165, 165, 165, 165, 165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, 143, 143, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + 143, 143, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165 + }, + + { + 15, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166 + }, + + { + 15, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, 162, -167, -167, -167, -167, -167, -167, -167, + -167, 163, -167, -167, -167, -167, -167, -167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167 + }, + + { + 15, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, 62, -168, 187, 188, + 188, 188, 188, 188, 188, 188, 188, 188, -168, -168, + + -168, -168, -168, -168, -168, -168, -168, -168, 65, 65, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + 65, 65, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168 + }, + + { + 15, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, 62, -169, 189, 189, + 189, 189, 189, 189, 189, 189, 189, 189, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, 65, 65, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + 65, 65, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169 + + }, + + { + 15, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, 62, -170, 190, 190, + 190, 190, 190, 190, 190, 190, 190, 190, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, 65, 65, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + + 65, 65, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170 + }, + + { + 15, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, 62, -171, 191, 191, + 191, 191, 191, 191, 191, 191, 191, 191, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, 65, 65, + + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + 65, 65, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171 + }, + + { + 15, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, 62, -172, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, 65, 65, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + 65, 65, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172 + }, + + { + 15, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, 62, -173, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, 65, 65, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + 65, 65, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173 + }, + + { + 15, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, 62, -174, 194, 194, + 194, 194, 194, 194, 194, 194, 194, 194, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, 65, 65, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + 65, 65, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -175, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -176, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 196, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -177, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -178, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -179, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -180, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -181, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -182, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 197, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + -183, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, + 195, 195, 195, 195, 195, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -184, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, + 195, 195, 195, 195, 195, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -185, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 198, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 197, 195, 195, 197, 197, + + 197, 197, 197, 197, 197, 197, 197, 197, 195, 195, + 195, 195, 195, 195, 195, 197, 197, 197, 197, 199, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 195, 195, 195, 195, 197, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, 195, 195, 195, 195, 195, 195, 195, 195, 195, + -186, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 200, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + + 195, 195, 195, 195, 195, 195, 195, 195 + }, + + { + 15, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, 62, -187, 201, 202, + 202, 202, 202, 202, 202, 202, 202, 202, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, 65, 65, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + 65, 65, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187 + }, + + { + 15, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, 62, -188, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, -188, -188, + + -188, -188, -188, -188, -188, -188, -188, -188, 65, 65, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + 65, 65, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188 + }, + + { + 15, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, 62, -189, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, 65, 65, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + 65, 65, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189 + + }, + + { + 15, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, 62, -190, 205, 205, + 205, 205, 205, 205, 205, 205, 205, 205, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, 65, 65, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + + 65, 65, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190 + }, + + { + 15, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, 62, -191, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, 65, 65, + + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + 65, 65, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191 + }, + + { + 15, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, 62, -192, 207, 207, + 207, 207, 207, 207, 207, 207, 207, 207, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, 65, 65, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 65, 65, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192 + }, + + { + 15, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, 62, -193, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, 65, 65, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + 65, 65, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193 + }, + + { + 15, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, 62, -194, 209, 209, + 209, 209, 209, 209, 209, 209, 209, 209, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, 65, 65, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + 65, 65, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194 + }, + + { + 15, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, 210, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195 + }, + + { + 15, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, 211, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, 210, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196 + }, + + { + 15, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, 212, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197 + }, + + { + 15, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + + -198, 212, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198 + }, + + { + 15, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, 213, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, 212, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199 + + }, + + { + 15, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, 214, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, 215, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200 + }, + + { + 15, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, 62, -201, 216, 217, + 217, 217, 217, 217, 217, 217, 217, 217, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, 65, 65, + + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + 65, 65, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201 + }, + + { + 15, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, 62, -202, 218, 218, + 218, 218, 218, 218, 218, 218, 218, 218, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, 65, 65, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + 65, 65, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202 + }, + + { + 15, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, 62, -203, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, 65, 65, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + 65, 65, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203 + }, + + { + 15, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, 62, -204, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, 65, 65, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + 65, 65, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204 + }, + + { + 15, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, 62, -205, 221, 221, + + 221, 221, 221, 221, 221, 221, 221, 221, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, 65, 65, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + 65, 65, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205 + }, + + { + 15, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, 62, -206, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, 65, 65, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + 65, 65, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206 + }, + + { + 15, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, 62, -207, 223, 223, + 223, 223, 223, 223, 223, 223, 223, 223, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, 65, 65, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + 65, 65, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207 + }, + + { + 15, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, 62, -208, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 224, -208, -208, + + -208, -208, -208, -208, -208, -208, -208, -208, 65, 65, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + 65, 65, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208 + }, + + { + 15, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, 62, -209, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 65, 65, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + 65, 65, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209 + + }, + + { + 15, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, 226, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210 + }, + + { + 15, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, 227, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211 + }, + + { + 15, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, 228, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212 + }, + + { + 15, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, 229, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 + }, + + { + 15, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, 230, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214 + }, + + { + 15, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, 231, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215 + }, + + { + 15, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, 62, -216, 232, 233, + 233, 233, 233, 233, 233, 233, 233, 233, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, 65, 65, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + 65, 65, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216 + }, + + { + 15, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, 62, -217, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, 65, 65, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + 65, 65, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217 + }, + + { + 15, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, 62, -218, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, -218, -218, + + -218, -218, -218, -218, -218, -218, -218, -218, 65, 65, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + 65, 65, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218 + }, + + { + 15, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, 62, -219, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, 65, 65, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + 65, 65, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219 + + }, + + { + 15, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, 62, -220, 237, 237, + 237, 237, 237, 237, 237, 237, 237, 237, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, 65, 65, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + + 65, 65, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220 + }, + + { + 15, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, 62, -221, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, 65, 65, + + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + 65, 65, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221 + }, + + { + 15, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + + -222, -222, -222, -222, -222, -222, 62, -222, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, 65, 65, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + 65, 65, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222 + }, + + { + 15, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, 62, -223, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, 65, 65, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + 65, 65, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223 + }, + + { + 15, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, 62, -224, 241, 241, + 241, 241, 241, 241, 241, 241, 241, 241, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, 65, 65, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + 65, 65, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224 + }, + + { + 15, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, 62, -225, 242, 242, + + 242, 242, 242, 242, 242, 242, 242, 242, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, 65, 65, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + 65, 65, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225 + }, + + { + 15, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, 226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226 + }, + + { + 15, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, 243, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227 + }, + + { + 15, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, 228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228 + }, + + { + 15, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + + -229, -229, 213, -229, -229, -229, -229, -229, -229, 244, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229 + + }, + + { + 15, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, 245, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230 + }, + + { + 15, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, 231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231 + }, + + { + 15, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + + -232, -232, -232, -232, -232, -232, 62, -232, 246, 247, + 247, 247, 247, 247, 247, 247, 247, 247, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, 65, 65, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + 65, 65, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232 + }, + + { + 15, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, 62, -233, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 65, 65, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + 65, 65, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233 + }, + + { + 15, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, 62, -234, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, 65, 65, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + 65, 65, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234 + }, + + { + 15, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, 62, -235, 250, 250, + + 250, 250, 250, 250, 250, 250, 250, 250, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, 65, 65, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + 65, 65, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235 + }, + + { + 15, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, 62, -236, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, 65, 65, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + 65, 65, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236 + }, + + { + 15, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, 62, -237, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, 65, 65, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + 65, 65, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237 + }, + + { + 15, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, 62, -238, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, -238, -238, + + -238, -238, -238, -238, -238, -238, -238, -238, 65, 65, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + 65, 65, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238 + }, + + { + 15, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, 62, -239, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 65, 65, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + 65, 65, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239 + + }, + + { + 15, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, 62, -240, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, 65, 65, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + + 65, 65, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240 + }, + + { + 15, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, 62, -241, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, 65, 65, + + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + 65, 65, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241 + }, + + { + 15, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + + -242, -242, -242, -242, -242, -242, 62, -242, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, 65, 65, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + 65, 65, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242 + }, + + { + 15, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, 258, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243 + }, + + { + 15, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259 + }, + + { + 15, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, 261, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245 + }, + + { + 15, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, 62, -246, 262, 263, + 263, 263, 263, 263, 263, 263, 263, 263, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, 65, 65, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + 65, 65, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246 + }, + + { + 15, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, 62, -247, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, 65, 65, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + 65, 65, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247 + }, + + { + 15, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, 62, -248, 265, 265, + 265, 265, 265, 265, 265, 265, 265, 265, -248, -248, + + -248, -248, -248, -248, -248, -248, -248, -248, 65, 65, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + 65, 65, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248 + }, + + { + 15, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, 62, -249, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, 65, 65, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + 65, 65, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249 + + }, + + { + 15, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, 62, -250, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 65, 65, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + + 65, 65, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250 + }, + + { + 15, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, 62, -251, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, 65, 65, + + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + 65, 65, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251 + }, + + { + 15, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + + -252, -252, -252, -252, -252, -252, 62, -252, 269, 269, + 269, 269, 269, 269, 269, 269, 269, 269, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, 65, 65, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + 65, 65, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252 + }, + + { + 15, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, 62, -253, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, 65, 65, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + 65, 65, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253 + }, + + { + 15, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, 62, -254, 271, 271, + 271, 271, 271, 271, 271, 271, 271, 271, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, 65, 65, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + 65, 65, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254 + }, + + { + 15, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, 62, -255, 272, 272, + + 272, 272, 272, 272, 272, 272, 272, 272, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, 65, 65, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + 65, 65, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255 + }, + + { + 15, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, 62, -256, 273, 273, + 273, 273, 273, 273, 273, 273, 273, 273, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, 65, 65, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + 65, 65, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256 + }, + + { + 15, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, 62, -257, 274, 274, + 274, 274, 274, 274, 274, 274, 274, 274, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, 65, 65, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + 65, 65, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257 + }, + + { + 15, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, 275, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258 + }, + + { + 15, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + + 259, 259, 259, 259, 259, 259, 259, 259, 259, 260, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259 + + }, + + { + 15, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, 259, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260 + }, + + { + 15, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, 276, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261 + }, + + { + 15, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + + -262, -262, -262, -262, -262, -262, 62, -262, 277, 278, + 278, 278, 278, 278, 278, 278, 278, 278, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, 65, 65, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + 65, 65, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262 + }, + + { + 15, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, 62, -263, 279, 279, + 279, 279, 279, 279, 279, 279, 279, 279, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, 65, 65, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + 65, 65, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263 + }, + + { + 15, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, 62, -264, 280, 280, + 280, 280, 280, 280, 280, 280, 280, 280, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, 65, 65, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + 65, 65, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264 + }, + + { + 15, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, 62, -265, 281, 281, + + 281, 281, 281, 281, 281, 281, 281, 281, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, 65, 65, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + 65, 65, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265 + }, + + { + 15, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, 62, -266, 282, 282, + 282, 282, 282, 282, 282, 282, 282, 282, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, 65, 65, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + 65, 65, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266 + }, + + { + 15, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, 62, -267, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 65, 65, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + 65, 65, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267 + }, + + { + 15, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, 62, -268, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, -268, -268, + + -268, -268, -268, -268, -268, -268, -268, -268, 65, 65, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + 65, 65, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268 + }, + + { + 15, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, 62, -269, 285, 285, + 285, 285, 285, 285, 285, 285, 285, 285, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, 65, 65, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + 65, 65, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269 + + }, + + { + 15, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, 62, -270, 286, 286, + 286, 286, 286, 286, 286, 286, 286, 286, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, 65, 65, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + + 65, 65, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270 + }, + + { + 15, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, 62, -271, 287, 287, + 287, 287, 287, 287, 287, 287, 287, 287, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 65, 65, + + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + 65, 65, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271 + }, + + { + 15, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + + -272, -272, -272, -272, -272, -272, 62, -272, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, 65, 65, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + 65, 65, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272 + }, + + { + 15, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, 62, -273, 289, 289, + 289, 289, 289, 289, 289, 289, 289, 289, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, 65, 65, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + 65, 65, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273 + }, + + { + 15, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, 62, -274, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, 65, 65, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + 65, 65, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274 + }, + + { + 15, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, 291, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275 + }, + + { + 15, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, 292, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276 + }, + + { + 15, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, 62, -277, 293, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, 65, 65, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + 65, 65, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277 + }, + + { + 15, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, 62, -278, 295, 295, + 295, 295, 295, 295, 295, 295, 295, 295, -278, -278, + + -278, -278, -278, -278, -278, -278, -278, -278, 65, 65, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + 65, 65, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278 + }, + + { + 15, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, 62, -279, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, 65, 65, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + 65, 65, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279 + + }, + + { + 15, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, 62, -280, 297, 297, + 297, 297, 297, 297, 297, 297, 297, 297, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 65, 65, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + + 65, 65, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280 + }, + + { + 15, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, 62, -281, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, 65, 65, + + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + 65, 65, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281 + }, + + { + 15, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + + -282, -282, -282, -282, -282, -282, 62, -282, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, 65, 65, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + 65, 65, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282 + }, + + { + 15, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, 62, -283, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, 65, 65, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + 65, 65, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283 + }, + + { + 15, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, 62, -284, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, 65, 65, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + 65, 65, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 + }, + + { + 15, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, 62, -285, 302, 302, + + 302, 302, 302, 302, 302, 302, 302, 302, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, 65, 65, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + 65, 65, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285 + }, + + { + 15, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, 62, -286, 303, 303, + 303, 303, 303, 303, 303, 303, 303, 303, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 65, 65, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + 65, 65, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286 + }, + + { + 15, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, 62, -287, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, 65, 65, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + 65, 65, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287 + }, + + { + 15, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, 62, -288, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, -288, -288, + + -288, -288, -288, -288, -288, -288, -288, -288, 65, 65, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + 65, 65, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288 + }, + + { + 15, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, 62, -289, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 306, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, 65, 65, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + 65, 65, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289 + + }, + + { + 15, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, 62, -290, 307, 307, + 307, 307, 307, 307, 307, 307, 307, 307, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, 65, 65, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + + 65, 65, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290 + }, + + { + 15, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, 308, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291 + }, + + { + 15, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, 309, -292, -292, -292, -292, -292, -292, -292, + + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292 + }, + + { + 15, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, 62, -293, 310, 311, + 311, 311, 311, 311, 311, 311, 311, 311, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 65, 65, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 65, 65, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293 + }, + + { + 15, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, 62, -294, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, 65, 65, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + 65, 65, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294 + }, + + { + 15, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, 62, -295, 313, 313, + + 313, 313, 313, 313, 313, 313, 313, 313, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, 65, 65, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + 65, 65, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295 + }, + + { + 15, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, 62, -296, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, 65, 65, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + 65, 65, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296 + }, + + { + 15, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, 62, -297, 315, 315, + 315, 315, 315, 315, 315, 315, 315, 315, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, 65, 65, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + 65, 65, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297 + }, + + { + 15, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, 62, -298, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, -298, -298, + + -298, -298, -298, -298, -298, -298, -298, -298, 65, 65, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + 65, 65, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298 + }, + + { + 15, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, 62, -299, 317, 317, + 317, 317, 317, 317, 317, 317, 317, 317, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, 65, 65, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + 65, 65, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299 + + }, + + { + 15, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, 62, -300, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, 65, 65, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + + 65, 65, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300 + }, + + { + 15, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, 62, -301, 319, 319, + 319, 319, 319, 319, 319, 319, 319, 319, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, 65, 65, + + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + 65, 65, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301 + }, + + { + 15, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + + -302, -302, -302, -302, -302, -302, 62, -302, 320, 320, + 320, 320, 320, 320, 320, 320, 320, 320, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, 65, 65, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + 65, 65, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302 + }, + + { + 15, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, 62, -303, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, 65, 65, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + 65, 65, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303 + }, + + { + 15, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, 62, -304, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, 65, 65, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + 65, 65, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304 + }, + + { + 15, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, 62, -305, 323, 323, + + 323, 323, 323, 323, 323, 323, 323, 323, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, 65, 65, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + 65, 65, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305 + }, + + { + 15, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, 62, -306, 324, 324, + 324, 324, 324, 324, 324, 324, 324, 324, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, 65, 65, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + 65, 65, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306 + }, + + { + 15, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, 62, -307, 325, 325, + 325, 325, 325, 325, 325, 325, 325, 325, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, 65, 65, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + 65, 65, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307 + }, + + { + 15, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, 326, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308 + }, + + { + 15, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + + -309, -309, 327, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309 + + }, + + { + 15, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, 62, -310, 328, 329, + 329, 329, 329, 329, 329, 329, 329, 329, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, 65, 65, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + + 65, 65, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310 + }, + + { + 15, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, 62, -311, 330, 330, + 330, 330, 330, 330, 330, 330, 330, 330, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, 65, 65, + + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + 65, 65, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311 + }, + + { + 15, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + + -312, -312, -312, -312, -312, -312, 62, -312, 331, 331, + 331, 331, 331, 331, 331, 331, 331, 331, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, 65, 65, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + 65, 65, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312 + }, + + { + 15, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, 62, -313, 332, 332, + 332, 332, 332, 332, 332, 332, 332, 332, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, 65, 65, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + 65, 65, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313 + }, + + { + 15, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, 62, -314, 333, 333, + 333, 333, 333, 333, 333, 333, 333, 333, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, 65, 65, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + 65, 65, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314 + }, + + { + 15, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, 62, -315, 334, 334, + + 334, 334, 334, 334, 334, 334, 334, 334, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, 65, 65, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + 65, 65, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315 + }, + + { + 15, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, 62, -316, 335, 335, + 335, 335, 335, 335, 335, 335, 335, 335, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, 65, 65, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + 65, 65, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316 + }, + + { + 15, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, 62, -317, 336, 336, + 336, 336, 336, 336, 336, 336, 336, 336, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, 65, 65, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + 65, 65, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317 + }, + + { + 15, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, 62, -318, 337, 337, + 337, 337, 337, 337, 337, 337, 337, 337, -318, -318, + + -318, -318, -318, -318, -318, -318, -318, -318, 65, 65, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + 65, 65, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318 + }, + + { + 15, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, 62, -319, 338, 338, + 338, 338, 338, 338, 338, 338, 338, 338, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, 65, 65, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + 65, 65, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319 + + }, + + { + 15, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, 62, -320, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, 65, 65, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + + 65, 65, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320 + }, + + { + 15, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, 62, -321, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, 65, 65, + + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + 65, 65, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321 + }, + + { + 15, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + + -322, -322, -322, -322, -322, -322, 62, -322, 341, 341, + 341, 341, 341, 341, 341, 341, 341, 341, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, 65, 65, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + 65, 65, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322 + }, + + { + 15, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, 62, -323, 342, 342, + 342, 342, 342, 342, 342, 342, 342, 342, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, 65, 65, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + 65, 65, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323 + }, + + { + 15, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, 62, -324, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, 65, 65, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + 65, 65, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324 + }, + + { + 15, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, 62, -325, 344, 344, + + 344, 344, 344, 344, 344, 344, 344, 344, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, 65, 65, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + 65, 65, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325 + }, + + { + 15, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, 345, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326 + }, + + { + 15, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, 346, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327 + }, + + { + 15, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, 62, -328, 347, 348, + 348, 348, 348, 348, 348, 348, 348, 348, -328, -328, + + -328, -328, -328, -328, -328, -328, -328, -328, 65, 65, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + 65, 65, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328 + }, + + { + 15, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, 62, -329, 349, 349, + 349, 349, 349, 349, 349, 349, 349, 349, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, 65, 65, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + 65, 65, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329 + + }, + + { + 15, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, 62, -330, 350, 350, + 350, 350, 350, 350, 350, 350, 350, 350, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, 65, 65, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + + 65, 65, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330 + }, + + { + 15, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, 62, -331, 351, 351, + 351, 351, 351, 351, 351, 351, 351, 351, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, 65, 65, + + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + 65, 65, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331 + }, + + { + 15, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + + -332, -332, -332, -332, -332, -332, 62, -332, 352, 352, + 352, 352, 352, 352, 352, 352, 352, 352, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, 65, 65, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + 65, 65, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332 + }, + + { + 15, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, 62, -333, 353, 353, + 353, 353, 353, 353, 353, 353, 353, 353, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, 65, 65, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + 65, 65, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333 + }, + + { + 15, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, 62, -334, 354, 354, + 354, 354, 354, 354, 354, 354, 354, 354, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, 65, 65, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + 65, 65, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334 + }, + + { + 15, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, 62, -335, 355, 355, + + 355, 355, 355, 355, 355, 355, 355, 355, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, 65, 65, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + 65, 65, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335 + }, + + { + 15, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, 62, -336, 356, 356, + 356, 356, 356, 356, 356, 356, 356, 356, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, 65, 65, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + 65, 65, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336 + }, + + { + 15, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, 62, -337, 357, 357, + 357, 357, 357, 357, 357, 357, 357, 357, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, 65, 65, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + 65, 65, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337 + }, + + { + 15, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, 62, -338, 358, 358, + 358, 358, 358, 358, 358, 358, 358, 358, -338, -338, + + -338, -338, -338, -338, -338, -338, -338, -338, 65, 65, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + 65, 65, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338 + }, + + { + 15, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, 62, -339, 359, 359, + 359, 359, 359, 359, 359, 359, 359, 359, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, 65, 65, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + 65, 65, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339 + + }, + + { + 15, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, 62, -340, 360, 360, + 360, 360, 360, 360, 360, 360, 360, 360, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, 65, 65, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + + 65, 65, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340 + }, + + { + 15, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, 62, -341, 361, 361, + 361, 361, 361, 361, 361, 361, 361, 361, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, 65, 65, + + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + 65, 65, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341 + }, + + { + 15, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + + -342, -342, -342, -342, -342, -342, 62, -342, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, 65, 65, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + 65, 65, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342 + }, + + { + 15, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, 62, -343, 363, 363, + 363, 363, 363, 363, 363, 363, 363, 363, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, 65, 65, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + 65, 65, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343 + }, + + { + 15, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, 62, -344, 364, 364, + 364, 364, 364, 364, 364, 364, 364, 364, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, 65, 65, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + 65, 65, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344 + }, + + { + 15, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, 365, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345 + }, + + { + 15, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, 366, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346 + }, + + { + 15, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, 62, -347, 367, 368, + 368, 368, 368, 368, 368, 368, 368, 368, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, 65, 65, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + 65, 65, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347 + }, + + { + 15, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, 62, -348, 369, 369, + 369, 369, 369, 369, 369, 369, 369, 369, -348, -348, + + -348, -348, -348, -348, -348, -348, -348, -348, 65, 65, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + 65, 65, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348 + }, + + { + 15, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, 62, -349, 370, 370, + 370, 370, 370, 370, 370, 370, 370, 370, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, 65, 65, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + 65, 65, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349 + + }, + + { + 15, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, 62, -350, 371, 371, + 371, 371, 371, 371, 371, 371, 371, 371, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, 65, 65, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + + 65, 65, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350 + }, + + { + 15, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, 62, -351, 372, 372, + 372, 372, 372, 372, 372, 372, 372, 372, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, 65, 65, + + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + 65, 65, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351 + }, + + { + 15, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + + -352, -352, -352, -352, -352, -352, 62, -352, 373, 373, + 373, 373, 373, 373, 373, 373, 373, 373, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, 65, 65, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + 65, 65, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352 + }, + + { + 15, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, 62, -353, 374, 374, + 374, 374, 374, 374, 374, 374, 374, 374, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, 65, 65, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + 65, 65, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353 + }, + + { + 15, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, 62, -354, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, 65, 65, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + 65, 65, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354 + }, + + { + 15, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, 62, -355, 376, 376, + + 376, 376, 376, 376, 376, 376, 376, 376, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, 65, 65, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + 65, 65, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355 + }, + + { + 15, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, 62, -356, 377, 377, + 377, 377, 377, 377, 377, 377, 377, 377, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, 65, 65, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + 65, 65, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356 + }, + + { + 15, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, 62, -357, 378, 378, + 378, 378, 378, 378, 378, 378, 378, 378, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, 65, 65, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + 65, 65, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357 + }, + + { + 15, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, 62, -358, 379, 379, + 379, 379, 379, 379, 379, 379, 379, 379, -358, -358, + + -358, -358, -358, -358, -358, -358, -358, -358, 65, 65, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + 65, 65, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358 + }, + + { + 15, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, 62, -359, 380, 380, + 380, 380, 380, 380, 380, 380, 380, 380, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, 65, 65, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + 65, 65, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359 + + }, + + { + 15, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, 62, -360, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, 65, 65, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + + 65, 65, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360 + }, + + { + 15, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, 62, -361, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, 65, 65, + + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + 65, 65, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361 + }, + + { + 15, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + + -362, -362, -362, -362, -362, -362, 62, -362, 383, 383, + 383, 383, 383, 383, 383, 383, 383, 383, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, 65, 65, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + 65, 65, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362 + }, + + { + 15, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, 62, -363, 384, 384, + 384, 384, 384, 384, 384, 384, 384, 384, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, 65, 65, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + 65, 65, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363 + }, + + { + 15, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, 62, -364, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, 65, 65, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + 65, 65, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364 + }, + + { + 15, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, 386, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365 + }, + + { + 15, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, 387, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366 + }, + + { + 15, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, 62, -367, 388, 389, + 389, 389, 389, 389, 389, 389, 389, 389, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, 65, 65, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + 65, 65, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367 + }, + + { + 15, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, 62, -368, 390, 390, + 390, 390, 390, 390, 390, 390, 390, 390, -368, -368, + + -368, -368, -368, -368, -368, -368, -368, -368, 65, 65, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + 65, 65, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368 + }, + + { + 15, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, 62, -369, 391, 391, + 391, 391, 391, 391, 391, 391, 391, 391, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, 65, 65, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + 65, 65, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369 + + }, + + { + 15, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, 62, -370, 392, 392, + 392, 392, 392, 392, 392, 392, 392, 392, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, 65, 65, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + + 65, 65, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370 + }, + + { + 15, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, 62, -371, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, 65, 65, + + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + 65, 65, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371 + }, + + { + 15, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + + -372, -372, -372, -372, -372, -372, 62, -372, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, 65, 65, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + 65, 65, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372 + }, + + { + 15, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, 62, -373, 395, 395, + 395, 395, 395, 395, 395, 395, 395, 395, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, 65, 65, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + 65, 65, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373 + }, + + { + 15, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, 62, -374, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, 65, 65, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + 65, 65, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374 + }, + + { + 15, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, 62, -375, 397, 397, + + 397, 397, 397, 397, 397, 397, 397, 397, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, 65, 65, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + 65, 65, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375 + }, + + { + 15, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, 62, -376, 398, 398, + 398, 398, 398, 398, 398, 398, 398, 398, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, 65, 65, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + 65, 65, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376 + }, + + { + 15, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, 62, -377, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, 65, 65, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + 65, 65, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377 + }, + + { + 15, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, 62, -378, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, -378, -378, + + -378, -378, -378, -378, -378, -378, -378, -378, 65, 65, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + 65, 65, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378 + }, + + { + 15, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, 62, -379, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, 65, 65, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + 65, 65, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379 + + }, + + { + 15, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, 62, -380, 402, 402, + 402, 402, 402, 402, 402, 402, 402, 402, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, 65, 65, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + + 65, 65, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380 + }, + + { + 15, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, 62, -381, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, 65, 65, + + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + 65, 65, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381 + }, + + { + 15, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + + -382, -382, -382, -382, -382, -382, 62, -382, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, 65, 65, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + 65, 65, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382 + }, + + { + 15, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, 62, -383, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, 65, 65, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + 65, 65, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383 + }, + + { + 15, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, 62, -384, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, 65, 65, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + 65, 65, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384 + }, + + { + 15, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, 62, -385, 407, 407, + + 407, 407, 407, 407, 407, 407, 407, 407, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, 65, 65, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + 65, 65, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385 + }, + + { + 15, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, 408, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386 + }, + + { + 15, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, 409, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387 + }, + + { + 15, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, 62, -388, 410, 411, + 411, 411, 411, 411, 411, 411, 411, 411, -388, -388, + + -388, -388, -388, -388, -388, -388, -388, -388, 65, 65, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + 65, 65, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388 + }, + + { + 15, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, 62, -389, 412, 412, + 412, 412, 412, 412, 412, 412, 412, 412, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, 65, 65, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + 65, 65, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389 + + }, + + { + 15, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, 62, -390, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, 65, 65, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + + 65, 65, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390 + }, + + { + 15, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, 62, -391, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, 65, 65, + + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + 65, 65, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391 + }, + + { + 15, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + + -392, -392, -392, -392, -392, -392, 62, -392, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, 65, 65, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + 65, 65, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392 + }, + + { + 15, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, 62, -393, 416, 416, + 416, 416, 416, 416, 416, 416, 416, 416, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, 65, 65, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + 65, 65, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393 + }, + + { + 15, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, 62, -394, 417, 417, + 417, 417, 417, 417, 417, 417, 417, 417, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, 65, 65, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + 65, 65, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394 + }, + + { + 15, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, 62, -395, 418, 418, + + 418, 418, 418, 418, 418, 418, 418, 418, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, 65, 65, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + 65, 65, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395 + }, + + { + 15, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, 62, -396, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, 65, 65, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + 65, 65, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396 + }, + + { + 15, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, 62, -397, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, 65, 65, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + 65, 65, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397 + }, + + { + 15, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, 62, -398, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, -398, -398, + + -398, -398, -398, -398, -398, -398, -398, -398, 65, 65, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + 65, 65, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398 + }, + + { + 15, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, 62, -399, 422, 422, + 422, 422, 422, 422, 422, 422, 422, 422, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, 65, 65, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + 65, 65, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399 + + }, + + { + 15, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, 62, -400, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, 65, 65, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + + 65, 65, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400 + }, + + { + 15, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, 62, -401, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 424, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, 65, 65, + + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + 65, 65, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401 + }, + + { + 15, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + + -402, -402, -402, -402, -402, -402, 62, -402, 425, 425, + 425, 425, 425, 425, 425, 425, 425, 425, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, 65, 65, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + 65, 65, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402 + }, + + { + 15, -403, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, 62, -403, 426, 426, + 426, 426, 426, 426, 426, 426, 426, 426, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, 65, 65, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + 65, 65, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403 + }, + + { + 15, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, 62, -404, 427, 427, + 427, 427, 427, 427, 427, 427, 427, 427, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, 65, 65, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + 65, 65, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404 + }, + + { + 15, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, 62, -405, 428, 428, + + 428, 428, 428, 428, 428, 428, 428, 428, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, 65, 65, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + 65, 65, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405 + }, + + { + 15, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, 62, -406, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, 65, 65, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + 65, 65, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406 + }, + + { + 15, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, 62, -407, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, 65, 65, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + 65, 65, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407 + }, + + { + 15, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, 431, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408 + }, + + { + 15, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + + -409, -409, 432, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409 + + }, + + { + 15, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, 62, -410, 410, 411, + 411, 411, 411, 411, 411, 411, 411, 411, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, 65, 65, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + + 65, 65, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410 + }, + + { + 15, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, 62, -411, 412, 412, + 412, 412, 412, 412, 412, 412, 412, 412, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, 65, 65, + + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + 65, 65, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411 + }, + + { + 15, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + + -412, -412, -412, -412, -412, -412, 62, -412, 413, 413, + 413, 413, 413, 413, 413, 413, 413, 413, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, 65, 65, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + 65, 65, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412 + }, + + { + 15, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, 62, -413, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, 65, 65, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + 65, 65, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413 + }, + + { + 15, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, 62, -414, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, 65, 65, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + 65, 65, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414 + }, + + { + 15, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, 62, -415, 416, 416, + + 416, 416, 416, 416, 416, 416, 416, 416, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, 65, 65, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + 65, 65, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415 + }, + + { + 15, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, 62, -416, 417, 417, + 417, 417, 417, 417, 417, 417, 417, 417, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, 65, 65, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + 65, 65, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416 + }, + + { + 15, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, 62, -417, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, 65, 65, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + 65, 65, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417 + }, + + { + 15, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, 62, -418, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, -418, -418, + + -418, -418, -418, -418, -418, -418, -418, -418, 65, 65, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + 65, 65, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418 + }, + + { + 15, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, 62, -419, 420, 420, + 420, 420, 420, 420, 420, 420, 420, 420, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, 65, 65, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + 65, 65, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419 + + }, + + { + 15, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, 62, -420, 421, 421, + 421, 421, 421, 421, 421, 421, 421, 421, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, 65, 65, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + + 65, 65, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420 + }, + + { + 15, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, 62, -421, 422, 422, + 422, 422, 422, 422, 422, 422, 422, 422, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, 65, 65, + + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + 65, 65, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421 + }, + + { + 15, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + + -422, -422, -422, -422, -422, -422, 62, -422, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, 65, 65, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + 65, 65, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422 + }, + + { + 15, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, 62, -423, 424, 424, + 424, 424, 424, 424, 424, 424, 424, 424, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, 65, 65, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + 65, 65, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423 + }, + + { + 15, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, 62, -424, 425, 425, + 425, 425, 425, 425, 425, 425, 425, 425, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, 65, 65, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + 65, 65, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424 + }, + + { + 15, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, 62, -425, 426, 426, + + 426, 426, 426, 426, 426, 426, 426, 426, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, 65, 65, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + 65, 65, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425 + }, + + { + 15, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, 62, -426, 427, 427, + 427, 427, 427, 427, 427, 427, 427, 427, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, 65, 65, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + 65, 65, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426 + }, + + { + 15, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, 62, -427, 428, 428, + 428, 428, 428, 428, 428, 428, 428, 428, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, 65, 65, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + 65, 65, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427 + }, + + { + 15, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, 62, -428, 429, 429, + 429, 429, 429, 429, 429, 429, 429, 429, -428, -428, + + -428, -428, -428, -428, -428, -428, -428, -428, 65, 65, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + 65, 65, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428 + }, + + { + 15, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, 62, -429, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, 65, 65, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + 65, 65, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429 + + }, + + { + 15, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, 62, -430, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, 65, 65, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + + 65, 65, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430 + }, + + { + 15, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, 433, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431 + }, + + { + 15, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, 434, -432, -432, -432, -432, -432, -432, -432, + + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432 + }, + + { + 15, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, 435, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433 + }, + + { + 15, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, 436, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434 + }, + + { + 15, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, 437, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435 + }, + + { + 15, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, 438, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436 + }, + + { + 15, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, 439, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437 + }, + + { + 15, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, 440, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438 + }, + + { + 15, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + + -439, -439, 441, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439 + + }, + + { + 15, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, 442, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440 + }, + + { + 15, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, 443, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441 + }, + + { + 15, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, 444, -442, -442, -442, -442, -442, -442, -442, + + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442 + }, + + { + 15, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, 445, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443 + }, + + { + 15, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, 446, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444 + }, + + { + 15, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, 447, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445 + }, + + { + 15, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, 448, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446 + }, + + { + 15, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, 449, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447 + }, + + { + 15, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, 450, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448 + }, + + { + 15, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + + -449, -449, 451, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449 + + }, + + { + 15, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, 452, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450 + }, + + { + 15, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, 453, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451 + }, + + { + 15, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, 454, -452, -452, -452, -452, -452, -452, -452, + + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452 + }, + + { + 15, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, 455, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453 + }, + + { + 15, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, 456, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454 + }, + + { + 15, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, 457, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455 + }, + + { + 15, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, 458, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456 + }, + + { + 15, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, 459, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457 + }, + + { + 15, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, 460, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458 + }, + + { + 15, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + + -459, -459, 461, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459 + + }, + + { + 15, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, 462, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460 + }, + + { + 15, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, 463, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461 + }, + + { + 15, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, 464, -462, -462, -462, -462, -462, -462, -462, + + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462 + }, + + { + 15, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, 465, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463 + }, + + { + 15, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, 466, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464 + }, + + { + 15, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, 467, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465 + }, + + { + 15, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, 468, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466 + }, + + { + 15, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, 469, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467 + }, + + { + 15, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, 470, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468 + }, + + { + 15, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + + -469, -469, 471, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469 + + }, + + { + 15, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, 472, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470 + }, + + { + 15, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, 473, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471 + }, + + { + 15, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, 474, -472, -472, -472, -472, -472, -472, -472, + + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472 + }, + + { + 15, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, 475, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473 + }, + + { + 15, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, 476, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474 + }, + + { + 15, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, 477, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475 + }, + + { + 15, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, 478, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476 + }, + + { + 15, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, 479, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477 + }, + + { + 15, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, 480, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478 + }, + + { + 15, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + + -479, -479, 481, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479 + + }, + + { + 15, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, 482, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480 + }, + + { + 15, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, 483, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481 + }, + + { + 15, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, 484, -482, -482, -482, -482, -482, -482, -482, + + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482 + }, + + { + 15, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, 485, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483 + }, + + { + 15, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, 486, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484 + }, + + { + 15, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, 487, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485 + }, + + { + 15, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, 488, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486 + }, + + { + 15, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, 489, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487 + }, + + { + 15, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, 490, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488 + }, + + { + 15, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + + -489, -489, 491, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489 + + }, + + { + 15, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, 492, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490 + }, + + { + 15, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, 493, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491 + }, + + { + 15, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, 494, -492, -492, -492, -492, -492, -492, -492, + + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492 + }, + + { + 15, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, 495, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493 + }, + + { + 15, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, 496, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494 + }, + + { + 15, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, 497, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495 + }, + + { + 15, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, 498, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496 + }, + + { + 15, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, 499, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497 + }, + + { + 15, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, 500, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498 + }, + + { + 15, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + + -499, -499, 501, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499 + + }, + + { + 15, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, 502, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500 + }, + + { + 15, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, 503, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501 + }, + + { + 15, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, 504, -502, -502, -502, -502, -502, -502, -502, + + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502 + }, + + { + 15, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, 505, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503 + }, + + { + 15, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, 506, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504 + }, + + { + 15, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, 507, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505 + }, + + { + 15, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, 508, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506 + }, + + { + 15, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, 509, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507 + }, + + { + 15, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, 510, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508 + }, + + { + 15, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + + -509, -509, 511, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509 + + }, + + { + 15, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, 512, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510 + }, + + { + 15, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, 513, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511 + }, + + { + 15, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, 514, -512, -512, -512, -512, -512, -512, -512, + + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512 + }, + + { + 15, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, 515, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513 + }, + + { + 15, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, 516, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514 + }, + + { + 15, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, 517, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515 + }, + + { + 15, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, 518, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516 + }, + + { + 15, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, 519, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517 + }, + + { + 15, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, 520, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518 + }, + + { + 15, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + + -519, -519, 521, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519 + + }, + + { + 15, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, 522, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520 + }, + + { + 15, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, 523, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521 + }, + + { + 15, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, 524, -522, -522, -522, -522, -522, -522, -522, + + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522 + }, + + { + 15, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, 525, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523 + }, + + { + 15, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, 526, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524 + }, + + { + 15, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, 527, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525 + }, + + { + 15, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, 528, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526 + }, + + { + 15, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, 529, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527 + }, + + { + 15, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, 530, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528 + }, + + { + 15, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + + -529, -529, 531, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529 + + }, + + { + 15, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, 532, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530 + }, + + { + 15, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, 533, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531 + }, + + { + 15, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, 534, -532, -532, -532, -532, -532, -532, -532, + + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532 + }, + + { + 15, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, 535, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533 + }, + + { + 15, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, 536, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534 + }, + + { + 15, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, 537, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535 + }, + + { + 15, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, 538, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536 + }, + + { + 15, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, 539, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537 + }, + + { + 15, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, 540, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538 + }, + + { + 15, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + + -539, -539, 541, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539 + + }, + + { + 15, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, 542, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540 + }, + + { + 15, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, 543, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541 + }, + + { + 15, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, 544, -542, -542, -542, -542, -542, -542, -542, + + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542 + }, + + { + 15, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, 545, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543 + }, + + { + 15, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, 546, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544 + }, + + { + 15, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, 547, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545 + }, + + { + 15, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, 548, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546 + }, + + { + 15, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, 549, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547 + }, + + { + 15, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, 550, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548 + }, + + { + 15, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549 + + }, + + { + 15, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyg->yytext_ptr -= yyg->yy_more_len; \ + yyleng = (int) (yy_cp - yyg->yytext_ptr); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 31 +#define YY_END_OF_BUFFER 32 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[551] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, + 29, 29, 0, 0, 32, 31, 31, 31, 31, 31, + 31, 31, 20, 20, 20, 20, 20, 20, 11, 13, + 13, 12, 25, 21, 24, 23, 27, 27, 28, 29, + 31, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 11, 0, 19, 0, 0, 0, 0, 0, 13, 13, + 16, 16, 13, 13, 0, 13, 21, 0, 23, 22, + 23, 0, 28, 29, 0, 30, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 16, 13, 13, 13, 0, 16, 13, 26, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 13, 13, + 13, 13, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 0, 0, 13, 13, 13, 13, 13, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18, 0, 0, 0, 0, 13, 13, 13, + 13, 13, 13, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 10, 2, 8, 8, 8, 5, + + 13, 13, 13, 13, 13, 13, 13, 13, 13, 0, + 0, 0, 0, 0, 0, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 9, 0, 6, 0, 0, + 4, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 14, 0, 0, 0, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 14, 14, 0, 0, 7, + 0, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 14, 14, 14, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, + 0, 0, 13, 13, 13, 13, 13, 13, 13, 13, + + 13, 13, 14, 14, 14, 14, 14, 0, 0, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, + 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, + 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, + 14, 14, 14, 14, 0, 0, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 0, 0, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, + + 14, 14, 14, 14, 14, 14, 15, 0, 0, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, + 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, 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, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 3 + } ; + +static const yy_state_type yy_NUL_trans[551] = + { 0, + 16, 17, 23, 23, 33, 33, 37, 37, 39, 39, + 40, 40, 41, 41, 0, 0, 43, 43, 43, 43, + 43, 43, 0, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 73, 74, + 75, 0, 77, 77, 77, 77, 77, 77, 77, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 73, 74, 75, 0, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 150, 150, 150, 150, 150, 150, 150, + 150, 150, 150, 150, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, + 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, + 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 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, 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, 259, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 259, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() (yyg->yy_more_flag = 1) +#define YY_MORE_ADJ yyg->yy_more_len +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "fitshdr.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: fitshdr.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* fitshdr.l is a Flex description file containing a lexical scanner +* definition for extracting keywords and keyvalues from a FITS header. +* +* It requires Flex v2.5.4 or later. +* +* Refer to fitshdr.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Keywords. */ +/* Keyvalue data types. */ +/* Characters forming standard unit strings (jwBIQX are not used). */ +/* Exclusive start states. */ + +#line 76 "fitshdr.l" +#include +#include +#include +#include +#include + +#include "fitshdr.h" +#include "wcsutil.h" + +// User data associated with yyscanner. +struct fitshdr_extra { + // Values passed to YY_INPUT. + const char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int fitshdr_scanner(const char header[], int nkeyrec, \ + int nkeyids, struct fitskeyid keyids[], int *nreject, \ + struct fitskey **keys, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; +static void nullfill(char cptr[], int len); + +// Map status return value to message. +const char *fitshdr_errmsg[] = { + "Success", + "Null fitskey pointer-pointer passed", + "Memory allocation failed", + "Fatal error returned by Flex parser"}; + +#line 10327 "fitshdr.c" +#line 10328 "fitshdr.c" + +#define INITIAL 0 +#define VALUE 1 +#define INLINE 2 +#define UNITS 3 +#define COMMENT 4 +#define ERROR 5 +#define FLUSH 6 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct fitshdr_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 128 "fitshdr.l" + +#line 130 "fitshdr.l" + char ctmp[72]; + + if (keys == 0x0) { + return FITSHDRERR_NULL_POINTER; + } + + // Allocate memory for the required number of fitskey structs. + // Recall that calloc() initializes allocated memory to zero. + struct fitskey *kptr; + if (!(kptr = *keys = calloc(nkeyrec, sizeof(struct fitskey)))) { + return FITSHDRERR_MEMORY; + } + + // Initialize returned values. + *nreject = 0; + + // Initialize keyids[]. + struct fitskeyid *iptr = keyids; + for (int j = 0; j < nkeyids; j++, iptr++) { + iptr->count = 0; + iptr->idx[0] = -1; + iptr->idx[1] = -1; + } + + int keyno = 0; + + int blank = 0; + int continuation = 0; + int end = 0; + +#ifdef WCSLIB_INT64 +#define asString(S) stringize(S) +#define stringize(S) #S + + const char *int64fmt; + if (strcmp(asString(WCSLIB_INT64), "long long int") == 0) { + int64fmt = "%lld"; + } else if (strcmp(asString(WCSLIB_INT64), "long int") == 0) { + int64fmt = "%ld"; + } else if (strcmp(asString(WCSLIB_INT64), "int") == 0) { + int64fmt = "%d"; + } else { + return FITSHDRERR_DATA_TYPE; + } +#endif + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return FITSHDRERR_FLEX_PARSER; + } + + BEGIN(INITIAL); + +#line 10637 "fitshdr.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yyg->yy_more_len = 0; + if ( yyg->yy_more_flag ) + { + yyg->yy_more_len = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + yyg->yy_more_flag = 0; + } + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 187 "fitshdr.l" +{ + // A completely blank keyrecord. + strncpy(kptr->keyword, yytext, 8); + yyless(0); + blank = 1; + BEGIN(COMMENT); + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 195 "fitshdr.l" +{ + strncpy(kptr->keyword, yytext, 8); + BEGIN(COMMENT); + } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 200 "fitshdr.l" +{ + strncpy(kptr->keyword, yytext, 8); + end = 1; + BEGIN(FLUSH); + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 206 "fitshdr.l" +{ + // Illegal END keyrecord. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYREC; + BEGIN(VALUE); + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 213 "fitshdr.l" +{ + // Illegal END keyrecord. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYREC; + BEGIN(COMMENT); + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 220 "fitshdr.l" +{ + strncpy(kptr->keyword, yytext, 8); + BEGIN(VALUE); + } + YY_BREAK +case 7: +/* rule 7 can match eol */ +YY_RULE_SETUP +#line 225 "fitshdr.l" +{ + // Continued string keyvalue. + strncpy(kptr->keyword, yytext, 8); + + if (keyno > 0 && (kptr-1)->type%10 == 8) { + // Put back the string keyvalue. + int k; + for (k = 10; yytext[k] != '\''; k++); + yyless(k); + continuation = 1; + BEGIN(VALUE); + + } else { + // Not a valid continuation. + yyless(8); + BEGIN(COMMENT); + } + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 244 "fitshdr.l" +{ + // Keyword without value. + strncpy(kptr->keyword, yytext, 8); + BEGIN(COMMENT); + } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 250 "fitshdr.l" +{ + // Illegal keyword, carry on regardless. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYWORD; + BEGIN(VALUE); + } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 257 "fitshdr.l" +{ + // Illegal keyword, carry on regardless. + strncpy(kptr->keyword, yytext, 8); + kptr->status |= FITSHDR_KEYWORD; + BEGIN(COMMENT); + } + YY_BREAK +case 11: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 264 "fitshdr.l" +{ + // Null keyvalue. + BEGIN(INLINE); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 269 "fitshdr.l" +{ + // Logical keyvalue. + kptr->type = 1; + kptr->keyvalue.i = (*yytext == 'T'); + BEGIN(INLINE); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 276 "fitshdr.l" +{ + // 32-bit signed integer keyvalue. + kptr->type = 2; + if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 287 "fitshdr.l" +{ + // 64-bit signed integer keyvalue (up to 18 digits). + double dtmp; + if (wcsutil_str2double(yytext, &dtmp)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + + } else if (INT_MIN <= dtmp && dtmp <= INT_MAX) { + // Can be accomodated as a 32-bit signed integer. + kptr->type = 2; + if (sscanf(yytext, "%d", &(kptr->keyvalue.i)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + } else { + // 64-bit signed integer. + kptr->type = 3; +#ifdef WCSLIB_INT64 + // Native 64-bit integer is available. + if (sscanf(yytext, int64fmt, &(kptr->keyvalue.k)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } +#else + // 64-bit integer (up to 18 digits) implemented as int[3]. + kptr->keyvalue.k[2] = 0; + + sprintf(ctmp, "%%%dd%%9d", yyleng-9); + if (sscanf(yytext, ctmp, kptr->keyvalue.k+1, + kptr->keyvalue.k) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } else if (*yytext == '-') { + kptr->keyvalue.k[0] *= -1; + } +#endif + } + + BEGIN(INLINE); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 329 "fitshdr.l" +{ + // Very long integer keyvalue (and 19-digit int64). + kptr->type = 4; + strcpy(ctmp, yytext); + int j, k = yyleng; + for (j = 0; j < 8; j++) { + // Read it backwards. + k -= 9; + if (k < 0) k = 0; + if (sscanf(ctmp+k, "%d", kptr->keyvalue.l+j) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + if (*yytext == '-') { + kptr->keyvalue.l[j] = -abs(kptr->keyvalue.l[j]); + } + + if (k == 0) break; + ctmp[k] = '\0'; + } + + // Can it be accomodated as a 64-bit signed integer? + if (j == 2 && abs(kptr->keyvalue.l[2]) <= 9 && + abs(kptr->keyvalue.l[1]) <= 223372036 && + kptr->keyvalue.l[0] <= 854775807 && + kptr->keyvalue.l[0] >= -854775808) { + kptr->type = 3; + +#ifdef WCSLIB_INT64 + // Native 64-bit integer is available. + kptr->keyvalue.l[2] = 0; + if (sscanf(yytext, int64fmt, &(kptr->keyvalue.k)) < 1) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } +#endif + } + + BEGIN(INLINE); + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 370 "fitshdr.l" +{ + // Float keyvalue. + kptr->type = 5; + if (wcsutil_str2double(yytext, &(kptr->keyvalue.f))) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 381 "fitshdr.l" +{ + // Integer complex keyvalue. + kptr->type = 6; + if (sscanf(yytext, "(%lf,%lf)", kptr->keyvalue.c, + kptr->keyvalue.c+1) < 2) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 393 "fitshdr.l" +{ + // Floating point complex keyvalue. + kptr->type = 7; + + char *cptr; + int k; + for (cptr = ctmp, k = 1; yytext[k] != ','; cptr++, k++) { + *cptr = yytext[k]; + } + *cptr = '\0'; + + if (wcsutil_str2double(ctmp, kptr->keyvalue.c)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + for (cptr = ctmp, k++; yytext[k] != ')'; cptr++, k++) { + *cptr = yytext[k]; + } + *cptr = '\0'; + + if (wcsutil_str2double(ctmp, kptr->keyvalue.c+1)) { + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + + BEGIN(INLINE); + } + YY_BREAK +case 19: +/* rule 19 can match eol */ +YY_RULE_SETUP +#line 422 "fitshdr.l" +{ + // String keyvalue. + kptr->type = 8; + char *cptr = kptr->keyvalue.s; + strcpy(cptr, yytext+1); + + // Squeeze out repeated quotes. + int k = 0; + for (int j = 0; j < 72; j++) { + if (k < j) { + cptr[k] = cptr[j]; + } + + if (cptr[j] == '\0') { + if (k) cptr[k-1] = '\0'; + break; + } else if (cptr[j] == '\'' && cptr[j+1] == '\'') { + j++; + } + + k++; + } + + if (*cptr) { + // Retain the initial blank in all-blank strings. + nullfill(cptr+1, 71); + } else { + nullfill(cptr, 72); + } + + BEGIN(INLINE); + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 455 "fitshdr.l" +{ + kptr->status |= FITSHDR_KEYVALUE; + BEGIN(ERROR); + } + YY_BREAK +case 21: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 460 "fitshdr.l" +{ + BEGIN(FLUSH); + } + YY_BREAK +case 22: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 464 "fitshdr.l" +{ + BEGIN(FLUSH); + } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 468 "fitshdr.l" +{ + BEGIN(UNITS); + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 472 "fitshdr.l" +{ + kptr->status |= FITSHDR_COMMENT; + BEGIN(ERROR); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 477 "fitshdr.l" +{ + // Keyvalue parsing must now also be suspect. + kptr->status |= FITSHDR_COMMENT; + kptr->type = 0; + BEGIN(ERROR); + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 484 "fitshdr.l" +{ + kptr->ulen = yyleng; + yymore(); + BEGIN(COMMENT); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 490 "fitshdr.l" +{ + yymore(); + BEGIN(COMMENT); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 495 "fitshdr.l" +{ + strcpy(kptr->comment, yytext); + nullfill(kptr->comment, 84); + BEGIN(FLUSH); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 501 "fitshdr.l" +{ + if (!continuation) kptr->type = -abs(kptr->type); + + sprintf(kptr->comment, "%.80s", yyextra->hdr-80); + kptr->comment[80] = '\0'; + nullfill(kptr->comment+80, 4); + + BEGIN(FLUSH); + } + YY_BREAK +case 30: +/* rule 30 can match eol */ +YY_RULE_SETUP +#line 511 "fitshdr.l" +{ + // Discard the rest of the input line. + kptr->keyno = ++keyno; + + // Null-fill the keyword. + kptr->keyword[8] = '\0'; + nullfill(kptr->keyword, 12); + + // Do indexing. + iptr = keyids; + kptr->keyid = -1; + for (int j = 0; j < nkeyids; j++, iptr++) { + int k; + char *cptr = iptr->name; + cptr[8] = '\0'; + nullfill(cptr, 12); + for (k = 0; k < 8; k++, cptr++) { + if (*cptr != '.' && *cptr != kptr->keyword[k]) break; + } + + if (k == 8) { + // Found a match. + iptr->count++; + if (iptr->idx[0] == -1) { + iptr->idx[0] = keyno-1; + } else { + iptr->idx[1] = keyno-1; + } + + kptr->keyno = -abs(kptr->keyno); + if (kptr->keyid < 0) kptr->keyid = j; + } + } + + // Deal with continued strings. + if (continuation) { + // Tidy up the previous string keyvalue. + if ((kptr-1)->type == 8) (kptr-1)->type += 10; + char *cptr = (kptr-1)->keyvalue.s; + if (cptr[strlen(cptr)-1] == '&') cptr[strlen(cptr)-1] = '\0'; + + kptr->type = (kptr-1)->type + 10; + } + + // Check for keyrecords following the END keyrecord. + if (end && (end++ > 1) && !blank) { + kptr->status |= FITSHDR_TRAILER; + } + if (kptr->status) (*nreject)++; + + kptr++; + blank = 0; + continuation = 0; + + BEGIN(INITIAL); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(VALUE): +case YY_STATE_EOF(INLINE): +case YY_STATE_EOF(UNITS): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(ERROR): +case YY_STATE_EOF(FLUSH): +#line 568 "fitshdr.l" +{ + // End-of-input. + return 0; + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 573 "fitshdr.l" +ECHO; + YY_BREAK +#line 11190 "fitshdr.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 573 "fitshdr.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int fitshdr( + const char header[], + int nkeyrec, + int nkeyids, + struct fitskeyid keyids[], + int *nreject, + struct fitskey **keys) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct fitshdr_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = fitshdr_scanner(header, nkeyrec, nkeyids, keyids, nreject, + keys, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + +/*---------------------------------------------------------------------------- +* Pad a string with null characters. +*---------------------------------------------------------------------------*/ + +void nullfill(char cptr[], int len) + +{ + // Propagate the terminating null to the end of the string. + int j; + for (j = 0; j < len; j++) { + if (cptr[j] == '\0') { + for (int k = j+1; k < len; k++) { + cptr[k] = '\0'; + } + break; + } + } + + // Remove trailing blanks. + for (int k = j-1; k >= 0; k--) { + if (cptr[k] != ' ') break; + cptr[k] = '\0'; + } + + return; +} + diff --git a/deps/wcslib/C/flexed/wcsbth.c b/deps/wcslib/C/flexed/wcsbth.c new file mode 100644 index 0000000..a031460 --- /dev/null +++ b/deps/wcslib/C/flexed/wcsbth.c @@ -0,0 +1,32201 @@ +#line 2 "wcsbth.c" + +#line 4 "wcsbth.c" + +#define _POSIX_C_SOURCE 1 +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define wcsbth_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wcsbth_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wcsbth_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wcsbth_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wcsbth_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wcsbth_scan_buffer +#endif + +#ifdef yy_scan_string +#define wcsbth_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wcsbth_scan_string +#endif + +#ifdef yy_scan_bytes +#define wcsbth_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wcsbth_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wcsbth_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wcsbth_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wcsbth_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wcsbth_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wcsbth_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wcsbth_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wcsbth_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wcsbth_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wcsbthpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wcsbthpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wcsbthpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wcsbthpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wcsbthensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wcsbthensure_buffer_stack +#endif + +#ifdef yylex +#define wcsbthlex_ALREADY_DEFINED +#else +#define yylex wcsbthlex +#endif + +#ifdef yyrestart +#define wcsbthrestart_ALREADY_DEFINED +#else +#define yyrestart wcsbthrestart +#endif + +#ifdef yylex_init +#define wcsbthlex_init_ALREADY_DEFINED +#else +#define yylex_init wcsbthlex_init +#endif + +#ifdef yylex_init_extra +#define wcsbthlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wcsbthlex_init_extra +#endif + +#ifdef yylex_destroy +#define wcsbthlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wcsbthlex_destroy +#endif + +#ifdef yyget_debug +#define wcsbthget_debug_ALREADY_DEFINED +#else +#define yyget_debug wcsbthget_debug +#endif + +#ifdef yyset_debug +#define wcsbthset_debug_ALREADY_DEFINED +#else +#define yyset_debug wcsbthset_debug +#endif + +#ifdef yyget_extra +#define wcsbthget_extra_ALREADY_DEFINED +#else +#define yyget_extra wcsbthget_extra +#endif + +#ifdef yyset_extra +#define wcsbthset_extra_ALREADY_DEFINED +#else +#define yyset_extra wcsbthset_extra +#endif + +#ifdef yyget_in +#define wcsbthget_in_ALREADY_DEFINED +#else +#define yyget_in wcsbthget_in +#endif + +#ifdef yyset_in +#define wcsbthset_in_ALREADY_DEFINED +#else +#define yyset_in wcsbthset_in +#endif + +#ifdef yyget_out +#define wcsbthget_out_ALREADY_DEFINED +#else +#define yyget_out wcsbthget_out +#endif + +#ifdef yyset_out +#define wcsbthset_out_ALREADY_DEFINED +#else +#define yyset_out wcsbthset_out +#endif + +#ifdef yyget_leng +#define wcsbthget_leng_ALREADY_DEFINED +#else +#define yyget_leng wcsbthget_leng +#endif + +#ifdef yyget_text +#define wcsbthget_text_ALREADY_DEFINED +#else +#define yyget_text wcsbthget_text +#endif + +#ifdef yyget_lineno +#define wcsbthget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wcsbthget_lineno +#endif + +#ifdef yyset_lineno +#define wcsbthset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wcsbthset_lineno +#endif + +#ifdef yyget_column +#define wcsbthget_column_ALREADY_DEFINED +#else +#define yyget_column wcsbthget_column +#endif + +#ifdef yyset_column +#define wcsbthset_column_ALREADY_DEFINED +#else +#define yyset_column wcsbthset_column +#endif + +#ifdef yywrap +#define wcsbthwrap_ALREADY_DEFINED +#else +#define yywrap wcsbthwrap +#endif + +#ifdef yyalloc +#define wcsbthalloc_ALREADY_DEFINED +#else +#define yyalloc wcsbthalloc +#endif + +#ifdef yyrealloc +#define wcsbthrealloc_ALREADY_DEFINED +#else +#define yyrealloc wcsbthrealloc +#endif + +#ifdef yyfree +#define wcsbthfree_ALREADY_DEFINED +#else +#define yyfree wcsbthfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + +#define YY_LESS_LINENO(n) +#define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define wcsbthwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70 + }, + + { + 69, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + + 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, + 71, 71, 71, 71, 71, 73, 74, 75, 76, 77, + 71, 71, 78, 71, 79, 71, 80, 81, 71, 82, + 83, 71, 84, 85, 86, 71, 87, 88, 89, 71, + 90, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71 + }, + + { + 69, 91, 91, 91, 91, 91, 91, 91, 91, 91, + + 70, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 92, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91 + }, + + { + 69, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 70, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 92, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91 + }, + + { + 69, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 70, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, + + 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94 + }, + + { + 69, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 70, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94 + }, + + { + 69, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 70, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96 + }, + + { + 69, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 70, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, + + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96 + }, + + { + 69, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 70, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98 + + }, + + { + 69, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 70, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98 + }, + + { + 69, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 69, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 69, 102, 102, 102, 102, 102, 102, 102, 102, 102, + + 70, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 103, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102 + }, + + { + 69, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 70, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 103, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102 + }, + + { + 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70 + }, + + { + 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + + 70, 70, 70, 70, 70, 70, 70, 70 + }, + + { + 69, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 70, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106 + }, + + { + 69, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 70, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, + + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106 + }, + + { + 69, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 70, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108 + + }, + + { + 69, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 70, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108 + }, + + { + 69, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 70, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 69, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 70, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 69, 112, 112, 112, 112, 112, 112, 112, 112, 112, + + 70, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112 + }, + + { + 69, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 70, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112 + }, + + { + 69, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 70, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, + + 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 69, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 70, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 69, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 70, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116 + }, + + { + 69, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 70, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, + + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116 + }, + + { + 69, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 70, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119 + + }, + + { + 69, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 70, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119 + }, + + { + 69, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 70, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121 + }, + + { + 69, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 70, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + + 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121 + }, + + { + 69, 123, 123, 123, 123, 123, 123, 123, 123, 123, + + 70, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123 + }, + + { + 69, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 70, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123 + }, + + { + 69, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 70, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, + + 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125 + }, + + { + 69, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 70, 125, 125, 125, 125, 125, 125, 125, 125, 125, + + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + + 125, 125, 125, 125, 125, 125, 125, 125 + }, + + { + 69, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 70, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127 + }, + + { + 69, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 70, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, + + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127 + }, + + { + 69, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 70, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129 + + }, + + { + 69, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 70, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129 + }, + + { + 69, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 70, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130 + }, + + { + 69, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 70, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, + + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130 + }, + + { + 69, 132, 132, 132, 132, 132, 132, 132, 132, 132, + + 70, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132 + }, + + { + 69, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 70, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132 + }, + + { + 69, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 70, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134 + }, + + { + 69, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 70, 134, 134, 134, 134, 134, 134, 134, 134, 134, + + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + + 134, 134, 134, 134, 134, 134, 134, 134 + }, + + { + 69, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 70, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136 + }, + + { + 69, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 70, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, + + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136 + }, + + { + 69, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 70, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138 + + }, + + { + 69, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 70, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138 + }, + + { + 69, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 70, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 141, 140, 140, 140, 140, 140, 140, 140, 140, + + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140 + }, + + { + 69, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 70, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 141, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140 + }, + + { + 69, 142, 142, 142, 142, 142, 142, 142, 142, 142, + + 70, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 143, 142, 143, 142, 142, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142 + }, + + { + 69, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 70, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 143, 142, 143, 142, 142, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142 + }, + + { + 69, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 70, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 146, 145, 146, 147, 145, 148, 148, + + 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145 + }, + + { + 69, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 70, 145, 145, 145, 145, 145, 145, 145, 145, 145, + + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 146, 145, 146, 147, 145, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + + 145, 145, 145, 145, 145, 145, 145, 145 + }, + + { + 69, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 70, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 150, 149, 150, 151, 149, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149 + }, + + { + 69, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 70, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 150, 149, 150, 151, 149, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 149, 149, + + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149 + }, + + { + 69, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 70, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + + 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153 + + }, + + { + 69, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 70, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153 + }, + + { + 69, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 157, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 158, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155 + }, + + { + 69, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 157, 155, 155, 155, 155, 155, 155, 155, + + 155, 155, 155, 155, 155, 155, 155, 158, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155 + }, + + { + 69, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159 + }, + + { + 69, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159 + }, + + { + 69, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161 + }, + + { + 69, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, + + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + + 161, 161, 161, 161, 161, 161, 161, 161 + }, + + { + 69, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163 + }, + + { + 69, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163 + }, + + { + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69 + + }, + + { + 69, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70 + }, + + { + 69, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71 + }, + + { + 69, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + + -72, -72, -72, -72, -72, -72, -72, -72, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, -72, -72, + -72, -72, -72, -72, -72, -72, -72, 166, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + 167, -72, -72, 168, -72, -72, 169, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72 + }, + + { + 69, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, 170, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73 + }, + + { + 69, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, 171, 172, + -74, -74, -74, -74, -74, -74, 173, -74, -74, -74, + + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, 174, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74 + }, + + { + 69, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, 175, -75, + -75, -75, -75, -75, -75, -75, -75, -75, 176, -75, + 177, -75, 178, 179, 180, 181, -75, -75, -75, -75, + 182, -75, -75, -75, -75, 183, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75 + }, + + { + 69, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, 184, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, 185, + -76, -76, -76, 186, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76 + }, + + { + 69, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, 187, -77, + 188, 189, -77, -77, -77, -77, -77, -77, -77, -77, + + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77 + }, + + { + 69, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, 190, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78 + }, + + { + 69, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, 191, 192, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79 + + }, + + { + 69, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, 193, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, 194, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80 + }, + + { + 69, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + + -81, -81, -81, -81, 195, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81 + }, + + { + 69, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, 196, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 69, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, 197, -83, -83, + -83, -83, -83, -83, -83, -83, 198, -83, -83, -83, + -83, -83, 199, 200, -83, -83, 201, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83 + }, + + { + 69, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, 202, -84, -84, -84, 203, + 204, -84, -84, -84, -84, -84, -84, -84, -84, -84, + + -84, -84, -84, 205, -84, -84, -84, 206, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84 + }, + + { + 69, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, 207, + 208, -85, -85, 209, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 69, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, 210, -86, 211, + 212, -86, -86, 213, -86, -86, -86, -86, -86, -86, + 214, -86, 215, 216, -86, -86, 217, 218, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86 + }, + + { + 69, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, 219, -87, -87, -87, 220, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, 221, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 69, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + + -88, -88, -88, -88, -88, -88, -88, 222, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88 + }, + + { + 69, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + 223, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89 + + }, + + { + 69, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, 224, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 69, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91 + }, + + { + 69, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, 225, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, 226, 227, + 227, 227, 227, 227, 227, 227, 227, 227, -92, -92, + -92, -92, -92, -92, -92, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92 + }, + + { + 69, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, 228, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -93, -93, + -93, -93, -93, -93, -93, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 69, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94 + }, + + { + 69, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, 230, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, 231, 231, + + 231, 231, 231, 231, 231, 231, 231, 231, -95, -95, + -95, -95, -95, -95, -95, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95 + }, + + { + 69, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96 + }, + + { + 69, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, 232, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, -97, -97, + -97, -97, -97, -97, -97, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + + 234, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97 + }, + + { + 69, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98 + }, + + { + 69, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, 235, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, -99, -99, + -99, -99, -99, -99, -99, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99 + + }, + + { + 69, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100 + }, + + { + 69, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, 237, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -101, -101, + -101, -101, -101, -101, -101, 239, 239, 239, 239, 239, + + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101 + }, + + { + 69, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102 + }, + + { + 69, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, 240, -103, -103, 241, 242, + 242, 242, 242, 242, 242, 242, 242, 242, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, 243, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103 + }, + + { + 69, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, 240, -104, -104, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, 245, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104 + }, + + { + 69, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, 246, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, 247, 247, + + 247, 247, 247, 247, 247, 247, 247, 247, -105, -105, + -105, -105, -105, -105, -105, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105 + }, + + { + 69, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106 + }, + + { + 69, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + + -107, -107, -107, -107, -107, 249, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107 + }, + + { + 69, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108 + }, + + { + 69, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, 251, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109 + + }, + + { + 69, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110 + }, + + { + 69, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, 252, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, -111, -111, + -111, -111, -111, -111, -111, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111 + }, + + { + 69, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112 + }, + + { + 69, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, 254, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, -113, -113, + -113, -113, -113, -113, -113, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113 + }, + + { + 69, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114 + }, + + { + 69, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, 257, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, 258, 258, + + 258, 258, 258, 258, 258, 258, 258, 258, -115, -115, + -115, -115, -115, -115, -115, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115 + }, + + { + 69, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116 + }, + + { + 69, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, 260, -117, -117, 261, 262, + 262, 262, 262, 262, 262, 262, 262, 262, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + + -117, -117, -117, -117, -117, 263, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117 + }, + + { + 69, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, 260, -118, -118, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, -118, -118, + + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, 265, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118 + }, + + { + 69, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119 + + }, + + { + 69, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, 267, -120, -120, -120, -120, + + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120 + }, + + { + 69, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121 + }, + + { + 69, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, -122, -122, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, 269, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122 + }, + + { + 69, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123 + }, + + { + 69, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, 271, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124 + }, + + { + 69, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125 + }, + + { + 69, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, 273, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126 + }, + + { + 69, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127 + }, + + { + 69, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, 274, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, -128, -128, + + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128 + }, + + { + 69, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129 + + }, + + { + 69, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130 + }, + + { + 69, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131 + }, + + { + 69, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132 + }, + + { + 69, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, 276, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, -133, -133, + -133, -133, -133, -133, -133, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133 + }, + + { + 69, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134 + }, + + { + 69, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, 278, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, 279, 279, + + 279, 279, 279, 279, 279, 279, 279, 279, -135, -135, + -135, -135, -135, -135, -135, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135 + }, + + { + 69, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136 + }, + + { + 69, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, 280, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137 + }, + + { + 69, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138 + }, + + { + 69, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + + -139, -139, 282, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139 + + }, + + { + 69, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140 + }, + + { + 69, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, 284, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141 + }, + + { + 69, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142 + }, + + { + 69, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, 285, 285, + 285, 285, 285, 285, 285, 285, 285, 285, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143 + }, + + { + 69, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, 285, 285, + 285, 285, 285, 285, 285, 285, 285, 285, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144 + }, + + { + 69, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145 + }, + + { + 69, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, 286, -146, 287, 287, + 287, 287, 287, 287, 287, 287, 287, 287, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146 + }, + + { + 69, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147 + }, + + { + 69, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, 289, -148, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -148, -148, + + -148, -148, -148, -148, -148, -148, -148, -148, 291, 291, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + 291, 291, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148 + }, + + { + 69, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149 + + }, + + { + 69, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, 292, -150, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150 + }, + + { + 69, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151 + }, + + { + 69, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + + -152, -152, -152, -152, -152, -152, 295, -152, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, 297, 297, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + 297, 297, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152 + }, + + { + 69, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153 + }, + + { + 69, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298 + }, + + { + 69, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 302, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 303, 300, 300, + + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300 + }, + + { + 69, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156 + }, + + { + 69, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 305, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 306, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 307, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312 + + }, + + { + 69, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160 + }, + + { + 69, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 315, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314 + }, + + { + 69, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162 + }, + + { + 69, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 317, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316 + }, + + { + 69, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164 + }, + + { + 69, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, 318, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + 319, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165 + }, + + { + 69, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, 320, -166, + -166, -166, -166, -166, -166, -166, -166, -166, 321, -166, + 322, -166, 323, 324, 325, 326, -166, -166, -166, -166, + 327, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166 + }, + + { + 69, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, 328, -167, -167, 329, -167, -167, -167, + + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167 + }, + + { + 69, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168 + }, + + { + 69, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169 + + }, + + { + 69, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, 330, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170 + }, + + { + 69, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + + -171, -171, -171, 331, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171 + }, + + { + 69, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + 332, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172 + }, + + { + 69, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, 333, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, 334, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173 + }, + + { + 69, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + + -174, -174, 335, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174 + }, + + { + 69, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, 336, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175 + }, + + { + 69, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, 337, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176 + }, + + { + 69, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, 338, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177 + }, + + { + 69, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + + -178, -178, -178, -178, -178, -178, -178, -178, 339, -178, + -178, -178, -178, -178, -178, -178, 340, -178, -178, 341, + 342, -178, -178, -178, -178, -178, 343, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178 + }, + + { + 69, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, 344, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179 + + }, + + { + 69, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, 345, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180 + }, + + { + 69, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + + -181, -181, -181, -181, -181, -181, -181, -181, 346, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181 + }, + + { + 69, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + 347, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182 + }, + + { + 69, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, 348, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183 + }, + + { + 69, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + + -184, -184, -184, -184, 349, -184, 350, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184 + }, + + { + 69, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, 351, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185 + }, + + { + 69, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, 352, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186 + }, + + { + 69, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, 353, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187 + }, + + { + 69, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, 354, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188 + }, + + { + 69, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, 355, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189 + + }, + + { + 69, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, 356, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190 + }, + + { + 69, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, 357, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, 358, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191 + }, + + { + 69, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 359, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192 + }, + + { + 69, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, 360, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193 + }, + + { + 69, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, 361, -194, + + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194 + }, + + { + 69, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, 362, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195 + }, + + { + 69, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, 363, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196 + }, + + { + 69, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197 + }, + + { + 69, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + + -198, -198, -198, -198, -198, -198, -198, -198, -198, 364, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198 + }, + + { + 69, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, 365, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199 + + }, + + { + 69, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200 + }, + + { + 69, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201 + }, + + { + 69, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, 366, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202 + }, + + { + 69, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, 367, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203 + }, + + { + 69, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + + -204, -204, 368, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204 + }, + + { + 69, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, 369, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205 + }, + + { + 69, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 370, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206 + }, + + { + 69, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, 371, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207 + }, + + { + 69, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + + -208, -208, -208, -208, -208, -208, -208, -208, -208, 372, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208 + }, + + { + 69, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, 373, -209, -209, -209, -209, -209, -209, 374, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209 + + }, + + { + 69, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, 375, -210, + -210, -210, -210, -210, -210, -210, -210, -210, 376, -210, + 377, -210, 378, 379, 380, 381, -210, -210, -210, -210, + 382, -210, -210, -210, -210, -210, -210, -210, -210, -210, + + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210 + }, + + { + 69, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + + -211, -211, -211, -211, -211, -211, 383, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211 + }, + + { + 69, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, 384, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212 + }, + + { + 69, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, 385, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 + }, + + { + 69, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, 386, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + + -214, -214, -214, 387, -214, -214, 388, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214 + }, + + { + 69, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, 389, 390, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + 391, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215 + }, + + { + 69, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, 392, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216 + }, + + { + 69, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217 + }, + + { + 69, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + + -218, -218, -218, -218, -218, -218, -218, 393, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218 + }, + + { + 69, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, 394, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219 + + }, + + { + 69, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, 395, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220 + }, + + { + 69, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + + -221, -221, -221, -221, -221, -221, -221, -221, -221, 396, + -221, -221, -221, -221, -221, -221, -221, -221, -221, 397, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221 + }, + + { + 69, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, 398, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, 399, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222 + }, + + { + 69, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, 400, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223 + }, + + { + 69, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, 401, + + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224 + }, + + { + 69, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, 402, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225 + }, + + { + 69, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, 403, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, 404, 405, + 405, 405, 405, 405, 405, 405, 405, 405, -226, -226, + -226, -226, -226, -226, -226, 403, 403, 403, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + 403, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226 + }, + + { + 69, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, 406, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, -227, -227, + -227, -227, -227, -227, -227, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, + + 406, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227 + }, + + { + 69, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, 407, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228 + }, + + { + 69, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + + -229, -229, 408, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, -229, -229, + -229, -229, -229, -229, -229, 408, 408, 408, 408, 408, + 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, + 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, + 408, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229 + + }, + + { + 69, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, 409, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230 + }, + + { + 69, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, 410, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, -231, -231, + -231, -231, -231, -231, -231, 410, 410, 410, 410, 410, + + 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, + 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, + 410, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231 + }, + + { + 69, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, 412, -232, -232, -232, -232, -232, -232, -232, + + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232 + }, + + { + 69, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, 413, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, -233, -233, + -233, -233, -233, -233, -233, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233 + }, + + { + 69, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, 416, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234 + }, + + { + 69, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, 417, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235 + }, + + { + 69, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, 418, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, -236, -236, + -236, -236, -236, -236, -236, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236 + }, + + { + 69, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, 420, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237 + }, + + { + 69, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, 421, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, 422, 422, + 422, 422, 422, 422, 422, 422, 422, 422, -238, -238, + + -238, -238, -238, -238, -238, 423, 423, 423, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238 + }, + + { + 69, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + + -239, -239, 424, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239 + + }, + + { + 69, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, 425, 425, + 425, 425, 425, 425, 425, 425, 425, 425, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240 + }, + + { + 69, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, 426, -241, -241, 427, 428, + 428, 428, 428, 428, 428, 428, 428, 428, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, 429, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241 + }, + + { + 69, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + + -242, -242, -242, -242, -242, 426, -242, -242, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, 431, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242 + }, + + { + 69, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243 + }, + + { + 69, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, 426, -244, -244, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, 434, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244 + }, + + { + 69, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, 435, 436, + + 436, 436, 436, 436, 436, 436, 436, 436, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245 + }, + + { + 69, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, 437, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246 + }, + + { + 69, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, 438, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, 439, 439, + 439, 439, 439, 439, 439, 439, 439, 439, -247, -247, + -247, -247, -247, -247, -247, 438, 438, 438, 438, 438, + 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, + 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, + + 438, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247 + }, + + { + 69, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, 440, 440, + 440, 440, 440, 440, 440, 440, 440, 440, -248, -248, + + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, 441, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248 + }, + + { + 69, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, 442, + 442, 442, 442, 442, 442, 442, 442, 442, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249 + + }, + + { + 69, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, 444, -250, -250, -250, -250, + + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250 + }, + + { + 69, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, 445, + 445, 445, 445, 445, 445, 445, 445, 445, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251 + }, + + { + 69, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, 446, -252, -252, -252, -252, -252, -252, -252, + + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252 + }, + + { + 69, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, 447, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, 448, 448, + 448, 448, 448, 448, 448, 448, 448, 448, -253, -253, + -253, -253, -253, -253, -253, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253 + }, + + { + 69, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, 449, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254 + }, + + { + 69, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, 450, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, 451, 451, + + 451, 451, 451, 451, 451, 451, 451, 451, -255, -255, + -255, -255, -255, -255, -255, 452, 452, 452, 452, 452, + 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 452, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255 + }, + + { + 69, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, 453, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256 + }, + + { + 69, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, 454, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257 + }, + + { + 69, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, 455, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, 456, 456, + 456, 456, 456, 456, 456, 456, 456, 456, -258, -258, + + -258, -258, -258, -258, -258, 457, 457, 457, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, + 457, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258 + }, + + { + 69, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + + -259, -259, 458, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259 + + }, + + { + 69, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, 459, 459, + 459, 459, 459, 459, 459, 459, 459, 459, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260 + }, + + { + 69, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, 460, -261, -261, 461, 462, + 462, 462, 462, 462, 462, 462, 462, 462, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, 463, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261 + }, + + { + 69, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + + -262, -262, -262, -262, -262, 460, -262, -262, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, 465, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262 + }, + + { + 69, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, 466, 466, + 466, 466, 466, 466, 466, 466, 466, 466, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263 + }, + + { + 69, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, 460, -264, -264, 467, 467, + 467, 467, 467, 467, 467, 467, 467, 467, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, 468, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264 + }, + + { + 69, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, 469, 470, + + 470, 470, 470, 470, 470, 470, 470, 470, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265 + }, + + { + 69, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, 471, 471, + 471, 471, 471, 471, 471, 471, 471, 471, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, 472, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266 + }, + + { + 69, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 473, 474, + 474, 474, 474, 474, 474, 474, 474, 474, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267 + }, + + { + 69, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, 475, 475, + 475, 475, 475, 475, 475, 475, 475, 475, -268, -268, + + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, 476, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268 + }, + + { + 69, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, 477, 478, + 478, 478, 478, 478, 478, 478, 478, 478, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269 + + }, + + { + 69, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, 479, 479, + 479, 479, 479, 479, 479, 479, 479, 479, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, 480, -270, -270, -270, -270, + + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270 + }, + + { + 69, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 481, 482, + 482, 482, 482, 482, 482, 482, 482, 482, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271 + }, + + { + 69, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + + -272, -272, -272, -272, -272, -272, -272, -272, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, 484, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272 + }, + + { + 69, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, 485, 486, + 486, 486, 486, 486, 486, 486, 486, 486, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273 + }, + + { + 69, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, 487, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274 + }, + + { + 69, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, 488, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, 489, 489, + + 489, 489, 489, 489, 489, 489, 489, 489, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275 + }, + + { + 69, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, 490, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276 + }, + + { + 69, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, 491, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, 492, 492, + 492, 492, 492, 492, 492, 492, 492, 492, -277, -277, + -277, -277, -277, -277, -277, 491, 491, 491, 491, 491, + 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, + 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, + + 491, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277 + }, + + { + 69, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, 493, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278 + }, + + { + 69, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + + -279, -279, 494, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, -279, -279, + -279, -279, -279, -279, -279, 494, 494, 494, 494, 494, + 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, + 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, + 494, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279 + + }, + + { + 69, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 496, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280 + }, + + { + 69, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, 497, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281 + }, + + { + 69, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, 499, -282, -282, -282, -282, -282, -282, -282, + + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282 + }, + + { + 69, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, 500, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, 501, 501, + 501, 501, 501, 501, 501, 501, 501, 501, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283 + }, + + { + 69, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, 284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 + }, + + { + 69, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, 285, 285, + + 285, 285, 285, 285, 285, 285, 285, 285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285 + }, + + { + 69, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286 + }, + + { + 69, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, 289, -287, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, 291, 291, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + 291, 291, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287 + }, + + { + 69, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -288, -288, + + -288, -288, -288, -288, -288, -288, -288, -288, 291, 291, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + 291, 291, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288 + }, + + { + 69, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 502, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, 291, 291, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + 291, 291, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289 + + }, + + { + 69, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, 289, -290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, 291, 291, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + + 291, 291, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290 + }, + + { + 69, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, 503, -291, 503, -291, -291, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291 + }, + + { + 69, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + + -292, -292, -292, -292, -292, -292, -292, -292, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292 + }, + + { + 69, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, 295, -293, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 297, 297, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 297, 297, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293 + }, + + { + 69, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, 297, 297, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + 297, 297, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294 + }, + + { + 69, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, 505, 505, + + 505, 505, 505, 505, 505, 505, 505, 505, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, 297, 297, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + 297, 297, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295 + }, + + { + 69, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, 295, -296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, 297, 297, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + 297, 297, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296 + }, + + { + 69, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, 506, -297, 506, -297, -297, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297 + }, + + { + 69, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298 + }, + + { + 69, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + + -299, -299, -299, -299, -299, -299, -299, -299, -299, 298, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299 + + }, + + { + 69, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 302, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 303, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300 + }, + + { + 69, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301 + }, + + { + 69, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 301, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 302, 508, 508, 508, 508, 508, 508, 508, + + 508, 508, 508, 508, 508, 508, 508, 303, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305 + }, + + { + 69, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 518, 517, 517, 517, 517, 517, 517, 517, 517, 517, + + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 519, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 520, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + + 517, 517, 517, 517, 517, 517, 517, 517 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309 + + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312 + }, + + { + 69, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313 + }, + + { + 69, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 315, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314 + }, + + { + 69, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315 + }, + + { + 69, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 317, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 316, 316, 316, 316, 316, 316, 316, 316 + }, + + { + 69, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317 + }, + + { + 69, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + + -318, -318, -318, -318, -318, -318, -318, -318, 521, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318 + }, + + { + 69, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, 522, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319 + + }, + + { + 69, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, 523, + -320, -320, -320, -320, -320, -320, 524, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320 + }, + + { + 69, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, 525, -321, -321, -321, -321, + + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321 + }, + + { + 69, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, 526, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, 527, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322 + }, + + { + 69, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, 528, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, 529, + 530, -323, -323, -323, -323, -323, 531, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323 + }, + + { + 69, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + + -324, -324, -324, -324, -324, -324, -324, -324, -324, 532, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324 + }, + + { + 69, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, 533, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325 + }, + + { + 69, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, 534, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326 + }, + + { + 69, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + 535, -327, -327, -327, -327, -327, -327, -327, -327, -327, + + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327 + }, + + { + 69, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328 + }, + + { + 69, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329 + + }, + + { + 69, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, 536, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330 + }, + + { + 69, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, 537, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331 + }, + + { + 69, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, 538, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332 + }, + + { + 69, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, 539, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333 + }, + + { + 69, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, 540, -334, + + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334 + }, + + { + 69, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, 541, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335 + }, + + { + 69, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, 542, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336 + }, + + { + 69, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, 543, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337 + }, + + { + 69, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, 544, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338 + }, + + { + 69, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, 545, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339 + + }, + + { + 69, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, 546, -340, + -340, -340, -340, -340, 547, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340 + }, + + { + 69, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, 548, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341 + }, + + { + 69, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, 549, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342 + }, + + { + 69, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, 550, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343 + }, + + { + 69, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, 551, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344 + }, + + { + 69, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + 552, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345 + }, + + { + 69, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, 553, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346 + }, + + { + 69, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, 554, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347 + }, + + { + 69, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + + -348, -348, -348, -348, -348, 555, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348 + }, + + { + 69, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, 556, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349 + + }, + + { + 69, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, 557, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350 + }, + + { + 69, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, 558, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351 + }, + + { + 69, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, 559, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352 + }, + + { + 69, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, 560, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353 + }, + + { + 69, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, 561, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354 + }, + + { + 69, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, 562, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355 + }, + + { + 69, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, 563, -356, + -356, -356, -356, -356, 564, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356 + }, + + { + 69, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, 565, -357, -357, -357, -357, -357, -357, -357, + + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357 + }, + + { + 69, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + + -358, -358, -358, -358, -358, -358, -358, -358, -358, 566, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358 + }, + + { + 69, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, 567, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359 + + }, + + { + 69, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + 568, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360 + }, + + { + 69, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + 569, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361 + }, + + { + 69, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + + -362, -362, -362, -362, -362, 570, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, 571, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, 572, + -362, -362, 573, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362 + }, + + { + 69, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, 574, -363, -363, -363, -363, -363, -363, -363, 575, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363 + }, + + { + 69, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + + 576, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364 + }, + + { + 69, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, 577, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365 + }, + + { + 69, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, 578, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366 + }, + + { + 69, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, 579, -367, -367, -367, -367, -367, + + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367 + }, + + { + 69, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, 580, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368 + }, + + { + 69, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, 581, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369 + + }, + + { + 69, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, 582, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370 + }, + + { + 69, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, 583, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371 + }, + + { + 69, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, 584, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372 + }, + + { + 69, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, 585, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373 + }, + + { + 69, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + + -374, -374, -374, 586, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374 + }, + + { + 69, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, 587, + -375, -375, -375, -375, -375, -375, 588, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375 + }, + + { + 69, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, 589, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376 + }, + + { + 69, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, 590, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, 591, -377, -377, -377, -377, -377, -377, -377, + + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377 + }, + + { + 69, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + + -378, -378, -378, -378, -378, -378, -378, -378, 592, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, 593, + 594, -378, -378, -378, -378, -378, 595, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378 + }, + + { + 69, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, 596, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379 + + }, + + { + 69, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, 597, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380 + }, + + { + 69, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + + -381, -381, -381, -381, -381, -381, -381, -381, 598, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381 + }, + + { + 69, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + 599, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382 + }, + + { + 69, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, 600, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383 + }, + + { + 69, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, 601, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384 + }, + + { + 69, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, 602, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, 603, 604, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385 + }, + + { + 69, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386 + }, + + { + 69, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387 + }, + + { + 69, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388 + }, + + { + 69, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, 605, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389 + + }, + + { + 69, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + 606, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390 + }, + + { + 69, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + + -391, -391, -391, -391, -391, -391, -391, -391, -391, 607, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391 + }, + + { + 69, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, 608, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, 609, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392 + }, + + { + 69, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, 610, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393 + }, + + { + 69, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, 611, -394, -394, -394, -394, -394, -394, -394, -394, + + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394 + }, + + { + 69, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, 612, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, 613, + -395, -395, 614, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395 + }, + + { + 69, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, 615, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396 + }, + + { + 69, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, 616, -397, -397, -397, -397, -397, -397, + + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397 + }, + + { + 69, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, 617, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398 + }, + + { + 69, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, 618, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, 619, -399, + -399, -399, -399, -399, 620, -399, -399, -399, 621, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399 + + }, + + { + 69, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, 622, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400 + }, + + { + 69, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, 623, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401 + }, + + { + 69, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402 + }, + + { + 69, -403, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403 + }, + + { + 69, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404 + }, + + { + 69, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405 + }, + + { + 69, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406 + }, + + { + 69, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407 + }, + + { + 69, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408 + }, + + { + 69, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + + -409, -409, 624, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409 + + }, + + { + 69, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, 625, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410 + }, + + { + 69, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, 626, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, 626, 626, 626, 626, 626, + + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411 + }, + + { + 69, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412 + }, + + { + 69, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413 + }, + + { + 69, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414 + }, + + { + 69, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415 + }, + + { + 69, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416 + }, + + { + 69, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, 627, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417 + }, + + { + 69, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, 628, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418 + }, + + { + 69, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + + -419, -419, 629, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, 629, 629, 629, 629, 629, + 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, + 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, + 629, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419 + + }, + + { + 69, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420 + }, + + { + 69, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421 + }, + + { + 69, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422 + }, + + { + 69, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423 + }, + + { + 69, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424 + }, + + { + 69, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, 630, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, 631, 631, + + 631, 631, 631, 631, 631, 631, 631, 631, -425, -425, + -425, -425, -425, -425, -425, 630, 630, 630, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, + 630, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425 + }, + + { + 69, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, 632, 632, + 632, 632, 632, 632, 632, 632, 632, 632, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426 + }, + + { + 69, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, 633, -427, -427, 634, 635, + 635, 635, 635, 635, 635, 635, 635, 635, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + + -427, -427, -427, -427, -427, 636, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427 + }, + + { + 69, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, 633, -428, -428, 637, 637, + 637, 637, 637, 637, 637, 637, 637, 637, -428, -428, + + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, 638, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428 + }, + + { + 69, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, 639, 639, + 639, 639, 639, 639, 639, 639, 639, 639, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429 + + }, + + { + 69, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, 633, -430, -430, 634, 634, + 634, 634, 634, 634, 634, 634, 634, 634, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, 640, -430, -430, -430, -430, + + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430 + }, + + { + 69, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, 641, 642, + 642, 642, 642, 642, 642, 642, 642, 642, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431 + }, + + { + 69, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, 643, -432, -432, -432, -432, -432, -432, -432, + + -432, -432, -432, -432, -432, -432, -432, -432, 644, 644, + 644, 644, 644, 644, 644, 644, 644, 644, -432, -432, + -432, -432, -432, -432, -432, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432 + }, + + { + 69, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, 633, -433, -433, 634, 634, + 634, 634, 634, 634, 634, 634, 634, 634, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, 636, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433 + }, + + { + 69, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, 645, 646, + 646, 646, 646, 646, 646, 646, 646, 646, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434 + }, + + { + 69, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, 643, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, 647, 648, + + 648, 648, 648, 648, 648, 648, 648, 648, -435, -435, + -435, -435, -435, -435, -435, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435 + }, + + { + 69, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, 649, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, 650, 650, + 650, 650, 650, 650, 650, 650, 650, 650, -436, -436, + -436, -436, -436, -436, -436, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, + 649, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436 + }, + + { + 69, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, 651, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437 + }, + + { + 69, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, 652, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438 + }, + + { + 69, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + + -439, -439, 653, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, 653, 653, 653, 653, 653, + 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, + 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, + 653, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439 + + }, + + { + 69, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, 654, 654, + 654, 654, 654, 654, 654, 654, 654, 654, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, 655, -440, -440, -440, -440, + + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440 + }, + + { + 69, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, 656, + 656, 656, 656, 656, 656, 656, 656, 656, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441 + }, + + { + 69, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, 657, -442, -442, -442, -442, -442, -442, -442, + + -442, -442, -442, -442, -442, -442, -442, -442, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, -442, -442, + -442, -442, -442, -442, -442, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442 + }, + + { + 69, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, 659, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443 + }, + + { + 69, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, 660, + 660, 660, 660, 660, 660, 660, 660, 660, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444 + }, + + { + 69, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, 661, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, 662, 662, + + 662, 662, 662, 662, 662, 662, 662, 662, -445, -445, + -445, -445, -445, -445, -445, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + 661, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445 + }, + + { + 69, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446 + }, + + { + 69, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447 + }, + + { + 69, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448 + }, + + { + 69, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449 + + }, + + { + 69, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450 + }, + + { + 69, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451 + }, + + { + 69, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452 + }, + + { + 69, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453 + }, + + { + 69, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454 + }, + + { + 69, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455 + }, + + { + 69, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456 + }, + + { + 69, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457 + }, + + { + 69, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458 + }, + + { + 69, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + + -459, -459, 663, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, 664, 664, + 664, 664, 664, 664, 664, 664, 664, 664, -459, -459, + -459, -459, -459, -459, -459, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459 + + }, + + { + 69, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, 665, 665, + 665, 665, 665, 665, 665, 665, 665, 665, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460 + }, + + { + 69, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, 666, -461, -461, 667, 668, + 668, 668, 668, 668, 668, 668, 668, 668, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, 669, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461 + }, + + { + 69, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + + -462, -462, -462, -462, -462, 666, -462, -462, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, 671, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462 + }, + + { + 69, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463 + }, + + { + 69, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, 666, -464, -464, 667, 667, + 667, 667, 667, 667, 667, 667, 667, 667, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, 673, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464 + }, + + { + 69, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, 674, 675, + + 675, 675, 675, 675, 675, 675, 675, 675, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465 + }, + + { + 69, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, 676, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, -466, -466, + -466, -466, -466, -466, -466, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466 + }, + + { + 69, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, 666, -467, -467, 667, 667, + 667, 667, 667, 667, 667, 667, 667, 667, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + + -467, -467, -467, -467, -467, 669, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467 + }, + + { + 69, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, 678, 679, + 679, 679, 679, 679, 679, 679, 679, 679, -468, -468, + + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468 + }, + + { + 69, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + + -469, -469, 680, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, 681, 682, + 682, 682, 682, 682, 682, 682, 682, 682, -469, -469, + -469, -469, -469, -469, -469, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469 + + }, + + { + 69, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, 680, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, -470, -470, + -470, -470, -470, -470, -470, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, -470, -470, -470, -470, -470, -470, -470, -470, -470, + + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470 + }, + + { + 69, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, 684, 684, + 684, 684, 684, 684, 684, 684, 684, 684, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, 685, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471 + }, + + { + 69, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + + -472, -472, -472, -472, -472, -472, -472, -472, 686, 687, + 687, 687, 687, 687, 687, 687, 687, 687, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472 + }, + + { + 69, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, 688, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 688, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473 + }, + + { + 69, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, 688, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, 689, 689, + 689, 689, 689, 689, 689, 689, 689, 689, -474, -474, + -474, -474, -474, -474, -474, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 688, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474 + }, + + { + 69, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, 690, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475 + }, + + { + 69, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, 691, 692, + 692, 692, 692, 692, 692, 692, 692, 692, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476 + }, + + { + 69, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, 693, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + + 693, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477 + }, + + { + 69, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, 693, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 694, -478, -478, + + -478, -478, -478, -478, -478, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + 693, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478 + }, + + { + 69, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, 695, 695, + 695, 695, 695, 695, 695, 695, 695, 695, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, 696, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479 + + }, + + { + 69, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, 697, 698, + 698, 698, 698, 698, 698, 698, 698, 698, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480 + }, + + { + 69, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, 699, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, 699, 699, 699, 699, 699, + + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481 + }, + + { + 69, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, 699, -482, -482, -482, -482, -482, -482, -482, + + -482, -482, -482, -482, -482, -482, -482, -482, 700, 700, + 700, 700, 700, 700, 700, 700, 700, 700, -482, -482, + -482, -482, -482, -482, -482, 699, 699, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482 + }, + + { + 69, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, 701, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483 + }, + + { + 69, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, 702, 703, + 703, 703, 703, 703, 703, 703, 703, 703, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484 + }, + + { + 69, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, 704, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485 + }, + + { + 69, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, 704, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, 705, 705, + 705, 705, 705, 705, 705, 705, 705, 705, -486, -486, + -486, -486, -486, -486, -486, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486 + }, + + { + 69, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487 + }, + + { + 69, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488 + }, + + { + 69, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489 + + }, + + { + 69, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, 706, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490 + }, + + { + 69, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, 707, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491 + }, + + { + 69, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, 708, -492, -492, -492, -492, -492, -492, -492, + + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492 + }, + + { + 69, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493 + }, + + { + 69, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494 + }, + + { + 69, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495 + }, + + { + 69, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, 709, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496 + }, + + { + 69, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, 710, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497 + }, + + { + 69, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, 711, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, -498, -498, + + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498 + }, + + { + 69, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499 + + }, + + { + 69, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500 + }, + + { + 69, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501 + }, + + { + 69, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + + -502, -502, -502, -502, -502, -502, -502, -502, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, 291, 291, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + 291, 291, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502 + }, + + { + 69, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503 + }, + + { + 69, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504 + }, + + { + 69, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, 505, 505, + + 505, 505, 505, 505, 505, 505, 505, 505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, 297, 297, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + 297, 297, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505 + }, + + { + 69, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506 + }, + + { + 69, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507 + }, + + { + 69, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 713, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 714, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 715, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + + }, + + { + 69, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518 + }, + + { + 69, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 518, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + + 517, 517, 519, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 520, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517 + + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521 + }, + + { + 69, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522 + }, + + { + 69, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523 + }, + + { + 69, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + + -524, -524, -524, -524, 724, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524 + }, + + { + 69, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, 725, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525 + }, + + { + 69, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, 726, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526 + }, + + { + 69, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527 + }, + + { + 69, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + + -528, -528, -528, -528, -528, -528, -528, -528, -528, 727, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528 + }, + + { + 69, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, 728, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529 + + }, + + { + 69, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, 729, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530 + }, + + { + 69, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + + -531, -531, -531, -531, -531, -531, 730, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531 + }, + + { + 69, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, 731, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532 + }, + + { + 69, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + 732, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533 + }, + + { + 69, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, 733, -534, -534, -534, -534, -534, -534, + + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534 + }, + + { + 69, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, 734, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535 + }, + + { + 69, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, 735, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536 + }, + + { + 69, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + + -537, -537, -537, -537, -537, 736, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537 + }, + + { + 69, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + + -538, -538, -538, -538, -538, -538, -538, 737, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538 + }, + + { + 69, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, 738, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539 + + }, + + { + 69, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, 739, -540, -540, -540, -540, + + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540 + }, + + { + 69, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, 740, -541, + + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541 + }, + + { + 69, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, 741, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542 + }, + + { + 69, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, 742, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543 + }, + + { + 69, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, 743, -544, -544, -544, -544, -544, -544, + + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544 + }, + + { + 69, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, 744, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545 + }, + + { + 69, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, 745, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546 + }, + + { + 69, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + + -547, -547, -547, -547, -547, 746, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547 + }, + + { + 69, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + + -548, -548, -548, -548, -548, 747, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548 + }, + + { + 69, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, 748, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549 + + }, + + { + 69, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, 749, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550 + }, + + { + 69, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, 750, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551 + }, + + { + 69, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, 751, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552 + }, + + { + 69, -553, -553, -553, -553, -553, -553, -553, -553, -553, + + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, 752, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553 + }, + + { + 69, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + + -554, -554, -554, 753, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554 + }, + + { + 69, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, 754, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555 + }, + + { + 69, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, 755, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, 756, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556 + }, + + { + 69, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557 + }, + + { + 69, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, 757, + 757, 757, 757, 757, 757, 757, 757, 757, -558, -558, + + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558 + }, + + { + 69, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, 758, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559 + + }, + + { + 69, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, 759, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560 + }, + + { + 69, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + + -561, -561, 760, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561 + }, + + { + 69, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, 761, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562 + }, + + { + 69, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, 762, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563 + }, + + { + 69, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, 763, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564 + }, + + { + 69, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, 764, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565 + }, + + { + 69, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + 765, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566 + }, + + { + 69, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, 766, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567 + }, + + { + 69, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, 767, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568 + }, + + { + 69, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, 768, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569 + + }, + + { + 69, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, 769, 770, -570, -570, 771, + -570, -570, -570, -570, -570, -570, -570, -570, -570, 772, + -570, -570, 773, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570 + }, + + { + 69, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571 + }, + + { + 69, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, 774, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572 + }, + + { + 69, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, 775, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573 + }, + + { + 69, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, 776, -574, -574, 777, + -574, -574, 778, -574, -574, -574, 779, -574, -574, -574, + + -574, -574, -574, -574, -574, -574, -574, -574, 780, 781, + 782, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574 + }, + + { + 69, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, 783, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575 + }, + + { + 69, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, 784, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576 + }, + + { + 69, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + 785, -577, -577, -577, -577, -577, -577, -577, -577, -577, + + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577 + }, + + { + 69, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + + -578, -578, -578, -578, -578, -578, -578, 786, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, 787, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578 + }, + + { + 69, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + 788, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, 789, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579 + + }, + + { + 69, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580 + }, + + { + 69, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, 790, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581 + }, + + { + 69, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582 + }, + + { + 69, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583 + }, + + { + 69, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + + -584, -584, -584, 791, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584 + }, + + { + 69, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585 + }, + + { + 69, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, 792, + -586, -586, -586, 793, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586 + }, + + { + 69, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587 + }, + + { + 69, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, 794, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588 + }, + + { + 69, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, 795, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589 + + }, + + { + 69, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, 796, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590 + }, + + { + 69, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591 + }, + + { + 69, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, 797, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592 + }, + + { + 69, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, 798, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593 + }, + + { + 69, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + + -594, -594, -594, -594, -594, -594, -594, -594, 799, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594 + }, + + { + 69, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, 800, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595 + }, + + { + 69, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, 801, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596 + }, + + { + 69, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + 802, -597, -597, -597, -597, -597, -597, -597, -597, -597, + + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597 + }, + + { + 69, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, 803, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598 + }, + + { + 69, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, 804, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599 + + }, + + { + 69, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + 805, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600 + }, + + { + 69, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + + -601, -601, -601, -601, -601, -601, 806, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601 + }, + + { + 69, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, 807, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, 808, + 809, -602, -602, 810, -602, 811, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602 + }, + + { + 69, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, 812, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603 + }, + + { + 69, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + + -604, -604, -604, -604, -604, -604, -604, -604, -604, 813, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604 + }, + + { + 69, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, 814, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605 + }, + + { + 69, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, 815, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + 816, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606 + }, + + { + 69, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, 817, -607, -607, -607, -607, -607, -607, + + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607 + }, + + { + 69, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, 818, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608 + }, + + { + 69, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + 819, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609 + + }, + + { + 69, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610 + }, + + { + 69, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611 + }, + + { + 69, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, 820, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612 + }, + + { + 69, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, 821, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613 + }, + + { + 69, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, 822, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614 + }, + + { + 69, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, 823, + + 823, 823, 823, 823, 823, 823, 823, 823, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, 824, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615 + }, + + { + 69, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616 + }, + + { + 69, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, 825, + 825, 825, 825, 825, 825, 825, 825, 825, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617 + }, + + { + 69, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, 826, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618 + }, + + { + 69, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, 827, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619 + + }, + + { + 69, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, 828, + 828, 828, 828, 828, 828, 828, 828, 828, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620 + }, + + { + 69, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, 829, + 829, 829, 829, 829, 829, 829, 829, 829, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621 + }, + + { + 69, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, 830, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622 + }, + + { + 69, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, 831, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623 + }, + + { + 69, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624 + }, + + { + 69, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625 + }, + + { + 69, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626 + }, + + { + 69, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627 + }, + + { + 69, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628 + }, + + { + 69, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629 + + }, + + { + 69, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, 832, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630 + }, + + { + 69, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, 833, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, 834, 834, + 834, 834, 834, 834, 834, 834, 834, 834, -631, -631, + -631, -631, -631, -631, -631, 833, 833, 833, 833, 833, + + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631 + }, + + { + 69, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, 835, -632, -632, -632, -632, -632, -632, -632, + + -632, -632, -632, -632, -632, -632, -632, -632, 836, 836, + 836, 836, 836, 836, 836, 836, 836, 836, -632, -632, + -632, -632, -632, -632, -632, 835, 835, 835, 835, 835, + 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 835, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632 + }, + + { + 69, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, 837, 837, + 837, 837, 837, 837, 837, 837, 837, 837, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633 + }, + + { + 69, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, 838, -634, -634, 839, 839, + 839, 839, 839, 839, 839, 839, 839, 839, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, 840, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634 + }, + + { + 69, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, 838, -635, -635, 839, 839, + + 839, 839, 839, 839, 839, 839, 839, 839, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, 841, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635 + }, + + { + 69, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, 842, 842, + 842, 842, 842, 842, 842, 842, 842, 842, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636 + }, + + { + 69, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, 838, -637, -637, 839, 839, + 839, 839, 839, 839, 839, 839, 839, 839, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + + -637, -637, -637, -637, -637, 843, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637 + }, + + { + 69, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, 844, 845, + 845, 845, 845, 845, 845, 845, 845, 845, -638, -638, + + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638 + }, + + { + 69, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + + -639, -639, 846, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, 847, 847, + 847, 847, 847, 847, 847, 847, 847, 847, -639, -639, + -639, -639, -639, -639, -639, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639 + + }, + + { + 69, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, 848, 849, + 849, 849, 849, 849, 849, 849, 849, 849, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640 + }, + + { + 69, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, 846, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, 850, 851, + 851, 851, 851, 851, 851, 851, 851, 851, -641, -641, + -641, -641, -641, -641, -641, 846, 846, 846, 846, 846, + + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641 + }, + + { + 69, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, 852, -642, -642, -642, -642, -642, -642, -642, + + -642, -642, -642, -642, -642, -642, -642, -642, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, -642, -642, + -642, -642, -642, -642, -642, 852, 852, 852, 852, 852, + 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, + 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, + 852, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642 + }, + + { + 69, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, 854, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643 + }, + + { + 69, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, 855, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, -644, -644, + -644, -644, -644, -644, -644, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + 855, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644 + }, + + { + 69, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, 846, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, 857, 858, + + 858, 858, 858, 858, 858, 858, 858, 858, -645, -645, + -645, -645, -645, -645, -645, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645 + }, + + { + 69, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, 859, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, 860, 860, + 860, 860, 860, 860, 860, 860, 860, 860, -646, -646, + -646, -646, -646, -646, -646, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646 + }, + + { + 69, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, 855, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, 861, 862, + 862, 862, 862, 862, 862, 862, 862, 862, -647, -647, + -647, -647, -647, -647, -647, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + + 855, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647 + }, + + { + 69, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, 863, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, -648, -648, + + -648, -648, -648, -648, -648, 863, 863, 863, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, + 863, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648 + }, + + { + 69, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + + -649, -649, 865, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649 + + }, + + { + 69, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, 866, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, -650, -650, + -650, -650, -650, -650, -650, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, -650, -650, -650, -650, -650, -650, -650, -650, -650, + + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650 + }, + + { + 69, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651 + }, + + { + 69, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652 + }, + + { + 69, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653 + }, + + { + 69, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, 867, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654 + }, + + { + 69, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, 868, + + 868, 868, 868, 868, 868, 868, 868, 868, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655 + }, + + { + 69, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, 869, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, -656, -656, + -656, -656, -656, -656, -656, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656 + }, + + { + 69, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, 871, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657 + }, + + { + 69, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, 872, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, -658, -658, + + -658, -658, -658, -658, -658, 872, 872, 872, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, + 872, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658 + }, + + { + 69, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, 874, + 874, 874, 874, 874, 874, 874, 874, 874, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659 + + }, + + { + 69, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, 875, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, 876, 876, + 876, 876, 876, 876, 876, 876, 876, 876, -660, -660, + -660, -660, -660, -660, -660, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 875, -660, -660, -660, -660, -660, -660, -660, -660, -660, + + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660 + }, + + { + 69, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, 877, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661 + }, + + { + 69, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, 878, -662, -662, -662, -662, -662, -662, -662, + + -662, -662, -662, -662, -662, -662, -662, -662, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, -662, -662, + -662, -662, -662, -662, -662, 878, 878, 878, 878, 878, + 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662 + }, + + { + 69, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, 880, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663 + }, + + { + 69, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, 881, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, 882, 882, + 882, 882, 882, 882, 882, 882, 882, 882, -664, -664, + -664, -664, -664, -664, -664, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664 + }, + + { + 69, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, 883, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, 884, 884, + + 884, 884, 884, 884, 884, 884, 884, 884, -665, -665, + -665, -665, -665, -665, -665, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665 + }, + + { + 69, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, 885, 885, + 885, 885, 885, 885, 885, 885, 885, 885, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666 + }, + + { + 69, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, 886, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + + -667, -667, -667, -667, -667, 887, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667 + }, + + { + 69, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, 886, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, 888, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668 + }, + + { + 69, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, 889, 889, + 889, 889, 889, 889, 889, 889, 889, 889, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669 + + }, + + { + 69, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, 886, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, 890, -670, -670, -670, -670, + + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670 + }, + + { + 69, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, 891, 892, + 892, 892, 892, 892, 892, 892, 892, 892, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671 + }, + + { + 69, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, 893, -672, -672, -672, -672, -672, -672, -672, + + -672, -672, -672, -672, -672, -672, -672, -672, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, -672, -672, + -672, -672, -672, -672, -672, 893, 893, 893, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672 + }, + + { + 69, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, 895, 896, + 896, 896, 896, 896, 896, 896, 896, 896, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673 + }, + + { + 69, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, 897, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, 898, 899, + 899, 899, 899, 899, 899, 899, 899, 899, -674, -674, + -674, -674, -674, -674, -674, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674 + }, + + { + 69, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, 897, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, 900, 900, + + 900, 900, 900, 900, 900, 900, 900, 900, -675, -675, + -675, -675, -675, -675, -675, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675 + }, + + { + 69, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, 901, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676 + }, + + { + 69, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, 902, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, 903, 903, + 903, 903, 903, 903, 903, 903, 903, 903, -677, -677, + -677, -677, -677, -677, -677, 902, 902, 902, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, + + 902, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677 + }, + + { + 69, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, 904, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, 905, 906, + 906, 906, 906, 906, 906, 906, 906, 906, -678, -678, + + -678, -678, -678, -678, -678, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678 + }, + + { + 69, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + + -679, -679, 904, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 907, -679, -679, + -679, -679, -679, -679, -679, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679 + + }, + + { + 69, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, 908, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680 + }, + + { + 69, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, 909, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, 910, 911, + 911, 911, 911, 911, 911, 911, 911, 911, -681, -681, + -681, -681, -681, -681, -681, 909, 909, 909, 909, 909, + + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681 + }, + + { + 69, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, 909, -682, -682, -682, -682, -682, -682, -682, + + -682, -682, -682, -682, -682, -682, -682, -682, 912, 912, + 912, 912, 912, 912, 912, 912, 912, 912, -682, -682, + -682, -682, -682, -682, -682, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682 + }, + + { + 69, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, 913, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, 903, 903, + 903, 903, 903, 903, 903, 903, 903, 903, -683, -683, + -683, -683, -683, -683, -683, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683 + }, + + { + 69, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, 914, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684 + }, + + { + 69, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, 915, 916, + + 916, 916, 916, 916, 916, 916, 916, 916, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685 + }, + + { + 69, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, 917, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686 + }, + + { + 69, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, 917, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, 918, 918, + 918, 918, 918, 918, 918, 918, 918, 918, -687, -687, + -687, -687, -687, -687, -687, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + + 917, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687 + }, + + { + 69, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, 919, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688 + }, + + { + 69, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + + -689, -689, 920, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, -689, -689, + -689, -689, -689, -689, -689, 920, 920, 920, 920, 920, + 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, + 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, + 920, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689 + + }, + + { + 69, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690 + }, + + { + 69, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, 923, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, 923, 923, 923, 923, 923, + + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691 + }, + + { + 69, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, 923, -692, -692, -692, -692, -692, -692, -692, + + -692, -692, -692, -692, -692, -692, -692, -692, 924, 924, + 924, 924, 924, 924, 924, 924, 924, 924, -692, -692, + -692, -692, -692, -692, -692, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692 + }, + + { + 69, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, 925, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693 + }, + + { + 69, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, 926, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, 927, 927, + 927, 927, 927, 927, 927, 927, 927, 927, -694, -694, + -694, -694, -694, -694, -694, 926, 926, 926, 926, 926, + 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, + + 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, + 926, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694 + }, + + { + 69, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, 928, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695 + }, + + { + 69, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, 929, 930, + 930, 930, 930, 930, 930, 930, 930, 930, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696 + }, + + { + 69, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, 931, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + + 931, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697 + }, + + { + 69, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, 931, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, 932, 932, + 932, 932, 932, 932, 932, 932, 932, 932, -698, -698, + + -698, -698, -698, -698, -698, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698 + }, + + { + 69, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + + -699, -699, 933, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699 + + }, + + { + 69, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, 934, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, 935, 935, + 935, 935, 935, 935, 935, 935, 935, 935, -700, -700, + -700, -700, -700, -700, -700, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, + 934, -700, -700, -700, -700, -700, -700, -700, -700, -700, + + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700 + }, + + { + 69, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, 936, 936, + 936, 936, 936, 936, 936, 936, 936, 936, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701 + }, + + { + 69, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, 937, -702, -702, -702, -702, -702, -702, -702, + + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702 + }, + + { + 69, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, 937, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, 938, 938, + 938, 938, 938, 938, 938, 938, 938, 938, -703, -703, + -703, -703, -703, -703, -703, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703 + }, + + { + 69, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, 939, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704 + }, + + { + 69, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, 940, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, 941, 941, + + 941, 941, 941, 941, 941, 941, 941, 941, -705, -705, + -705, -705, -705, -705, -705, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705 + }, + + { + 69, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706 + }, + + { + 69, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707 + }, + + { + 69, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708 + }, + + { + 69, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709 + + }, + + { + 69, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710 + }, + + { + 69, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711 + }, + + { + 69, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712 + }, + + { + 69, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713 + }, + + { + 69, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 713, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 714, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 715, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716 + }, + + { + 69, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716 + + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721 + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724 + }, + + { + 69, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725 + }, + + { + 69, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726 + }, + + { + 69, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727 + }, + + { + 69, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728 + }, + + { + 69, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729 + + }, + + { + 69, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730 + }, + + { + 69, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731 + }, + + { + 69, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732 + }, + + { + 69, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733 + }, + + { + 69, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734 + }, + + { + 69, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, 946, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735 + }, + + { + 69, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, 947, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736 + }, + + { + 69, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, 948, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737 + }, + + { + 69, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, 949, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738 + }, + + { + 69, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, 950, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739 + + }, + + { + 69, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, 951, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740 + }, + + { + 69, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741 + }, + + { + 69, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742 + }, + + { + 69, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743 + }, + + { + 69, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744 + }, + + { + 69, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, 952, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745 + }, + + { + 69, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, 953, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746 + }, + + { + 69, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747 + }, + + { + 69, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748 + }, + + { + 69, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749 + + }, + + { + 69, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750 + }, + + { + 69, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751 + }, + + { + 69, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752 + }, + + { + 69, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753 + }, + + { + 69, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, 954, -754, -754, -754, -754, -754, -754, + + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754 + }, + + { + 69, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, 955, 956, -755, -755, 957, + -755, -755, -755, -755, -755, -755, -755, -755, -755, 958, + -755, -755, 959, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755 + }, + + { + 69, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, 960, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756 + }, + + { + 69, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, 961, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, 962, 962, + 962, 962, 962, 962, 962, 962, 962, 962, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757 + }, + + { + 69, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, 963, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758 + }, + + { + 69, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + + -759, -759, 964, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759 + + }, + + { + 69, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, 965, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, 965, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, -760, -760, -760, -760, -760, -760, -760, -760, -760, + + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760 + }, + + { + 69, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + + -761, -761, -761, -761, -761, -761, -761, -761, -761, 966, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761 + }, + + { + 69, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, 967, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762 + }, + + { + 69, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, 968, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763 + }, + + { + 69, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + 969, -764, -764, -764, -764, -764, -764, -764, -764, -764, + + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764 + }, + + { + 69, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, 970, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + 971, -765, -765, 972, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765 + }, + + { + 69, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, 973, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766 + }, + + { + 69, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, 974, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767 + }, + + { + 69, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, 975, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768 + }, + + { + 69, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, 976, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769 + + }, + + { + 69, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, 977, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770 + }, + + { + 69, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + + -771, -771, -771, -771, -771, -771, -771, -771, 978, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771 + }, + + { + 69, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, 979, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772 + }, + + { + 69, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, 980, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773 + }, + + { + 69, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774 + }, + + { + 69, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + 981, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775 + }, + + { + 69, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, 982, + 982, 982, 982, 982, 982, 982, 982, 982, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776 + }, + + { + 69, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, 983, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777 + }, + + { + 69, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, 984, + 984, 984, 984, 984, 984, 984, 984, 984, -778, -778, + + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778 + }, + + { + 69, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, 985, + 985, 985, 985, 985, 985, 985, 985, 985, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779 + + }, + + { + 69, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780 + }, + + { + 69, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781 + }, + + { + 69, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782 + }, + + { + 69, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, 986, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783 + }, + + { + 69, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, 987, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784 + }, + + { + 69, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785 + }, + + { + 69, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, 988, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786 + }, + + { + 69, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, 989, + + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787 + }, + + { + 69, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, 990, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788 + }, + + { + 69, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, 991, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789 + + }, + + { + 69, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, 992, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790 + }, + + { + 69, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, 993, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791 + }, + + { + 69, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, 994, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792 + }, + + { + 69, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, 995, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793 + }, + + { + 69, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794 + }, + + { + 69, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795 + }, + + { + 69, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796 + }, + + { + 69, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797 + }, + + { + 69, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798 + }, + + { + 69, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799 + + }, + + { + 69, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800 + }, + + { + 69, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801 + }, + + { + 69, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802 + }, + + { + 69, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803 + }, + + { + 69, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804 + }, + + { + 69, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, 996, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805 + }, + + { + 69, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, 997, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806 + }, + + { + 69, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, 998, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807 + }, + + { + 69, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + 999, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808 + }, + + { + 69, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, 1000, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809 + + }, + + { + 69, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, 1001, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810 + }, + + { + 69, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + + -811, -811, -811, -811, -811, -811, -811, -811, 1002, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811 + }, + + { + 69, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, 1003, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812 + }, + + { + 69, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, 1004, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813 + }, + + { + 69, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814 + }, + + { + 69, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, 1005, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815 + }, + + { + 69, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, 1006, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816 + }, + + { + 69, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817 + }, + + { + 69, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, 1007, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818 + }, + + { + 69, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + + -819, -819, 1008, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819 + + }, + + { + 69, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, 1009, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820 + }, + + { + 69, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, 1010, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821 + }, + + { + 69, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + 1011, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822 + }, + + { + 69, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, 1012, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, -823, -823, + -823, -823, -823, -823, -823, 1012, 1012, 1012, 1012, 1012, + 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, + 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, + 1012, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823 + }, + + { + 69, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, 1014, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824 + }, + + { + 69, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, 1015, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, 1016, 1016, + + 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, -825, -825, + -825, -825, -825, -825, -825, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825 + }, + + { + 69, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, 1017, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826 + }, + + { + 69, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, 1018, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827 + }, + + { + 69, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, 1019, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, -828, -828, + + -828, -828, -828, -828, -828, 1019, 1019, 1019, 1019, 1019, + 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, + 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, + 1019, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828 + }, + + { + 69, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + + -829, -829, 1021, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, 1022, 1022, + 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, -829, -829, + -829, -829, -829, -829, -829, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829 + + }, + + { + 69, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, 1023, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830 + }, + + { + 69, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, 1024, -831, -831, + + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831 + }, + + { + 69, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, 1025, -832, -832, -832, -832, -832, -832, -832, + + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832 + }, + + { + 69, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, 1026, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833 + }, + + { + 69, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, 1027, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, -834, -834, + -834, -834, -834, -834, -834, 1027, 1027, 1027, 1027, 1027, + 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + + 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + 1027, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834 + }, + + { + 69, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, 1029, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835 + }, + + { + 69, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, 1030, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, 1031, 1031, + 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, -836, -836, + -836, -836, -836, -836, -836, 1030, 1030, 1030, 1030, 1030, + 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, + 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, + 1030, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836 + }, + + { + 69, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, 1032, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, 1033, 1033, + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, -837, -837, + -837, -837, -837, -837, -837, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, + + 1032, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837 + }, + + { + 69, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, -838, -838, + + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838 + }, + + { + 69, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, 1035, 1035, + 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839 + + }, + + { + 69, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, 1036, 1036, + 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840 + }, + + { + 69, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, 1036, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841 + }, + + { + 69, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, 1038, -842, -842, -842, -842, -842, -842, -842, + + -842, -842, -842, -842, -842, -842, -842, -842, 1039, 1039, + 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, -842, -842, + -842, -842, -842, -842, -842, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842 + }, + + { + 69, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, 1036, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843 + }, + + { + 69, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, 1038, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, 1039, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, -844, -844, + -844, -844, -844, -844, -844, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844 + }, + + { + 69, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, 1042, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, 1043, 1043, + + 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, -845, -845, + -845, -845, -845, -845, -845, 1042, 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, + 1042, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845 + }, + + { + 69, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, 1044, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846 + }, + + { + 69, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, 1045, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, -847, -847, + -847, -847, -847, -847, -847, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + + 1045, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847 + }, + + { + 69, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, 1038, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, 1039, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, -848, -848, + + -848, -848, -848, -848, -848, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848 + }, + + { + 69, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + + -849, -849, 1048, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, -849, -849, + -849, -849, -849, -849, -849, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849 + + }, + + { + 69, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, 1045, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, 1046, 1050, + 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, -850, -850, + -850, -850, -850, -850, -850, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, -850, -850, -850, -850, -850, -850, -850, -850, -850, + + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850 + }, + + { + 69, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, 1051, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, 1052, 1052, + 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, -851, -851, + -851, -851, -851, -851, -851, 1051, 1051, 1051, 1051, 1051, + + 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, + 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, + 1051, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851 + }, + + { + 69, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, 1053, -852, -852, -852, -852, -852, -852, -852, + + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852 + }, + + { + 69, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, 1054, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, -853, -853, + -853, -853, -853, -853, -853, 1054, 1054, 1054, 1054, 1054, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 1054, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853 + }, + + { + 69, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, 1055, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854 + }, + + { + 69, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, 1056, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855 + }, + + { + 69, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, 1057, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, -856, -856, + -856, -856, -856, -856, -856, 1057, 1057, 1057, 1057, 1057, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856 + }, + + { + 69, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, 1045, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, 1046, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, -857, -857, + -857, -857, -857, -857, -857, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + + 1045, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857 + }, + + { + 69, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, 1060, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, 1061, 1061, + 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, -858, -858, + + -858, -858, -858, -858, -858, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858 + }, + + { + 69, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + + -859, -859, 1062, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859 + + }, + + { + 69, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, 1063, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, -860, -860, + -860, -860, -860, -860, -860, 1063, 1063, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 1063, -860, -860, -860, -860, -860, -860, -860, -860, -860, + + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860 + }, + + { + 69, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, 1057, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, 1058, 1064, + 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, -861, -861, + -861, -861, -861, -861, -861, 1057, 1057, 1057, 1057, 1057, + + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861 + }, + + { + 69, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, 1065, -862, -862, -862, -862, -862, -862, -862, + + -862, -862, -862, -862, -862, -862, -862, -862, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, -862, -862, + -862, -862, -862, -862, -862, 1065, 1065, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, + 1065, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862 + }, + + { + 69, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, 1067, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863 + }, + + { + 69, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, 1068, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, -864, -864, + -864, -864, -864, -864, -864, 1068, 1068, 1068, 1068, 1068, + 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, + + 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, + 1068, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864 + }, + + { + 69, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, 1069, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865 + }, + + { + 69, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, 1070, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866 + }, + + { + 69, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, 1071, + 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867 + }, + + { + 69, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, 1072, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, -868, -868, + + -868, -868, -868, -868, -868, 1072, 1072, 1072, 1072, 1072, + 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, + 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, + 1072, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868 + }, + + { + 69, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + + -869, -869, 1074, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869 + + }, + + { + 69, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, 1075, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, -870, -870, + -870, -870, -870, -870, -870, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, -870, -870, -870, -870, -870, -870, -870, -870, -870, + + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870 + }, + + { + 69, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, 1077, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871 + }, + + { + 69, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, 1078, -872, -872, -872, -872, -872, -872, -872, + + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872 + }, + + { + 69, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, 1079, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, -873, -873, + -873, -873, -873, -873, -873, 1079, 1079, 1079, 1079, 1079, + 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, + 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, + 1079, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873 + }, + + { + 69, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874 + }, + + { + 69, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875 + }, + + { + 69, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876 + }, + + { + 69, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877 + }, + + { + 69, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878 + }, + + { + 69, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879 + + }, + + { + 69, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, 1081, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880 + }, + + { + 69, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, 1082, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881 + }, + + { + 69, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, 1083, -882, -882, -882, -882, -882, -882, -882, + + -882, -882, -882, -882, -882, -882, -882, -882, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, -882, -882, + -882, -882, -882, -882, -882, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882 + }, + + { + 69, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, 1085, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883 + }, + + { + 69, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, 1086, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, -884, -884, + -884, -884, -884, -884, -884, 1086, 1086, 1086, 1086, 1086, + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1086, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884 + }, + + { + 69, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, 1088, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, 1089, 1089, + + 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, -885, -885, + -885, -885, -885, -885, -885, 1088, 1088, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885 + }, + + { + 69, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, 1090, 1090, + 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886 + }, + + { + 69, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, 1091, 1091, + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887 + }, + + { + 69, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, 1092, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, -888, -888, + + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888 + }, + + { + 69, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + + -889, -889, 1093, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, 1094, 1094, + 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, -889, -889, + -889, -889, -889, -889, -889, 1093, 1093, 1093, 1093, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 1093, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889 + + }, + + { + 69, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, 1095, 1095, + 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890 + }, + + { + 69, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, 1096, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, 1097, 1097, + 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, -891, -891, + -891, -891, -891, -891, -891, 1096, 1096, 1096, 1096, 1096, + + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891 + }, + + { + 69, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, 1096, -892, -892, -892, -892, -892, -892, -892, + + -892, -892, -892, -892, -892, -892, -892, -892, 1098, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, -892, -892, + -892, -892, -892, -892, -892, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892 + }, + + { + 69, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, 1099, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893 + }, + + { + 69, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, 1100, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, -894, -894, + -894, -894, -894, -894, -894, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894 + }, + + { + 69, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, 1102, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, 1103, 1103, + + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, -895, -895, + -895, -895, -895, -895, -895, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895 + }, + + { + 69, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, 1102, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, -896, -896, + -896, -896, -896, -896, -896, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896 + }, + + { + 69, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, 1105, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897 + }, + + { + 69, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, 1106, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, 1107, 1107, + 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, -898, -898, + + -898, -898, -898, -898, -898, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898 + }, + + { + 69, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + + -899, -899, 1106, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, 1108, 1108, + 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, -899, -899, + -899, -899, -899, -899, -899, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899 + + }, + + { + 69, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, 1109, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, -900, -900, + -900, -900, -900, -900, -900, 1109, 1109, 1109, 1109, 1109, + 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, + 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, + 1109, -900, -900, -900, -900, -900, -900, -900, -900, -900, + + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900 + }, + + { + 69, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, 1110, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901 + }, + + { + 69, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, 1111, -902, -902, -902, -902, -902, -902, -902, + + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902 + }, + + { + 69, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, 1112, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, -903, -903, + -903, -903, -903, -903, -903, 1112, 1112, 1112, 1112, 1112, + 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, + 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, + 1112, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903 + }, + + { + 69, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, 1114, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904 + }, + + { + 69, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, 1115, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, 1116, 1116, + + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, -905, -905, + -905, -905, -905, -905, -905, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905 + }, + + { + 69, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, 1115, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, 1117, 1117, + 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, -906, -906, + -906, -906, -906, -906, -906, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906 + }, + + { + 69, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, 1118, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, -907, -907, + -907, -907, -907, -907, -907, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + + 1118, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907 + }, + + { + 69, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, 1119, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908 + }, + + { + 69, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + + -909, -909, 1120, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909 + + }, + + { + 69, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, 1121, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, 1122, 1122, + 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, -910, -910, + -910, -910, -910, -910, -910, 1121, 1121, 1121, 1121, 1121, + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, -910, -910, -910, -910, -910, -910, -910, -910, -910, + + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910 + }, + + { + 69, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, 1121, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, -911, -911, + -911, -911, -911, -911, -911, 1121, 1121, 1121, 1121, 1121, + + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911 + }, + + { + 69, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, 1124, -912, -912, -912, -912, -912, -912, -912, + + -912, -912, -912, -912, -912, -912, -912, -912, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, -912, -912, + -912, -912, -912, -912, -912, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912 + }, + + { + 69, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, 1125, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913 + }, + + { + 69, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, 1126, 1126, + 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914 + }, + + { + 69, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, 1127, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915 + }, + + { + 69, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, 1127, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, 1128, 1128, + 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, -916, -916, + -916, -916, -916, -916, -916, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916 + }, + + { + 69, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, 1129, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917 + }, + + { + 69, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, 1130, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, 1131, 1131, + 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, -918, -918, + + -918, -918, -918, -918, -918, 1130, 1130, 1130, 1130, 1130, + 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918 + }, + + { + 69, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + + -919, -919, 1132, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919 + + }, + + { + 69, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, 1133, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920 + }, + + { + 69, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, 1134, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, 1135, 1135, + 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, -921, -921, + -921, -921, -921, -921, -921, 1134, 1134, 1134, 1134, 1134, + + 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, + 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, + 1134, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921 + }, + + { + 69, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922 + }, + + { + 69, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923 + }, + + { + 69, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924 + }, + + { + 69, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925 + }, + + { + 69, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926 + }, + + { + 69, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927 + }, + + { + 69, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, 1136, 1136, + 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, -928, -928, + + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928 + }, + + { + 69, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + + -929, -929, 1137, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929 + + }, + + { + 69, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, 1137, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, -930, -930, + -930, -930, -930, -930, -930, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, -930, -930, -930, -930, -930, -930, -930, -930, -930, + + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930 + }, + + { + 69, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, 1139, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931 + }, + + { + 69, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, 1140, -932, -932, -932, -932, -932, -932, -932, + + -932, -932, -932, -932, -932, -932, -932, -932, 1141, 1141, + 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, -932, -932, + -932, -932, -932, -932, -932, 1140, 1140, 1140, 1140, 1140, + 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, + 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, + 1140, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932 + }, + + { + 69, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, 1142, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933 + }, + + { + 69, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, 1143, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934 + }, + + { + 69, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, 1144, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, 1145, 1145, + + 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, -935, -935, + -935, -935, -935, -935, -935, 1144, 1144, 1144, 1144, 1144, + 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, + 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, + 1144, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935 + }, + + { + 69, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936 + }, + + { + 69, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937 + }, + + { + 69, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938 + }, + + { + 69, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939 + + }, + + { + 69, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940 + }, + + { + 69, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, 1146, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946 + }, + + { + 69, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, 1147, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947 + }, + + { + 69, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, 1148, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948 + }, + + { + 69, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, 1149, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949 + + }, + + { + 69, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, 1150, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950 + }, + + { + 69, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, 1151, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951 + }, + + { + 69, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, 1152, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952 + }, + + { + 69, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, 1153, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953 + }, + + { + 69, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + + -954, -954, -954, -954, -954, 1154, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954 + }, + + { + 69, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, 1155, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955 + }, + + { + 69, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, 1156, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956 + }, + + { + 69, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, 1157, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957 + }, + + { + 69, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + + -958, -958, -958, -958, -958, -958, 1158, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958 + }, + + { + 69, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, 1159, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959 + + }, + + { + 69, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + 1160, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960 + }, + + { + 69, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, 1161, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961 + }, + + { + 69, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, 1162, -962, -962, -962, -962, -962, -962, -962, + + -962, -962, -962, -962, -962, -962, -962, -962, 1163, 1163, + 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962 + }, + + { + 69, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, 1164, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963 + }, + + { + 69, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, 1165, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964 + }, + + { + 69, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, 1166, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965 + }, + + { + 69, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, 1167, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966 + }, + + { + 69, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, 1168, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967 + }, + + { + 69, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + + -968, -968, -968, -968, -968, -968, 1169, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968 + }, + + { + 69, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + + -969, -969, 1170, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + 1171, -969, -969, 1172, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969 + + }, + + { + 69, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, 1173, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970 + }, + + { + 69, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, 1174, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971 + }, + + { + 69, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, 1175, -972, -972, -972, -972, -972, -972, -972, + + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972 + }, + + { + 69, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, 1176, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973 + }, + + { + 69, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, 1177, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974 + }, + + { + 69, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, 1178, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975 + }, + + { + 69, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, 1179, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976 + }, + + { + 69, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, 1180, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977 + }, + + { + 69, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + + -978, -978, -978, -978, -978, -978, -978, -978, 1181, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978 + }, + + { + 69, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, 1182, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979 + + }, + + { + 69, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + 1183, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980 + }, + + { + 69, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, 1184, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + + 1185, -981, -981, 1186, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981 + }, + + { + 69, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, 1187, -982, -982, -982, -982, -982, -982, -982, + + -982, -982, -982, -982, -982, -982, -982, -982, 1188, 1188, + 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982 + }, + + { + 69, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, 1189, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983 + }, + + { + 69, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, 1190, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 1191, 1191, + 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984 + }, + + { + 69, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, 1192, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, 1193, 1193, + + 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985 + }, + + { + 69, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, 1194, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986 + }, + + { + 69, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, 1195, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987 + }, + + { + 69, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, 1196, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988 + }, + + { + 69, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, 1197, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989 + + }, + + { + 69, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, 1198, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, 1199, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990 + }, + + { + 69, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, 1200, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991 + }, + + { + 69, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, 1201, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992 + }, + + { + 69, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, 1202, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993 + }, + + { + 69, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + + -994, -994, -994, 1203, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994 + }, + + { + 69, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, 1204, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995 + }, + + { + 69, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, 1205, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996 + }, + + { + 69, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, 1206, -997, -997, -997, -997, -997, -997, + + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997 + }, + + { + 69, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, 1207, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998 + }, + + { + 69, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + 1208, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999 + + }, + + { + 69,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 1209,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000 + }, + + { + 69,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001, 1210,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001 + }, + + { + 69,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002, 1211,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002 + }, + + { + 69,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003, 1212,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003 + }, + + { + 69,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + + -1004,-1004, 1213,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004 + }, + + { + 69,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005, 1214,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005 + }, + + { + 69,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006, 1215,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006 + }, + + { + 69,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007, 1216,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007 + }, + + { + 69,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008, 1217,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008 + }, + + { + 69,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009, 1218,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009 + + }, + + { + 69,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010, 1219,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010 + }, + + { + 69,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011, 1220,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011, 1220, 1220, 1220, 1220, 1220, + + 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, + 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, + 1220,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011 + }, + + { + 69,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012, 1221,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012 + }, + + { + 69,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013, 1222,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,-1013,-1013, + -1013,-1013,-1013,-1013,-1013, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013 + }, + + { + 69,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, 1224, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014 + }, + + { + 69,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015, 1225,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015 + }, + + { + 69,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016, 1226,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, 1227, 1227, + 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,-1016,-1016, + -1016,-1016,-1016,-1016,-1016, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016 + }, + + { + 69,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017, 1228,-1017,-1017,-1017,-1017,-1017,-1017, + + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017 + }, + + { + 69,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, 1229, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018 + }, + + { + 69,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + + -1019,-1019, 1230,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019 + + }, + + { + 69,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020, 1231,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, 1232, 1232, + 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,-1020,-1020, + -1020,-1020,-1020,-1020,-1020, 1231, 1231, 1231, 1231, 1231, + 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, + 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, + 1231,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020 + }, + + { + 69,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021, 1233,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021 + }, + + { + 69,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022, 1234,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, 1235, 1235, + 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,-1022,-1022, + -1022,-1022,-1022,-1022,-1022, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022 + }, + + { + 69,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, 1236, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023 + }, + + { + 69,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, 1237, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024 + }, + + { + 69,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025 + }, + + { + 69,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026 + }, + + { + 69,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027 + }, + + { + 69,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028 + }, + + { + 69,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029 + + }, + + { + 69,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030 + }, + + { + 69,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031 + }, + + { + 69,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032 + }, + + { + 69,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033 + }, + + { + 69,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034 + }, + + { + 69,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035 + }, + + { + 69,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036 + }, + + { + 69,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037 + }, + + { + 69,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038 + }, + + { + 69,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039 + + }, + + { + 69,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040 + }, + + { + 69,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041 + }, + + { + 69,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042 + }, + + { + 69,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043 + }, + + { + 69,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044 + }, + + { + 69,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045 + }, + + { + 69,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046 + }, + + { + 69,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047 + }, + + { + 69,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048 + }, + + { + 69,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049 + + }, + + { + 69,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050 + }, + + { + 69,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051 + }, + + { + 69,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052 + }, + + { + 69,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053 + }, + + { + 69,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054 + }, + + { + 69,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055 + }, + + { + 69,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056 + }, + + { + 69,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057 + }, + + { + 69,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058 + }, + + { + 69,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059 + + }, + + { + 69,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060 + }, + + { + 69,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061 + }, + + { + 69,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062 + }, + + { + 69,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063 + }, + + { + 69,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064 + }, + + { + 69,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065 + }, + + { + 69,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066 + }, + + { + 69,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067 + }, + + { + 69,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068 + }, + + { + 69,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069 + + }, + + { + 69,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070 + }, + + { + 69,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071 + }, + + { + 69,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072 + }, + + { + 69,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073 + }, + + { + 69,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074 + }, + + { + 69,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075 + }, + + { + 69,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076 + }, + + { + 69,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077 + }, + + { + 69,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078 + }, + + { + 69,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079 + + }, + + { + 69,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080 + }, + + { + 69,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081 + }, + + { + 69,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082 + }, + + { + 69,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083 + }, + + { + 69,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084 + }, + + { + 69,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085 + }, + + { + 69,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086 + }, + + { + 69,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087 + }, + + { + 69,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088 + }, + + { + 69,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089 + + }, + + { + 69,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090 + }, + + { + 69,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091 + }, + + { + 69,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092 + }, + + { + 69,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093 + }, + + { + 69,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094 + }, + + { + 69,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095 + }, + + { + 69,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096 + }, + + { + 69,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097 + }, + + { + 69,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098 + }, + + { + 69,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099 + + }, + + { + 69,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100 + }, + + { + 69,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101 + }, + + { + 69,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102 + }, + + { + 69,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103 + }, + + { + 69,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104 + }, + + { + 69,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105 + }, + + { + 69,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106 + }, + + { + 69,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107 + }, + + { + 69,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108 + }, + + { + 69,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109 + + }, + + { + 69,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110 + }, + + { + 69,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111 + }, + + { + 69,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112 + }, + + { + 69,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113 + }, + + { + 69,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114 + }, + + { + 69,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115 + }, + + { + 69,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116 + }, + + { + 69,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117 + }, + + { + 69,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118 + }, + + { + 69,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119 + + }, + + { + 69,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120 + }, + + { + 69,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121 + }, + + { + 69,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122 + }, + + { + 69,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123 + }, + + { + 69,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124 + }, + + { + 69,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125 + }, + + { + 69,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126 + }, + + { + 69,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127 + }, + + { + 69,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128 + }, + + { + 69,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129 + + }, + + { + 69,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130 + }, + + { + 69,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131 + }, + + { + 69,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132 + }, + + { + 69,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133 + }, + + { + 69,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134 + }, + + { + 69,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135 + }, + + { + 69,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136 + }, + + { + 69,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137 + }, + + { + 69,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138 + }, + + { + 69,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139 + + }, + + { + 69,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140 + }, + + { + 69,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141 + }, + + { + 69,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142 + }, + + { + 69,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143 + }, + + { + 69,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144 + }, + + { + 69,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145 + }, + + { + 69,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146, 1238,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146 + }, + + { + 69,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147, 1239,-1147,-1147,-1147,-1147,-1147,-1147, + + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147 + }, + + { + 69,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148, 1240,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148 + }, + + { + 69,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149, 1241,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149 + + }, + + { + 69,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150, 1242,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150 + }, + + { + 69,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151, 1243,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151 + }, + + { + 69,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152, 1244,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152 + }, + + { + 69,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153, 1245,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153 + }, + + { + 69,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + + -1154,-1154,-1154, 1246,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154 + }, + + { + 69,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155, 1247,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155 + }, + + { + 69,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156, 1248,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156 + }, + + { + 69,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, 1249,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157 + }, + + { + 69,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158, 1250,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158 + }, + + { + 69,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + 1251,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159 + + }, + + { + 69,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160, 1252,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160 + }, + + { + 69,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161, 1253,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161 + }, + + { + 69,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162, 1254,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162 + }, + + { + 69,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163, 1255,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163 + }, + + { + 69,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + + -1164,-1164,-1164, 1256,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164 + }, + + { + 69,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165, 1257,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165 + }, + + { + 69,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166, 1258,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166 + }, + + { + 69,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167 + }, + + { + 69,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168, 1259,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168 + }, + + { + 69,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169, 1260,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169 + + }, + + { + 69,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170, 1261,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170 + }, + + { + 69,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171 + }, + + { + 69,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172 + }, + + { + 69,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173, 1262,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173 + }, + + { + 69,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174, 1263,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174 + }, + + { + 69,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175, 1264,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175 + }, + + { + 69,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176, 1265,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176 + }, + + { + 69,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177 + }, + + { + 69,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178 + }, + + { + 69,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + + -1179,-1179, 1266,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179 + + }, + + { + 69,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180, 1267,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180 + }, + + { + 69,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181, 1268,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181 + }, + + { + 69,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182, 1269,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182 + }, + + { + 69,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183, 1270,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + 1271,-1183,-1183, 1272,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183 + }, + + { + 69,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184, 1273,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184 + }, + + { + 69,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185, 1274,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185 + }, + + { + 69,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186, 1275,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186 + }, + + { + 69,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187, 1276,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187 + }, + + { + 69,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188, 1277,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, 1278, 1278, + 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278,-1188,-1188, + + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188 + }, + + { + 69,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189, 1279,-1189,-1189,-1189, + -1189,-1189, 1280,-1189,-1189,-1189, 1281,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, 1282, 1283, + 1284,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189 + + }, + + { + 69,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190, 1285,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190 + }, + + { + 69,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191, 1286,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, 1287, 1287, + 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191 + }, + + { + 69,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192, 1288,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192 + }, + + { + 69,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193, 1289,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, 1290, 1290, + 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193 + }, + + { + 69,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + + -1194,-1194,-1194,-1194, 1291,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194 + }, + + { + 69,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195, 1292,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195 + }, + + { + 69,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196, 1293,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196 + }, + + { + 69,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197 + }, + + { + 69,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198, 1294,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198 + }, + + { + 69,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199 + + }, + + { + 69,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200 + }, + + { + 69,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + + 1295,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201 + }, + + { + 69,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202 + }, + + { + 69,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203 + }, + + { + 69,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204 + }, + + { + 69,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205, 1296,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205 + }, + + { + 69,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206, 1297,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206 + }, + + { + 69,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207, 1298,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207 + }, + + { + 69,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208, 1299,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208 + }, + + { + 69,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209, 1300,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209 + + }, + + { + 69,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210, 1301,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210 + }, + + { + 69,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211, 1302,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211 + }, + + { + 69,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212, 1303,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212 + }, + + { + 69,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213, 1304,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213 + }, + + { + 69,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214, 1305,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214 + }, + + { + 69,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215, 1306,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215 + }, + + { + 69,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216, 1307,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216 + }, + + { + 69,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217, 1308,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217 + }, + + { + 69,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218 + }, + + { + 69,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219 + + }, + + { + 69,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220, 1309,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220 + }, + + { + 69,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221, 1310,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221 + }, + + { + 69,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222, 1311,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222 + }, + + { + 69,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223, 1312,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223, 1312, 1312, 1312, 1312, 1312, + 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, + 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, + 1312,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223 + }, + + { + 69,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224, 1313,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224, 1313, 1313, 1313, 1313, 1313, + 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, + + 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, + 1313,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224 + }, + + { + 69,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225, 1314,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225 + }, + + { + 69,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226, 1315,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226 + }, + + { + 69,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227, 1316,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227, 1316, 1316, 1316, 1316, 1316, + 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, + 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, + + 1316,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227 + }, + + { + 69,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228, 1317,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + + -1228,-1228,-1228,-1228,-1228, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228 + }, + + { + 69,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229 + + }, + + { + 69,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230, 1318,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230 + }, + + { + 69,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231, 1319,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231 + }, + + { + 69,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232, 1320,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232, 1320, 1320, 1320, 1320, 1320, + 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, + 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, + 1320,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232 + }, + + { + 69,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233, 1321,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233 + }, + + { + 69,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234, 1322,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234 + }, + + { + 69,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235, 1323,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235, 1323, 1323, 1323, 1323, 1323, + 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, + 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, + 1323,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235 + }, + + { + 69,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236, 1324,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236 + }, + + { + 69,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237 + }, + + { + 69,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238 + }, + + { + 69,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239 + + }, + + { + 69,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240 + }, + + { + 69,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241 + }, + + { + 69,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242 + }, + + { + 69,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243 + }, + + { + 69,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244 + }, + + { + 69,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245 + }, + + { + 69,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246 + }, + + { + 69,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247 + }, + + { + 69,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248 + }, + + { + 69,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249 + + }, + + { + 69,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250 + }, + + { + 69,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251 + }, + + { + 69,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252 + }, + + { + 69,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253 + }, + + { + 69,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254 + }, + + { + 69,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255 + }, + + { + 69,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256 + }, + + { + 69,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257, 1325,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257 + }, + + { + 69,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258 + }, + + { + 69,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259 + + }, + + { + 69,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260 + }, + + { + 69,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261 + }, + + { + 69,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262 + }, + + { + 69,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263 + }, + + { + 69,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264 + }, + + { + 69,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265 + }, + + { + 69,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266 + }, + + { + 69,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267 + }, + + { + 69,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268 + }, + + { + 69,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269 + + }, + + { + 69,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270 + }, + + { + 69,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271 + }, + + { + 69,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272 + }, + + { + 69,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273 + }, + + { + 69,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274 + }, + + { + 69,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275 + }, + + { + 69,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276 + }, + + { + 69,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277 + }, + + { + 69,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278 + }, + + { + 69,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279 + + }, + + { + 69,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280 + }, + + { + 69,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281 + }, + + { + 69,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282 + }, + + { + 69,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283 + }, + + { + 69,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284 + }, + + { + 69,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285 + }, + + { + 69,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286 + }, + + { + 69,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287 + }, + + { + 69,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288 + }, + + { + 69,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289 + + }, + + { + 69,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290 + }, + + { + 69,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291 + }, + + { + 69,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292 + }, + + { + 69,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293 + }, + + { + 69,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294 + }, + + { + 69,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295 + }, + + { + 69,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296 + }, + + { + 69,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297, 1326,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297 + }, + + { + 69,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298 + }, + + { + 69,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299 + + }, + + { + 69,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300 + }, + + { + 69,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301 + }, + + { + 69,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302 + }, + + { + 69,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303 + }, + + { + 69,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304 + }, + + { + 69,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305 + }, + + { + 69,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306 + }, + + { + 69,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307 + }, + + { + 69,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308 + }, + + { + 69,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309 + + }, + + { + 69,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310 + }, + + { + 69,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311 + }, + + { + 69,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312 + }, + + { + 69,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313 + }, + + { + 69,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314, 1327,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314 + }, + + { + 69,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315, 1328,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315 + }, + + { + 69,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316, 1329,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316 + }, + + { + 69,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317, 1330,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317 + }, + + { + 69,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + + -1318, 1331,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318 + }, + + { + 69,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319, 1332,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319 + + }, + + { + 69,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320, 1333,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320 + }, + + { + 69,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321, 1334,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321 + }, + + { + 69,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322, 1335,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322 + }, + + { + 69,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323, 1336,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323 + }, + + { + 69,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324 + }, + + { + 69,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325, 1337,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325 + }, + + { + 69,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326, 1338,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326 + }, + + { + 69,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327, 1339,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327 + }, + + { + 69,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328, 1340,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328 + }, + + { + 69,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + + -1329,-1329, 1341,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329 + + }, + + { + 69,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330, 1342,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330 + }, + + { + 69,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331, 1343,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331 + }, + + { + 69,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332, 1344,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332 + }, + + { + 69,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333, 1345,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333 + }, + + { + 69,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334, 1346,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334 + }, + + { + 69,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335, 1347,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335 + }, + + { + 69,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336, 1348,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336 + }, + + { + 69,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337, 1349,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337 + }, + + { + 69,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338, 1350,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338, 1351,-1338, 1351,-1338,-1338, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1338,-1338, + + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338 + }, + + { + 69,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + + -1339,-1339, 1353,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339, 1354,-1339, 1354,-1339,-1339, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339 + + }, + + { + 69,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340, 1356,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340, 1357,-1340, 1357,-1340,-1340, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340 + }, + + { + 69,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341, 1359,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341, 1360,-1341, 1360,-1341,-1341, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341 + }, + + { + 69,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342, 1362,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + + -1342,-1342,-1342, 1363,-1342, 1363,-1342,-1342, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342 + }, + + { + 69,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343, 1365,-1343,-1343,-1343,-1343,-1343,-1343, 1366, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343 + }, + + { + 69,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344, 1367,-1344,-1344,-1344,-1344,-1344,-1344, 1368, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344 + }, + + { + 69,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345, 1369,-1345,-1345,-1345,-1345,-1345,-1345, 1370, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345 + }, + + { + 69,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346, 1371,-1346,-1346,-1346,-1346,-1346,-1346, 1372, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346 + }, + + { + 69,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347, 1373,-1347,-1347,-1347,-1347,-1347,-1347, 1374, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347 + }, + + { + 69,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348, 1375,-1348,-1348,-1348,-1348,-1348,-1348, 1376, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348 + }, + + { + 69,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + + -1349,-1349, 1377,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349 + + }, + + { + 69,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350, 1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350, 1351,-1350, 1351,-1350,-1350, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350 + }, + + { + 69,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351 + }, + + { + 69,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352 + }, + + { + 69,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353, 1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353, 1354,-1353, 1354,-1353,-1353, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353 + }, + + { + 69,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354 + }, + + { + 69,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, 1355, 1355, + + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355 + }, + + { + 69,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356, 1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356, 1357,-1356, 1357,-1356,-1356, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356 + }, + + { + 69,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357 + }, + + { + 69,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1358,-1358, + + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358 + }, + + { + 69,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + + -1359,-1359, 1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359, 1360,-1359, 1360,-1359,-1359, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359 + + }, + + { + 69,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360 + }, + + { + 69,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361 + }, + + { + 69,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362, 1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + + -1362,-1362,-1362, 1363,-1362, 1363,-1362,-1362, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362 + }, + + { + 69,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363 + }, + + { + 69,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364 + }, + + { + 69,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365, 1365,-1365,-1365,-1365,-1365,-1365,-1365, 1366, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365 + }, + + { + 69, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1379, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378 + }, + + { + 69,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367, 1367,-1367,-1367,-1367,-1367,-1367,-1367, 1368, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367 + }, + + { + 69, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1381, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380 + }, + + { + 69,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + + -1369,-1369, 1369,-1369,-1369,-1369,-1369,-1369,-1369, 1370, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369 + + }, + + { + 69, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1383, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382 + }, + + { + 69,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371, 1371,-1371,-1371,-1371,-1371,-1371,-1371, 1372, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371 + }, + + { + 69, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1385, + + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384 + }, + + { + 69,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373, 1373,-1373,-1373,-1373,-1373,-1373,-1373, 1374, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373 + }, + + { + 69, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1387, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386 + }, + + { + 69,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375, 1375,-1375,-1375,-1375,-1375,-1375,-1375, 1376, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375 + }, + + { + 69, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1389, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388 + }, + + { + 69,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377, 1390,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377 + }, + + { + 69, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1379, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378 + }, + + { + 69,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, 1378, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379 + + }, + + { + 69, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1381, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380 + }, + + { + 69,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, 1380, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381 + }, + + { + 69, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1383, + + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382 + }, + + { + 69,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, 1382, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383 + }, + + { + 69, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1385, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384 + }, + + { + 69,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, 1384, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385 + }, + + { + 69, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1387, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386 + }, + + { + 69,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, 1386, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387 + }, + + { + 69, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1389, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388 + }, + + { + 69,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, 1388, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389 + + }, + + { + 69,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390, 1391,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390 + }, + + { + 69,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391, 1392,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391 + }, + + { + 69,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392, 1393,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392 + }, + + { + 69,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393, 1394,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393 + }, + + { + 69,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394, 1395,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394 + }, + + { + 69,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395, 1396,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395 + }, + + { + 69,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396, 1397,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396 + }, + + { + 69,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397, 1398,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397 + }, + + { + 69,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398, 1399,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398 + }, + + { + 69,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + + -1399,-1399, 1400,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399 + + }, + + { + 69,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400, 1401,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400 + }, + + { + 69,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401, 1402,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401 + }, + + { + 69,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402, 1403,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402 + }, + + { + 69,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403, 1404,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403 + }, + + { + 69,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404, 1405,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404 + }, + + { + 69,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405, 1406,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405 + }, + + { + 69,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406, 1407,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406 + }, + + { + 69,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407, 1408,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407 + }, + + { + 69,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408, 1409,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408 + }, + + { + 69,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + + -1409,-1409, 1410,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409 + + }, + + { + 69,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410, 1411,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410 + }, + + { + 69,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411, 1412,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411 + }, + + { + 69,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412, 1413,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412 + }, + + { + 69,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413, 1414,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413 + }, + + { + 69,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414, 1415,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414 + }, + + { + 69,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415, 1416,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415 + }, + + { + 69,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416, 1417,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416 + }, + + { + 69,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417, 1418,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417 + }, + + { + 69,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418, 1419,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418 + }, + + { + 69,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + + -1419,-1419, 1420,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419 + + }, + + { + 69,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420, 1421,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420 + }, + + { + 69,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421, 1422,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421 + }, + + { + 69,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422, 1423,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422 + }, + + { + 69,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423, 1424,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423 + }, + + { + 69,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424, 1425,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424 + }, + + { + 69,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425, 1426,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425 + }, + + { + 69,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426, 1427,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426 + }, + + { + 69,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427, 1428,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427 + }, + + { + 69,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428, 1429,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428 + }, + + { + 69,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + + -1429,-1429, 1430,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429 + + }, + + { + 69,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430, 1431,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430 + }, + + { + 69,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431, 1432,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431 + }, + + { + 69,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432, 1433,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432 + }, + + { + 69,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433, 1434,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433 + }, + + { + 69,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434, 1435,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434 + }, + + { + 69,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435, 1436,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435 + }, + + { + 69,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436, 1437,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436 + }, + + { + 69,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437, 1438,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437 + }, + + { + 69,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438, 1439,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438 + }, + + { + 69,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + + -1439,-1439, 1440,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439 + + }, + + { + 69,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440, 1441,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440 + }, + + { + 69,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441, 1442,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441 + }, + + { + 69,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442, 1443,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442 + }, + + { + 69,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443, 1444,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443 + }, + + { + 69,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444, 1445,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444 + }, + + { + 69,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445, 1446,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445 + }, + + { + 69,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446, 1447,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446 + }, + + { + 69,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447, 1448,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447 + }, + + { + 69,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448, 1449,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448 + }, + + { + 69,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + + -1449,-1449, 1450,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449 + + }, + + { + 69,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450, 1451,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450 + }, + + { + 69,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451, 1452,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451 + }, + + { + 69,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452, 1453,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452 + }, + + { + 69,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453, 1454,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453 + }, + + { + 69,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454, 1455,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454 + }, + + { + 69,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455, 1456,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455 + }, + + { + 69,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456, 1457,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456 + }, + + { + 69,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 434 +#define YY_END_OF_BUFFER 435 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[1458] = + { 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, 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, 0, 0, 0, 0, 0, 435, 434, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 205, 205, 205, 224, 224, 216, 216, 225, 225, 217, + + 217, 272, 272, 272, 434, 293, 293, 282, 282, 297, + 297, 308, 308, 309, 309, 375, 375, 375, 410, 410, + 388, 388, 411, 411, 389, 389, 415, 415, 311, 312, + 310, 319, 319, 320, 320, 328, 328, 329, 329, 417, + 417, 419, 419, 418, 421, 421, 421, 420, 423, 423, + 423, 422, 425, 425, 434, 426, 434, 434, 434, 431, + 434, 432, 434, 433, 0, 0, 0, 64, 58, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 0, 0, 63, + + 57, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 19, 0, 66, 60, 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, 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, 0, 0, 416, 418, 0, 420, 420, 420, 420, + 0, 0, 422, 422, 422, 422, 0, 0, 424, 0, + + 428, 0, 0, 0, 426, 0, 0, 0, 426, 0, + 0, 0, 431, 0, 432, 0, 433, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 65, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 67, 61, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 202, 203, 204, 201, 200, 198, 199, 0, 0, + 0, 206, 207, 208, 213, 212, 0, 0, 0, 209, + 210, 211, 215, 214, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 294, 295, 296, 298, 299, + 300, 305, 304, 301, 302, 303, 307, 306, 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, 412, 413, 414, 0, + 0, 0, 316, 317, 318, 0, 0, 0, 325, 326, + + 327, 420, 0, 420, 422, 0, 422, 0, 0, 427, + 0, 0, 0, 429, 0, 0, 0, 426, 0, 0, + 22, 18, 26, 0, 70, 0, 90, 75, 0, 13, + 44, 80, 39, 34, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + 0, 167, 0, 0, 0, 0, 0, 51, 49, 0, + 131, 0, 0, 0, 0, 0, 0, 163, 0, 54, + 0, 56, 171, 169, 181, 0, 28, 0, 72, 0, + 92, 77, 0, 15, 46, 82, 41, 36, 87, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 183, 0, 0, 0, 0, 173, 0, 0, 95, 0, + 0, 0, 179, 218, 219, 220, 221, 222, 223, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 273, 274, 275, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 313, 314, 315, 321, 322, + 323, 324, 430, 0, 0, 0, 427, 0, 0, 0, + 426, 0, 0, 27, 71, 91, 76, 31, 14, 45, + 81, 40, 35, 86, 0, 0, 0, 0, 0, 0, + 25, 69, 89, 74, 0, 0, 30, 12, 43, 79, + 38, 33, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 0, 0, 0, 0, 0, 144, + 146, 148, 0, 0, 62, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 73, 93, 78, 32, 16, 47, + + 83, 42, 37, 88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 101, 0, 0, 99, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 281, 278, 280, 276, 277, 279, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 381, 379, 380, 376, 377, 378, 0, 0, 0, + 0, 0, 0, 0, 0, 387, 385, 386, 382, 383, + 384, 0, 427, 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, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 261, 263, 266, 270, 262, 265, + 269, 264, 268, 267, 271, 257, 235, 254, 258, 246, + 236, 232, 241, 252, 255, 259, 247, 244, 249, 237, + 233, 242, 230, 239, 251, 253, 256, 260, 248, 245, + 250, 228, 229, 238, 234, 243, 231, 240, 226, 227, + 292, 288, 291, 285, 287, 290, 283, 284, 286, 289, + 365, 367, 370, 374, 366, 369, 373, 368, 372, 371, + 361, 339, 358, 362, 350, 336, 340, 345, 356, 359, + + 363, 348, 351, 353, 334, 337, 341, 346, 343, 355, + 357, 360, 364, 332, 349, 352, 354, 333, 330, 335, + 338, 342, 347, 344, 331, 405, 395, 404, 393, 394, + 403, 390, 391, 392, 402, 409, 401, 408, 399, 400, + 407, 396, 397, 398, 406, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, + 117, 115, 0, 0, 0, 0, 50, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 162, 0, 53, 55, + + 0, 168, 170, 180, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 182, 172, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, + 0, 0, 0, 0, 0, 0, 178, 190, 195, 134, + 194, 193, 191, 186, 188, 192, 124, 123, 126, 119, + 105, 104, 120, 121, 122, 185, 0, 165, 187, 189, + 113, 112, 116, 114, 133, 130, 129, 132, 127, 107, + 111, 109, 106, 110, 108, 154, 155, 156, 153, 157, + 149, 143, 145, 147, 158, 159, 160, 150, 151, 152, + 161, 102, 164, 52, 184, 138, 0, 141, 118, 142, + + 97, 103, 140, 139, 100, 98, 135, 136, 68, 175, + 176, 177, 174, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 137, 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, 1, 0, 0, 3, 0, 0, 4, 0, 0, + 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 7, 0, 8, 0, 9, 0, 10, 0, 11, 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, 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, 0, 0, 0, 196 + } ; + +static const yy_state_type yy_NUL_trans[1458] = + { 0, + 70, 71, 91, 91, 94, 94, 96, 96, 98, 98, + 100, 100, 102, 102, 70, 70, 106, 106, 108, 108, + 110, 110, 112, 112, 114, 114, 116, 116, 119, 119, + 121, 121, 123, 123, 125, 125, 127, 127, 129, 129, + 130, 130, 132, 132, 134, 134, 136, 136, 138, 138, + 140, 140, 142, 142, 145, 145, 149, 149, 153, 153, + 155, 155, 159, 159, 161, 161, 163, 163, 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, + + 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 298, 300, 0, 304, 308, 312, 0, + 314, 0, 316, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 298, 0, 300, + + 0, 508, 509, 513, 0, 517, 308, 308, 0, 308, + 308, 312, 0, 314, 0, 316, 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, 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, + 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, 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, 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, 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, 508, 509, 0, + 509, 509, 513, 0, 513, 716, 513, 0, 517, 720, + 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, 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, 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, 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, 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, + 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, 0, 508, 942, 716, 0, 716, 716, 720, + 0, 720, 720, 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, 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, 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, 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, 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, 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, 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, 942, 0, 942, 942, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 1378, 0, 1380, 0, 1382, + 0, 1384, 0, 1386, 0, 1388, 0, 1378, 0, 1380, + 0, 1382, 0, 1384, 0, 1386, 0, 1388, 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, + 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, 0, 0, 0, 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "wcsbth.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsbth.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* wcsbth.l is a Flex description file containing the definition of a lexical +* scanner for parsing the WCS keyrecords for one or more image arrays and/or +* pixel lists in a FITS binary table header. It can also handle primary image +* and image extension headers. +* +* wcsbth.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description +* of the user interface and operating notes. +* +* Implementation notes +* -------------------- +* wcsbth() may be invoked with an option that causes it to recognize the +* image-header form of WCS keywords as defaults for each alternate coordinate +* representation (up to 27). By design, with this option enabled wcsbth() can +* also handle primary image and image extension headers, effectively treating +* them as a single-column binary table though with WCS keywords of a different +* form. +* +* NAXIS is always 2 for binary tables, it refers to the two-dimensional nature +* of the table. Thus NAXIS does not count the number of image axes in either +* image arrays or pixels lists and for the latter there is not even a formal +* equivalent of WCSAXESa. Hence NAXIS is always ignored and a first pass +* through the header is required to determine the number of images, the number +* of alternate coordinate representations for each image (up to 27), and the +* number of coordinate axes in each representation; this pass also counts the +* number of iPVn_ma and iPSn_ma or TVk_ma and TSk_ma keywords in each +* representation. +* +* On completion of the first pass, the association between column number and +* axis number is defined for each representation of a pixel list. Memory is +* allocated for an array of the required number of wcsprm structs and each of +* these is initialized appropriately. These structs are filled in the second +* pass. +* +* It is permissible for a scalar table column to contain degenerate (single- +* point) image arrays and simultaneously form one axis of a pixel list. +* +* The parser does not check for duplicated keywords, for most keywords it +* accepts the last encountered. +* +* wcsbth() does not currently handle the Green Bank convention. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Indices for parameterized keywords. */ +/* Alternate coordinate system identifier. */ +/* Keyvalue data types. */ +/* Inline comment syntax. */ +/* Exclusive start states. */ + + + + + + + + + + +#line 113 "wcsbth.l" +#include +#include +#include +#include +#include +#include + +#include "wcs.h" +#include "wcshdr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcsutil.h" + + // Codes used for keyvalue data types. +#define INTEGER 0 +#define FLOAT 1 +#define FLOAT2 2 +#define STRING 3 + + // Bit masks used for keyword types: +#define IMGAUX 0x1 // Auxiliary image header, e.g. LONPOLEa or + // DATE-OBS. +#define IMGAXIS 0x2 // Image header with axis number, e.g. + // CTYPEia. +#define IMGHEAD 0x3 // IMGAUX | IMGAXIS, i.e. image header of + // either type. +#define BIMGARR 0x4 // Binary table image array, e.g. iCTYna. +#define PIXLIST 0x8 // Pixel list, e.g. TCTYna. +#define BINTAB 0xC // BIMGARR | PIXLIST, i.e. binary table + // image array (without axis number) or + // pixel list, e.g. LONPna or OBSGXn. + +// User data associated with yyscanner. +struct wcsbth_extra { + // Values passed to YY_INPUT. + char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsbth_scanner(char *header, int nkeyrec, int relax, \ + int ctrl, int keysel, int *colsel, int *nreject, int *nwcs, \ + struct wcsprm **wcs, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// A convenience macro to get around incompatibilities between unput() and +// yyless(): put yytext followed by a blank back onto the input stream. +#define WCSBTH_PUTBACK \ + sprintf(strtmp, "%s ", yytext); \ + size_t iz = strlen(strtmp); \ + while (iz) unput(strtmp[--iz]); + +// Struct used internally for header bookkeeping. +struct wcsbth_alts { + int ncol, ialt, icol, imgherit; + short int (*arridx)[27]; + short int pixidx[27]; + short int pad1; + unsigned int *pixlist; + + unsigned char (*npv)[27]; + unsigned char (*nps)[27]; + unsigned char pixnpv[27]; + unsigned char pixnps[27]; + unsigned char pad2[2]; +}; + +// Internal helper functions. +static YY_DECL; +static int wcsbth_colax(struct wcsprm *wcs, struct wcsbth_alts *alts, int k, + char a); +static int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, + struct wcsprm **wcs); +static struct wcsprm *wcsbth_idx(struct wcsprm *wcs, struct wcsbth_alts *alts, + int keytype, int n, char a); +static int wcsbth_init1(struct wcsbth_alts *alts, int auxprm, int *nwcs, + struct wcsprm **wcs); +static int wcsbth_pass1(int keytype, int i, int j, int n, int k, char a, + char ptype, struct wcsbth_alts *alts); + +// Helper functions for keywords that require special handling. +static int wcsbth_jdref(double *wptr, const double *jdref); +static int wcsbth_jdrefi(double *wptr, const double *jdrefi); +static int wcsbth_jdreff(double *wptr, const double *jdreff); +static int wcsbth_epoch(double *wptr, const double *epoch); +static int wcsbth_vsource(double *wptr, const double *vsource); + +// Helper functions for keyvalue validity checking. +static int wcsbth_timepixr(double timepixr); + +#line 26317 "wcsbth.c" +#line 26318 "wcsbth.c" + +#define INITIAL 0 +#define CCCCCia 1 +#define iCCCna 2 +#define iCCCCn 3 +#define TCCCna 4 +#define TCCCCn 5 +#define CCi_ja 6 +#define ijCCna 7 +#define TCn_ka 8 +#define TCCn_ka 9 +#define CROTAi 10 +#define iCROTn 11 +#define TCROTn 12 +#define CCi_ma 13 +#define iCn_ma 14 +#define iCCn_ma 15 +#define TCn_ma 16 +#define TCCn_ma 17 +#define PROJPm 18 +#define CCCCCCCC 19 +#define CCCCCCCa 20 +#define CCCCna 21 +#define CCCCCna 22 +#define CCCCn 23 +#define CCCCCn 24 +#define VALUE 25 +#define INTEGER_VAL 26 +#define FLOAT_VAL 27 +#define FLOAT2_VAL 28 +#define STRING_VAL 29 +#define COMMENT 30 +#define DISCARD 31 +#define ERROR 32 +#define FLUSH 33 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct wcsbth_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 222 "wcsbth.l" + +#line 224 "wcsbth.l" + char *errmsg, errtxt[80], *keyname, strtmp[80]; + int inttmp; + double dbltmp, dbl2tmp[2]; + struct auxprm auxtem; + struct wcsprm wcstem; + + // Initialize returned values. + *nreject = 0; + *nwcs = 0; + *wcs = 0x0; + + // Our handle on the input stream. + char *keyrec = header; + char *hptr = header; + char *keep = 0x0; + + // For keeping tallies of keywords found. + int nvalid = 0; + int nother = 0; + + // Used to flag image header keywords that are always inherited. + int imherit = 1; + + // If strict, then also reject. + if (relax & WCSHDR_strict) relax |= WCSHDR_reject; + + // Keyword indices, as used in the WCS papers, e.g. iVn_ma, TPn_ka. + int i = 0; + int j = 0; + int k = 0; + int n = 0; + int m = 0; + char a = ' '; + + // Header bookkeeping. + struct wcsbth_alts alts; + alts.ncol = 0; + alts.arridx = 0x0; + alts.pixlist = 0x0; + alts.npv = 0x0; + alts.nps = 0x0; + + for (int ialt = 0; ialt < 27; ialt++) { + alts.pixidx[ialt] = 0; + alts.pixnpv[ialt] = 0; + alts.pixnps[ialt] = 0; + } + + // For decoding the keyvalue. + int keytype = 0; + int valtype = -1; + void *vptr = 0x0; + + // For keywords that require special handling. + int altlin = 0; + char ptype = ' '; + int (*chekval)(double) = 0x0; + int (*special)(double *, const double *) = 0x0; + struct auxprm *auxp = 0x0; + int auxprm = 0; + int naux = 0; + + // Selection by column number. + int nsel = colsel ? colsel[0] : 0; + int incl = (nsel > 0); + char exclude[1000]; + for (int icol = 0; icol < 1000; icol++) { + exclude[icol] = incl; + } + for (int icol = 1; icol <= abs(nsel); icol++) { + int itmp = colsel[icol]; + if (0 < itmp && itmp < 1000) { + exclude[itmp] = !incl; + } + } + exclude[0] = 0; + + // Selection by keyword type. + if (keysel) { + int itmp = keysel; + keysel = 0; + if (itmp & WCSHDR_IMGHEAD) keysel |= IMGHEAD; + if (itmp & WCSHDR_BIMGARR) keysel |= BIMGARR; + if (itmp & WCSHDR_PIXLIST) keysel |= PIXLIST; + } + if (keysel == 0) { + keysel = IMGHEAD | BINTAB; + } + + // Control variables. + int ipass = 1; + int npass = 2; + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return WCSHDRERR_PARSER; + } + + BEGIN(INITIAL); + + +#line 26704 "wcsbth.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 329 "wcsbth.l" +{ + if (ipass == 1) { + if (alts.ncol == 0) { + sscanf(yytext, "TFIELDS = %d", &(alts.ncol)); + BEGIN(FLUSH); + } else { + errmsg = "duplicate or out-of-sequence TFIELDS keyword"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 344 "wcsbth.l" +{ + if (!(keysel & IMGAXIS)) { + // Ignore this key type. + BEGIN(DISCARD); + + } else { + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "WCSAXES%c= %d", &a, &i); + + if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCSAXESa"; + keytype = IMGAXIS; + BEGIN(COMMENT); + } + + } else if (relax & WCSHDR_reject) { + errmsg = "image-header keyword WCSAXESa in binary table"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + } + YY_BREAK +case 3: +#line 378 "wcsbth.l" +case 4: +#line 379 "wcsbth.l" +case 5: +YY_RULE_SETUP +#line 379 "wcsbth.l" +{ + keyname = "WCAXna"; + + // Note that a blank in the sscanf() format string matches zero or + // more of them in the input. + sscanf(yytext, "WCAX%d%c = %d", &n, &a, &i); + + if (!(keysel & BIMGARR) || exclude[n]) { + // Ignore this key type or column. + BEGIN(DISCARD); + + } else if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCAXna"; + keytype = IMGAXIS; + BEGIN(COMMENT); + } + } + YY_BREAK +case 6: +/* rule 6 can match eol */ +#line 405 "wcsbth.l" +case 7: +/* rule 7 can match eol */ +#line 406 "wcsbth.l" +case 8: +/* rule 8 can match eol */ +YY_RULE_SETUP +#line 406 "wcsbth.l" +{ + // Cross-reference supplier. + keyname = "WCSTna"; + errmsg = "cross-references are not implemented"; + BEGIN(ERROR); + } + YY_BREAK +case 9: +/* rule 9 can match eol */ +#line 414 "wcsbth.l" +case 10: +/* rule 10 can match eol */ +#line 415 "wcsbth.l" +case 11: +/* rule 11 can match eol */ +YY_RULE_SETUP +#line 415 "wcsbth.l" +{ + // Cross-reference consumer. + keyname = "WCSXna"; + errmsg = "cross-references are not implemented"; + BEGIN(ERROR); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 422 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + keyname = "CRPIXja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 13: +#line 431 "wcsbth.l" +case 14: +YY_RULE_SETUP +#line 431 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "jCRPna"; + BEGIN(iCCCna); + } else { + keyname = "jCRPXn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 15: +#line 447 "wcsbth.l" +case 16: +YY_RULE_SETUP +#line 447 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + if (yyleng == 4) { + keyname = "TCRPna"; + BEGIN(TCCCna); + } else { + keyname = "TCRPXn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 460 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + keyname = "PCi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 469 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + sscanf(yytext, "%1d%1d", &i, &j); + + keyname = "ijPCna"; + BEGIN(ijCCna); + } + YY_BREAK +case 19: +#line 481 "wcsbth.l" +case 20: +YY_RULE_SETUP +#line 481 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + if (yyleng == 2) { + keyname = "TPn_ka"; + BEGIN(TCn_ka); + } else { + keyname = "TPCn_ka"; + BEGIN(TCCn_ka); + } + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 495 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + keyname = "CDi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 504 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + sscanf(yytext, "%1d%1d", &i, &j); + + keyname = "ijCDna"; + BEGIN(ijCCna); + } + YY_BREAK +case 23: +#line 516 "wcsbth.l" +case 24: +YY_RULE_SETUP +#line 516 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + if (yyleng == 2) { + keyname = "TCn_ka"; + BEGIN(TCn_ka); + } else { + keyname = "TCDn_ka"; + BEGIN(TCCn_ka); + } + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 530 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + keyname = "CDELTia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 26: +#line 539 "wcsbth.l" +case 27: +YY_RULE_SETUP +#line 539 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCDEna"; + BEGIN(iCCCna); + } else { + keyname = "iCDLTn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 28: +#line 555 "wcsbth.l" +case 29: +YY_RULE_SETUP +#line 555 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + if (yyleng == 4) { + keyname = "TCDEna"; + BEGIN(TCCCna); + } else { + keyname = "TCDLTn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 568 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "CROTAi"; + BEGIN(CROTAi); + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 577 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + sscanf(yytext, "%d", &i); + + keyname = "iCROTn"; + BEGIN(iCROTn); + } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 588 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "TCROTn"; + BEGIN(TCROTn); + } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 597 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + keyname = "CUNITia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 34: +#line 606 "wcsbth.l" +case 35: +YY_RULE_SETUP +#line 606 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCUNna"; + BEGIN(iCCCna); + } else { + keyname = "iCUNIn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 36: +#line 622 "wcsbth.l" +case 37: +YY_RULE_SETUP +#line 622 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + if (yyleng == 4) { + keyname = "TCUNna"; + BEGIN(TCCCna); + } else { + keyname = "TCUNIn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 635 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + keyname = "CTYPEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 39: +#line 644 "wcsbth.l" +case 40: +YY_RULE_SETUP +#line 644 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCTYna"; + BEGIN(iCCCna); + } else { + keyname = "iCTYPn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 41: +#line 660 "wcsbth.l" +case 42: +YY_RULE_SETUP +#line 660 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + if (yyleng == 4) { + keyname = "TCTYna"; + BEGIN(TCCCna); + } else { + keyname = "TCTYPn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 43: +YY_RULE_SETUP +#line 673 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + keyname = "CRVALia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 44: +#line 682 "wcsbth.l" +case 45: +YY_RULE_SETUP +#line 682 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCRVna"; + BEGIN(iCCCna); + } else { + keyname = "iCRVLn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 46: +#line 698 "wcsbth.l" +case 47: +YY_RULE_SETUP +#line 698 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + if (yyleng == 4) { + keyname = "TCRVna"; + BEGIN(TCCCna); + } else { + keyname = "TCRVLn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 48: +#line 712 "wcsbth.l" +case 49: +YY_RULE_SETUP +#line 712 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.lonpole); + + if (yyleng == 7) { + keyname = "LONPOLEa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "LONPna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 50: +#line 727 "wcsbth.l" +case 51: +YY_RULE_SETUP +#line 727 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.latpole); + + if (yyleng == 7) { + keyname = "LATPOLEa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "LATPna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 52: +#line 742 "wcsbth.l" +case 53: +#line 743 "wcsbth.l" +case 54: +YY_RULE_SETUP +#line 743 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + if (yyleng == 8) { + if (relax & WCSHDR_strict) { + errmsg = "the RESTFREQ keyword is deprecated, use RESTFRQa"; + BEGIN(ERROR); + + } else { + unput(' '); + + keyname = "RESTFREQ"; + BEGIN(CCCCCCCa); + } + + } else if (yyleng == 7) { + keyname = "RESTFRQa"; + BEGIN(CCCCCCCa); + + } else { + keyname = "RFRQna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 55: +#line 770 "wcsbth.l" +case 56: +YY_RULE_SETUP +#line 770 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restwav); + + if (yyleng == 7) { + keyname = "RESTWAVa"; + BEGIN(CCCCCCCa); + } else { + keyname = "RWAVna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 783 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + keyname = "PVi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 58: +#line 793 "wcsbth.l" +case 59: +YY_RULE_SETUP +#line 793 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + sscanf(yytext, "%d", &i); + + if (yyleng == 2) { + keyname = "iVn_ma"; + BEGIN(iCn_ma); + } else { + keyname = "iPVn_ma"; + BEGIN(iCCn_ma); + } + } + YY_BREAK +case 60: +#line 810 "wcsbth.l" +case 61: +YY_RULE_SETUP +#line 810 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + if (yyleng == 2) { + keyname = "TVn_ma"; + BEGIN(TCn_ma); + } else { + keyname = "TPVn_ma"; + BEGIN(TCCn_ma); + } + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 824 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + keyname = "PROJPm"; + BEGIN(PROJPm); + } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 833 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + keyname = "PSi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 64: +#line 843 "wcsbth.l" +case 65: +YY_RULE_SETUP +#line 843 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + sscanf(yytext, "%d", &i); + + if (yyleng == 2) { + keyname = "iSn_ma"; + BEGIN(iCn_ma); + } else { + keyname = "iPSn_ma"; + BEGIN(iCCn_ma); + } + } + YY_BREAK +case 66: +#line 860 "wcsbth.l" +case 67: +YY_RULE_SETUP +#line 860 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + if (yyleng == 2) { + keyname = "TSn_ma"; + BEGIN(TCn_ma); + } else { + keyname = "TPSn_ma"; + BEGIN(TCCn_ma); + } + } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 874 "wcsbth.l" +{ + sscanf(yytext, "VELREF%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the VELREF keyword is deprecated, use SPECSYSa"; + BEGIN(ERROR); + + } else if (a == ' ' || (relax & WCSHDR_VELREFa)) { + valtype = INTEGER; + vptr = &(wcstem.velref); + + unput(a); + + keyname = "VELREF"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "VELREF keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 69: +YY_RULE_SETUP +#line 900 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + keyname = "CNAMEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 70: +#line 909 "wcsbth.l" +case 71: +YY_RULE_SETUP +#line 909 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCNAna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCNAMn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 72: +#line 926 "wcsbth.l" +case 73: +YY_RULE_SETUP +#line 926 "wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + if (yyleng == 4) { + keyname = "TCNAna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCNAMn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 940 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + keyname = "CRDERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 75: +#line 949 "wcsbth.l" +case 76: +YY_RULE_SETUP +#line 949 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCRDna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCRDEn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 77: +#line 966 "wcsbth.l" +case 78: +YY_RULE_SETUP +#line 966 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + if (yyleng == 4) { + keyname = "TCRDna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCRDEn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 980 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + keyname = "CSYERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 80: +#line 989 "wcsbth.l" +case 81: +YY_RULE_SETUP +#line 989 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCSYna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCSYEn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 82: +#line 1006 "wcsbth.l" +case 83: +YY_RULE_SETUP +#line 1006 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + if (yyleng == 4) { + keyname = "TCSYna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCSYEn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 1020 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + keyname = "CZPHSia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 85: +#line 1029 "wcsbth.l" +case 86: +YY_RULE_SETUP +#line 1029 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCZPna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCZPHn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 87: +#line 1046 "wcsbth.l" +case 88: +YY_RULE_SETUP +#line 1046 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + if (yyleng == 4) { + keyname = "TCZPna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCZPHn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 89: +YY_RULE_SETUP +#line 1060 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + keyname = "CPERIia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 90: +#line 1069 "wcsbth.l" +case 91: +YY_RULE_SETUP +#line 1069 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCPRna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCPERn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 92: +#line 1086 "wcsbth.l" +case 93: +YY_RULE_SETUP +#line 1086 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + if (yyleng == 4) { + keyname = "TCPRna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCPERn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 94: +#line 1101 "wcsbth.l" +case 95: +#line 1102 "wcsbth.l" +case 96: +YY_RULE_SETUP +#line 1102 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.wcsname; + + if (yyleng == 7) { + keyname = "WCSNAMEa"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else { + if (*yytext == 'W') { + keyname = "WCSNna"; + } else { + keyname = "TWCSna"; + } + BEGIN(CCCCna); + } + } + YY_BREAK +case 97: +YY_RULE_SETUP +#line 1121 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.timesys; + + keyname = "TIMESYS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 98: +#line 1130 "wcsbth.l" +case 99: +YY_RULE_SETUP +#line 1130 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.trefpos; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "TREFPOS"; + BEGIN(CCCCCCCC); + } else { + keyname = "TRPOSn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 100: +#line 1145 "wcsbth.l" +case 101: +YY_RULE_SETUP +#line 1145 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.trefdir; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "TREFDIR"; + BEGIN(CCCCCCCC); + } else { + keyname = "TRDIRn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 102: +YY_RULE_SETUP +#line 1159 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.plephem; + + keyname = "PLEPHEM"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 103: +YY_RULE_SETUP +#line 1167 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.timeunit; + + keyname = "TIMEUNIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 104: +#line 1176 "wcsbth.l" +case 105: +YY_RULE_SETUP +#line 1176 "wcsbth.l" +{ + if ((yytext[4] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = STRING; + vptr = wcstem.dateref; + + keyname = "DATEREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the DATE-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 106: +#line 1194 "wcsbth.l" +case 107: +YY_RULE_SETUP +#line 1194 "wcsbth.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + + keyname = "MJDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 108: +#line 1212 "wcsbth.l" +case 109: +YY_RULE_SETUP +#line 1212 "wcsbth.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + + keyname = "MJDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 110: +#line 1231 "wcsbth.l" +case 111: +YY_RULE_SETUP +#line 1231 "wcsbth.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref + 1; + + keyname = "MJDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 112: +#line 1249 "wcsbth.l" +case 113: +YY_RULE_SETUP +#line 1249 "wcsbth.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + special = wcsbth_jdref; + + keyname = "JDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 114: +#line 1268 "wcsbth.l" +case 115: +YY_RULE_SETUP +#line 1268 "wcsbth.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcsbth_jdrefi; + + keyname = "JDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 116: +#line 1288 "wcsbth.l" +case 117: +YY_RULE_SETUP +#line 1288 "wcsbth.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcsbth_jdreff; + + keyname = "JDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 118: +YY_RULE_SETUP +#line 1306 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timeoffs); + + keyname = "TIMEOFFS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 119: +YY_RULE_SETUP +#line 1314 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateobs; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-OBS"; + imherit = 0; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 120: +#line 1325 "wcsbth.l" +case 121: +#line 1326 "wcsbth.l" +case 122: +YY_RULE_SETUP +#line 1326 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateobs; + + if (relax & WCSHDR_DOBSn) { + yyless(4); + + keyname = "DOBSn"; + BEGIN(CCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "DOBSn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 123: +YY_RULE_SETUP +#line 1345 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.datebeg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 124: +#line 1355 "wcsbth.l" +case 125: +YY_RULE_SETUP +#line 1355 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateavg; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "DATE-AVG"; + BEGIN(CCCCCCCC); + } else { + keyname = "DAVGn"; + BEGIN(CCCCn); + } + } + YY_BREAK +case 126: +YY_RULE_SETUP +#line 1369 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateend; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 127: +#line 1379 "wcsbth.l" +case 128: +YY_RULE_SETUP +#line 1379 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdobs); + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "MJD-OBS"; + imherit = 0; + BEGIN(CCCCCCCC); + } else { + keyname = "MJDOBn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 129: +YY_RULE_SETUP +#line 1394 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdbeg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 130: +#line 1404 "wcsbth.l" +case 131: +YY_RULE_SETUP +#line 1404 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdavg); + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "MJD-AVG"; + BEGIN(CCCCCCCC); + } else { + keyname = "MJDAn"; + BEGIN(CCCCn); + } + } + YY_BREAK +case 132: +YY_RULE_SETUP +#line 1418 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdend); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 133: +YY_RULE_SETUP +#line 1427 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.jepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "JEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 134: +YY_RULE_SETUP +#line 1436 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.bepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "BEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 135: +YY_RULE_SETUP +#line 1445 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstart); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTART"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 136: +YY_RULE_SETUP +#line 1454 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstop); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTOP"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 137: +YY_RULE_SETUP +#line 1463 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.xposure); + if (ctrl < -10) keep = keyrec; + + keyname = "XPOSURE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 138: +YY_RULE_SETUP +#line 1472 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.telapse); + if (ctrl < -10) keep = keyrec; + + keyname = "TELAPSE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 139: +YY_RULE_SETUP +#line 1481 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timsyer); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMSYER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 140: +YY_RULE_SETUP +#line 1490 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timrder); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMRDER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 141: +YY_RULE_SETUP +#line 1499 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timedel); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEDEL"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 142: +YY_RULE_SETUP +#line 1508 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timepixr); + chekval = wcsbth_timepixr; + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEPIXR"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 143: +#line 1519 "wcsbth.l" +case 144: +YY_RULE_SETUP +#line 1519 "wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-X"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGXn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 145: +#line 1534 "wcsbth.l" +case 146: +YY_RULE_SETUP +#line 1534 "wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 1; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-Y"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGYn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 147: +#line 1549 "wcsbth.l" +case 148: +YY_RULE_SETUP +#line 1549 "wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 2; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-Z"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGZn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 149: +YY_RULE_SETUP +#line 1563 "wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 3; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-L"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 150: +#line 1573 "wcsbth.l" +case 151: +#line 1574 "wcsbth.l" +case 152: +YY_RULE_SETUP +#line 1574 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGLn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGLn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 153: +YY_RULE_SETUP +#line 1593 "wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 4; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-B"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 154: +#line 1603 "wcsbth.l" +case 155: +#line 1604 "wcsbth.l" +case 156: +YY_RULE_SETUP +#line 1604 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGBn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGBn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 157: +YY_RULE_SETUP +#line 1623 "wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 5; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-H"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 158: +#line 1633 "wcsbth.l" +case 159: +#line 1634 "wcsbth.l" +case 160: +YY_RULE_SETUP +#line 1634 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGHn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGHn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 161: +YY_RULE_SETUP +#line 1653 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsorbit; + + keyname = "OBSORBIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 162: +#line 1662 "wcsbth.l" +case 163: +YY_RULE_SETUP +#line 1662 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.radesys; + + if (yyleng == 7) { + keyname = "RADESYSa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "RADEna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 164: +YY_RULE_SETUP +#line 1676 "wcsbth.l" +{ + if (relax & WCSHDR_RADECSYS) { + valtype = STRING; + vptr = wcstem.radesys; + + unput(' '); + + keyname = "RADECSYS"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the RADECSYS keyword is deprecated, use RADESYSa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 165: +YY_RULE_SETUP +#line 1696 "wcsbth.l" +{ + sscanf(yytext, "EPOCH%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the EPOCH keyword is deprecated, use EQUINOXa"; + BEGIN(ERROR); + + } else if (a == ' ' || (relax & WCSHDR_EPOCHa)) { + valtype = FLOAT; + vptr = &(wcstem.equinox); + special = wcsbth_epoch; + + unput(a); + + keyname = "EPOCH"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "EPOCH keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 166: +#line 1724 "wcsbth.l" +case 167: +YY_RULE_SETUP +#line 1724 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.equinox); + + if (yyleng == 7) { + keyname = "EQUINOXa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "EQUIna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 168: +#line 1739 "wcsbth.l" +case 169: +YY_RULE_SETUP +#line 1739 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.specsys; + + if (yyleng == 7) { + keyname = "SPECSYSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SPECna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 170: +#line 1753 "wcsbth.l" +case 171: +YY_RULE_SETUP +#line 1753 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.ssysobs; + + if (yyleng == 7) { + keyname = "SSYSOBSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SOBSna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 172: +#line 1767 "wcsbth.l" +case 173: +YY_RULE_SETUP +#line 1767 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velosys); + + if (yyleng == 7) { + keyname = "VELOSYSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "VSYSna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 174: +YY_RULE_SETUP +#line 1780 "wcsbth.l" +{ + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcsbth_vsource; + + yyless(7); + + keyname = "VSOURCEa"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the VSOURCEa keyword is deprecated, use ZSOURCEa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 175: +#line 1801 "wcsbth.l" +case 176: +#line 1802 "wcsbth.l" +case 177: +YY_RULE_SETUP +#line 1802 "wcsbth.l" +{ + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcsbth_vsource; + + yyless(4); + keyname = "VSOUna"; + BEGIN(CCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = "VSOUna keyword is deprecated, use ZSOUna"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 178: +#line 1823 "wcsbth.l" +case 179: +YY_RULE_SETUP +#line 1823 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.zsource); + + if (yyleng == 7) { + keyname = "ZSOURCEa"; + BEGIN(CCCCCCCa); + } else { + keyname = "ZSOUna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 180: +#line 1837 "wcsbth.l" +case 181: +YY_RULE_SETUP +#line 1837 "wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.ssyssrc; + + if (yyleng == 7) { + keyname = "SSYSSRCa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SSRCna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 182: +#line 1851 "wcsbth.l" +case 183: +YY_RULE_SETUP +#line 1851 "wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velangl); + + if (yyleng == 7) { + keyname = "VELANGLa"; + BEGIN(CCCCCCCa); + } else { + keyname = "VANGna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 184: +YY_RULE_SETUP +#line 1864 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.rsun_ref); + + keyname = "RSUN_REF"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 185: +YY_RULE_SETUP +#line 1873 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.dsun_obs); + + keyname = "DSUN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 186: +YY_RULE_SETUP +#line 1882 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.crln_obs); + + keyname = "CRLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 187: +YY_RULE_SETUP +#line 1891 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hgln_obs); + + keyname = "HGLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 188: +#line 1901 "wcsbth.l" +case 189: +YY_RULE_SETUP +#line 1901 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hglt_obs); + + keyname = "HGLT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 190: +YY_RULE_SETUP +#line 1910 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.a_radius); + + keyname = "A_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 191: +YY_RULE_SETUP +#line 1919 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.b_radius); + + keyname = "B_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 192: +YY_RULE_SETUP +#line 1928 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.c_radius); + + keyname = "C_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 193: +YY_RULE_SETUP +#line 1937 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blon_obs); + + keyname = "BLON_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 194: +YY_RULE_SETUP +#line 1946 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blat_obs); + + keyname = "BLAT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 195: +YY_RULE_SETUP +#line 1955 "wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.bdis_obs); + + keyname = "BDIS_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 196: +YY_RULE_SETUP +#line 1964 "wcsbth.l" +{ + if (yyextra->nkeyrec) { + yyextra->nkeyrec = 0; + errmsg = "keyrecords following the END keyrecord were ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 197: +YY_RULE_SETUP +#line 1974 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 198: +#line 1979 "wcsbth.l" +case 199: +YY_RULE_SETUP +#line 1979 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d%c", &i, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 200: +#line 1998 "wcsbth.l" +case 201: +YY_RULE_SETUP +#line 1998 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + if (relax & WCSHDR_reject) { + // Violates the basic FITS standard. + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 202: +#line 2024 "wcsbth.l" +case 203: +#line 2025 "wcsbth.l" +case 204: +YY_RULE_SETUP +#line 2025 "wcsbth.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + if (relax & WCSHDR_ALLIMG) { + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 205: +YY_RULE_SETUP +#line 2044 "wcsbth.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "keyword looks very much like %s but isn't", + keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 206: +#line 2059 "wcsbth.l" +case 207: +#line 2060 "wcsbth.l" +case 208: +#line 2061 "wcsbth.l" +case 209: +#line 2062 "wcsbth.l" +case 210: +#line 2063 "wcsbth.l" +case 211: +YY_RULE_SETUP +#line 2063 "wcsbth.l" +{ + if (vptr) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 212: +#line 2079 "wcsbth.l" +case 213: +#line 2080 "wcsbth.l" +case 214: +#line 2081 "wcsbth.l" +case 215: +YY_RULE_SETUP +#line 2081 "wcsbth.l" +{ + if (vptr && (relax & WCSHDR_LONGKEY)) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + if (!vptr) { + sprintf(errmsg, "%s keyword is non-standard", keyname); + } else { + sprintf(errmsg, + "%s keyword may not have an alternate version code", keyname); + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 216: +#line 2103 "wcsbth.l" +case 217: +YY_RULE_SETUP +#line 2103 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 218: +#line 2108 "wcsbth.l" +case 219: +#line 2109 "wcsbth.l" +case 220: +#line 2110 "wcsbth.l" +case 221: +#line 2111 "wcsbth.l" +case 222: +#line 2112 "wcsbth.l" +case 223: +YY_RULE_SETUP +#line 2112 "wcsbth.l" +{ + sscanf(yytext, "%d%c", &n, &a); + if (YY_START == TCCCna) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCCCna) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 224: +#line 2120 "wcsbth.l" +case 225: +YY_RULE_SETUP +#line 2120 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 226: +#line 2125 "wcsbth.l" +case 227: +#line 2126 "wcsbth.l" +case 228: +#line 2127 "wcsbth.l" +case 229: +YY_RULE_SETUP +#line 2127 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 230: +#line 2146 "wcsbth.l" +case 231: +#line 2147 "wcsbth.l" +case 232: +#line 2148 "wcsbth.l" +case 233: +#line 2149 "wcsbth.l" +case 234: +#line 2150 "wcsbth.l" +case 235: +#line 2151 "wcsbth.l" +case 236: +#line 2152 "wcsbth.l" +case 237: +#line 2153 "wcsbth.l" +case 238: +#line 2154 "wcsbth.l" +case 239: +#line 2155 "wcsbth.l" +case 240: +#line 2156 "wcsbth.l" +case 241: +#line 2157 "wcsbth.l" +case 242: +#line 2158 "wcsbth.l" +case 243: +#line 2159 "wcsbth.l" +case 244: +#line 2160 "wcsbth.l" +case 245: +#line 2161 "wcsbth.l" +case 246: +#line 2162 "wcsbth.l" +case 247: +#line 2163 "wcsbth.l" +case 248: +#line 2164 "wcsbth.l" +case 249: +#line 2165 "wcsbth.l" +case 250: +YY_RULE_SETUP +#line 2165 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + if (((altlin == 1) && (relax & WCSHDR_PC0i_0ja)) || + ((altlin == 2) && (relax & WCSHDR_CD0i_0ja))) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 251: +#line 2196 "wcsbth.l" +case 252: +#line 2197 "wcsbth.l" +case 253: +#line 2198 "wcsbth.l" +case 254: +#line 2199 "wcsbth.l" +case 255: +#line 2200 "wcsbth.l" +case 256: +#line 2201 "wcsbth.l" +case 257: +#line 2202 "wcsbth.l" +case 258: +#line 2203 "wcsbth.l" +case 259: +#line 2204 "wcsbth.l" +case 260: +YY_RULE_SETUP +#line 2204 "wcsbth.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + if (relax & WCSHDR_ALLIMG) { + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 261: +#line 2224 "wcsbth.l" +case 262: +#line 2225 "wcsbth.l" +case 263: +#line 2226 "wcsbth.l" +case 264: +#line 2227 "wcsbth.l" +case 265: +#line 2228 "wcsbth.l" +case 266: +#line 2229 "wcsbth.l" +case 267: +#line 2230 "wcsbth.l" +case 268: +#line 2231 "wcsbth.l" +case 269: +#line 2232 "wcsbth.l" +case 270: +YY_RULE_SETUP +#line 2232 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 271: +YY_RULE_SETUP +#line 2251 "wcsbth.l" +{ + // This covers the defunct forms CD00i00j and PC00i00j. + if (relax & WCSHDR_ALLIMG) { + if (((altlin == 1) && (relax & WCSHDR_PC00i00j)) || + ((altlin == 2) && (relax & WCSHDR_CD00i00j))) { + sscanf(yytext, "%3d%3d", &i, &j); + a = ' '; + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "this form of the %s keyword is deprecated, use %s", + keyname, keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "deprecated image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 272: +YY_RULE_SETUP +#line 2285 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 273: +#line 2290 "wcsbth.l" +case 274: +#line 2291 "wcsbth.l" +case 275: +YY_RULE_SETUP +#line 2291 "wcsbth.l" +{ + sscanf(yytext, "%d%c", &n, &a); + keytype = BIMGARR; + BEGIN(VALUE); + } + YY_BREAK +case 276: +#line 2298 "wcsbth.l" +case 277: +#line 2299 "wcsbth.l" +case 278: +#line 2300 "wcsbth.l" +case 279: +#line 2301 "wcsbth.l" +case 280: +#line 2302 "wcsbth.l" +case 281: +YY_RULE_SETUP +#line 2302 "wcsbth.l" +{ + if (relax & WCSHDR_LONGKEY) { + WCSBTH_PUTBACK; + BEGIN(TCn_ka); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 282: +YY_RULE_SETUP +#line 2318 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 283: +#line 2323 "wcsbth.l" +case 284: +#line 2324 "wcsbth.l" +case 285: +#line 2325 "wcsbth.l" +case 286: +#line 2326 "wcsbth.l" +case 287: +#line 2327 "wcsbth.l" +case 288: +YY_RULE_SETUP +#line 2327 "wcsbth.l" +{ + sscanf(yytext, "%d_%d%c", &n, &k, &a); + i = wcsbth_colax(*wcs, &alts, n, a); + j = wcsbth_colax(*wcs, &alts, k, a); + keytype = PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 289: +#line 2336 "wcsbth.l" +case 290: +#line 2337 "wcsbth.l" +case 291: +#line 2338 "wcsbth.l" +case 292: +YY_RULE_SETUP +#line 2338 "wcsbth.l" +{ + sscanf(yytext, "%d_%d", &n, &k); + a = ' '; + i = wcsbth_colax(*wcs, &alts, n, a); + j = wcsbth_colax(*wcs, &alts, k, a); + keytype = PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 293: +YY_RULE_SETUP +#line 2347 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 294: +#line 2352 "wcsbth.l" +case 295: +#line 2353 "wcsbth.l" +case 296: +YY_RULE_SETUP +#line 2353 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + a = ' '; + sscanf(yytext, "%d%c", &i, &a); + + if (relax & WCSHDR_strict) { + errmsg = "the CROTAn keyword is deprecated, use PCi_ja"; + BEGIN(ERROR); + + } else if (a == ' ' || relax & WCSHDR_CROTAia) { + yyless(0); + BEGIN(CCCCCia); + + } else if (relax & WCSHDR_reject) { + errmsg = "CROTAn keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "deprecated image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 297: +YY_RULE_SETUP +#line 2387 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + yyless(0); + BEGIN(CCCCCia); + } else { + // Let it go. + BEGIN(DISCARD); + } + } + YY_BREAK +case 298: +#line 2398 "wcsbth.l" +case 299: +#line 2399 "wcsbth.l" +case 300: +#line 2400 "wcsbth.l" +case 301: +#line 2401 "wcsbth.l" +case 302: +#line 2402 "wcsbth.l" +case 303: +YY_RULE_SETUP +#line 2402 "wcsbth.l" +{ + WCSBTH_PUTBACK; + BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); + } + YY_BREAK +case 304: +#line 2408 "wcsbth.l" +case 305: +#line 2409 "wcsbth.l" +case 306: +#line 2410 "wcsbth.l" +case 307: +YY_RULE_SETUP +#line 2410 "wcsbth.l" +{ + if (relax & WCSHDR_CROTAia) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "%s keyword may not have an alternate version code", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 308: +#line 2428 "wcsbth.l" +case 309: +YY_RULE_SETUP +#line 2428 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 310: +#line 2433 "wcsbth.l" +case 311: +YY_RULE_SETUP +#line 2433 "wcsbth.l" +{ + // Image-header keyword. + if (imherit || (relax & (WCSHDR_AUXIMG | WCSHDR_ALLIMG))) { + if (YY_START == CCCCCCCa) { + sscanf(yytext, "%c", &a); + } else { + a = 0; + unput(yytext[0]); + } + keytype = IMGAUX; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 312: +YY_RULE_SETUP +#line 2457 "wcsbth.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "invalid alternate code, keyword resembles %s " + "but isn't", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 313: +#line 2472 "wcsbth.l" +case 314: +#line 2473 "wcsbth.l" +case 315: +#line 2474 "wcsbth.l" +case 316: +#line 2475 "wcsbth.l" +case 317: +YY_RULE_SETUP +#line 2475 "wcsbth.l" +{ + sscanf(yytext, "%d%c", &n, &a); + keytype = BINTAB; + BEGIN(VALUE); + } + YY_BREAK +case 318: +YY_RULE_SETUP +#line 2481 "wcsbth.l" +{ + sscanf(yytext, "%d", &n); + a = ' '; + keytype = BINTAB; + BEGIN(VALUE); + } + YY_BREAK +case 319: +#line 2489 "wcsbth.l" +case 320: +YY_RULE_SETUP +#line 2489 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 321: +#line 2494 "wcsbth.l" +case 322: +#line 2495 "wcsbth.l" +case 323: +#line 2496 "wcsbth.l" +case 324: +#line 2497 "wcsbth.l" +case 325: +#line 2498 "wcsbth.l" +case 326: +#line 2499 "wcsbth.l" +case 327: +YY_RULE_SETUP +#line 2499 "wcsbth.l" +{ + sscanf(yytext, "%d", &n); + a = 0; + keytype = BINTAB; + BEGIN(VALUE); + } + YY_BREAK +case 328: +#line 2507 "wcsbth.l" +case 329: +YY_RULE_SETUP +#line 2507 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 330: +#line 2512 "wcsbth.l" +case 331: +#line 2513 "wcsbth.l" +case 332: +#line 2514 "wcsbth.l" +case 333: +YY_RULE_SETUP +#line 2514 "wcsbth.l" +{ + // Image-header keyword. + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 334: +#line 2534 "wcsbth.l" +case 335: +#line 2535 "wcsbth.l" +case 336: +#line 2536 "wcsbth.l" +case 337: +#line 2537 "wcsbth.l" +case 338: +#line 2538 "wcsbth.l" +case 339: +#line 2539 "wcsbth.l" +case 340: +#line 2540 "wcsbth.l" +case 341: +#line 2541 "wcsbth.l" +case 342: +#line 2542 "wcsbth.l" +case 343: +#line 2543 "wcsbth.l" +case 344: +#line 2544 "wcsbth.l" +case 345: +#line 2545 "wcsbth.l" +case 346: +#line 2546 "wcsbth.l" +case 347: +#line 2547 "wcsbth.l" +case 348: +#line 2548 "wcsbth.l" +case 349: +#line 2549 "wcsbth.l" +case 350: +#line 2550 "wcsbth.l" +case 351: +#line 2551 "wcsbth.l" +case 352: +#line 2552 "wcsbth.l" +case 353: +#line 2553 "wcsbth.l" +case 354: +YY_RULE_SETUP +#line 2553 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + if (((valtype == FLOAT) && (relax & WCSHDR_PV0i_0ma)) || + ((valtype == STRING) && (relax & WCSHDR_PS0i_0ma))) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 355: +#line 2584 "wcsbth.l" +case 356: +#line 2585 "wcsbth.l" +case 357: +#line 2586 "wcsbth.l" +case 358: +#line 2587 "wcsbth.l" +case 359: +#line 2588 "wcsbth.l" +case 360: +#line 2589 "wcsbth.l" +case 361: +#line 2590 "wcsbth.l" +case 362: +#line 2591 "wcsbth.l" +case 363: +#line 2592 "wcsbth.l" +case 364: +YY_RULE_SETUP +#line 2592 "wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + // Anything that has fallen through to this point must contain + // an invalid parameter. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 365: +#line 2612 "wcsbth.l" +case 366: +#line 2613 "wcsbth.l" +case 367: +#line 2614 "wcsbth.l" +case 368: +#line 2615 "wcsbth.l" +case 369: +#line 2616 "wcsbth.l" +case 370: +#line 2617 "wcsbth.l" +case 371: +#line 2618 "wcsbth.l" +case 372: +#line 2619 "wcsbth.l" +case 373: +#line 2620 "wcsbth.l" +case 374: +YY_RULE_SETUP +#line 2620 "wcsbth.l" +{ + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + YY_BREAK +case 375: +YY_RULE_SETUP +#line 2627 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 376: +#line 2632 "wcsbth.l" +case 377: +#line 2633 "wcsbth.l" +case 378: +#line 2634 "wcsbth.l" +case 379: +#line 2635 "wcsbth.l" +case 380: +#line 2636 "wcsbth.l" +case 381: +#line 2637 "wcsbth.l" +case 382: +#line 2638 "wcsbth.l" +case 383: +#line 2639 "wcsbth.l" +case 384: +#line 2640 "wcsbth.l" +case 385: +#line 2641 "wcsbth.l" +case 386: +#line 2642 "wcsbth.l" +case 387: +YY_RULE_SETUP +#line 2642 "wcsbth.l" +{ + if (relax & WCSHDR_LONGKEY) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCn_ma) ? iCn_ma : TCn_ma); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "the %s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 388: +#line 2659 "wcsbth.l" +case 389: +YY_RULE_SETUP +#line 2659 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 390: +#line 2664 "wcsbth.l" +case 391: +#line 2665 "wcsbth.l" +case 392: +#line 2666 "wcsbth.l" +case 393: +#line 2667 "wcsbth.l" +case 394: +#line 2668 "wcsbth.l" +case 395: +#line 2669 "wcsbth.l" +case 396: +#line 2670 "wcsbth.l" +case 397: +#line 2671 "wcsbth.l" +case 398: +#line 2672 "wcsbth.l" +case 399: +#line 2673 "wcsbth.l" +case 400: +#line 2674 "wcsbth.l" +case 401: +YY_RULE_SETUP +#line 2674 "wcsbth.l" +{ + sscanf(yytext, "%d_%d%c", &n, &m, &a); + if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 402: +#line 2682 "wcsbth.l" +case 403: +#line 2683 "wcsbth.l" +case 404: +#line 2684 "wcsbth.l" +case 405: +#line 2685 "wcsbth.l" +case 406: +#line 2686 "wcsbth.l" +case 407: +#line 2687 "wcsbth.l" +case 408: +#line 2688 "wcsbth.l" +case 409: +YY_RULE_SETUP +#line 2688 "wcsbth.l" +{ + // Invalid combinations will be flagged by . + sscanf(yytext, "%d_%d", &n, &m); + a = ' '; + if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 410: +#line 2698 "wcsbth.l" +case 411: +YY_RULE_SETUP +#line 2698 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 412: +YY_RULE_SETUP +#line 2702 "wcsbth.l" +{ + if (relax & WCSHDR_PROJPn) { + sscanf(yytext, "%d", &m); + i = 0; + a = ' '; + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "the PROJPn keyword is deprecated, use PVi_ma"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 413: +#line 2721 "wcsbth.l" +case 414: +YY_RULE_SETUP +#line 2721 "wcsbth.l" +{ + if (relax & (WCSHDR_PROJPn | WCSHDR_reject)) { + errmsg = "invalid PROJPn keyword"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 415: +YY_RULE_SETUP +#line 2731 "wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 416: +YY_RULE_SETUP +#line 2735 "wcsbth.l" +{ + // Do checks on i, j, m, n, k. + if (!(keytype & keysel)) { + // Selection by keyword type. + BEGIN(DISCARD); + + } else if (exclude[n] || exclude[k]) { + // One or other column is not selected. + if (k && (exclude[n] != exclude[k])) { + // For keywords such as TCn_ka, both columns must be excluded. + // User error, so return immediately. + return WCSHDRERR_BAD_COLUMN; + + } else { + BEGIN(DISCARD); + } + + } else if (i > 99 || j > 99 || m > 99 || n > 999 || k > 999) { + if (relax & WCSHDR_reject) { + errmsg = errtxt; + if (i > 99 || j > 99) { + sprintf(errmsg, "axis number exceeds 99"); + } else if (m > 99) { + sprintf(errmsg, "parameter number exceeds 99"); + } else if (n > 999 || k > 999) { + sprintf(errmsg, "column number exceeds 999"); + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (ipass == 2 && npass == 3 && (keytype & BINTAB)) { + // Skip keyvalues that won't be inherited. + BEGIN(FLUSH); + + } else { + if (ipass == 3 && (keytype & IMGHEAD)) { + // IMGHEAD keytypes are always dealt with on the second pass. + // However, they must be re-parsed in order to report errors. + vptr = 0x0; + } + + if (valtype == INTEGER) { + BEGIN(INTEGER_VAL); + } else if (valtype == FLOAT) { + BEGIN(FLOAT_VAL); + } else if (valtype == FLOAT2) { + BEGIN(FLOAT2_VAL); + } else if (valtype == STRING) { + BEGIN(STRING_VAL); + } else { + errmsg = errtxt; + sprintf(errmsg, "internal parser ERROR, bad data type: %d", + valtype); + BEGIN(ERROR); + } + } + } + YY_BREAK +case 417: +YY_RULE_SETUP +#line 2797 "wcsbth.l" +{ + errmsg = "invalid KEYWORD = VALUE syntax"; + BEGIN(ERROR); + } + YY_BREAK +case 418: +YY_RULE_SETUP +#line 2802 "wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + sscanf(yytext, "%d", &inttmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 419: +YY_RULE_SETUP +#line 2814 "wcsbth.l" +{ + errmsg = "an integer value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 420: +YY_RULE_SETUP +#line 2819 "wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + wcsutil_str2double(yytext, &dbltmp); + + if (chekval && chekval(dbltmp)) { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } else { + BEGIN(COMMENT); + } + } + } + YY_BREAK +case 421: +YY_RULE_SETUP +#line 2836 "wcsbth.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 422: +YY_RULE_SETUP +#line 2841 "wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue as integer and fractional parts. + wcsutil_str2double2(yytext, dbl2tmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 423: +YY_RULE_SETUP +#line 2853 "wcsbth.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 424: +/* rule 424 can match eol */ +YY_RULE_SETUP +#line 2858 "wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Copy the keyvalue minus the quotes. + strncpy(strtmp, yytext+1, yyleng-2); + strtmp[yyleng-2] = '\0'; + + // Strip off trailing blanks. + for (int jx = yyleng-3; jx >= 0; jx--) { + if (strtmp[jx] != ' ') { + break; + } + strtmp[jx] = '\0'; + } + + // Squeeze out repeated quotes. + int ix = 0; + for (int jx = 0; jx < 72; jx++) { + if (ix < jx) { + strtmp[ix] = strtmp[jx]; + } + + if (strtmp[jx] == '\0') { + break; + } else if (strtmp[jx] == '\'' && strtmp[jx+1] == '\'') { + jx++; + } + + ix++; + } + + BEGIN(COMMENT); + } + } + YY_BREAK +case 425: +YY_RULE_SETUP +#line 2895 "wcsbth.l" +{ + errmsg = "a string value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 426: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2900 "wcsbth.l" +{ + if (ipass == 1) { + // Do first-pass bookkeeping. + wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); + BEGIN(FLUSH); + + } else if (*wcs) { + // Store the value now that the keyrecord has been validated. + alts.icol = 0; + alts.ialt = 0; + + // Update each coordinate representation. + int gotone = 0; + struct wcsprm *wcsp; + while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { + gotone = 1; + + if (vptr) { + void *wptr; + if (auxprm) { + // Additional auxiliary parameter. + auxp = wcsp->aux; + ptrdiff_t voff = (char *)vptr - (char *)(&auxtem); + wptr = (void *)((char *)auxp + voff); + } else { + // A parameter that lives directly in wcsprm. + ptrdiff_t voff = (char *)vptr - (char *)(&wcstem); + wptr = (void *)((char *)wcsp + voff); + } + + if (valtype == INTEGER) { + *((int *)wptr) = inttmp; + + } else if (valtype == FLOAT) { + // Apply keyword parameterization. + if (ptype == 'v') { + int ipx = (wcsp->npv)++; + wcsp->pv[ipx].i = i; + wcsp->pv[ipx].m = m; + wptr = &(wcsp->pv[ipx].value); + + } else if (j) { + wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + + (j - 1); + + } else if (i) { + wptr = *((double **)wptr) + (i - 1); + } + + if (special) { + special(wptr, &dbltmp); + } else { + *((double *)wptr) = dbltmp; + } + + // Flag the presence of PCi_ja, or CDi_ja and/or CROTAia. + if (altlin) { + wcsp->altlin |= altlin; + altlin = 0; + } + + } else if (valtype == FLOAT2) { + // Split MJDREF and JDREF into integer and fraction. + if (special) { + special(wptr, dbl2tmp); + } else { + *((double *)wptr) = dbl2tmp[0]; + *((double *)wptr + 1) = dbl2tmp[1]; + } + + } else if (valtype == STRING) { + // Apply keyword parameterization. + if (ptype == 's') { + int ipx = wcsp->nps++; + wcsp->ps[ipx].i = i; + wcsp->ps[ipx].m = m; + wptr = wcsp->ps[ipx].value; + + } else if (j) { + wptr = *((char (**)[72])wptr) + + (i - 1)*(wcsp->naxis) + (j - 1); + + } else if (i) { + wptr = *((char (**)[72])wptr) + (i - 1); + } + + char *cptr = (char *)wptr; + strcpy(cptr, strtmp); + } + } + } + + if (ipass == npass) { + if (gotone) { + nvalid++; + if (ctrl == 4) { + wcsfprintf(stderr, + "%.80s\n Accepted (%d) as a valid WCS keyrecord.\n", + keyrec, nvalid); + } + + BEGIN(FLUSH); + + } else { + errmsg = "syntactically valid WCS keyrecord has no effect"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + + } else { + BEGIN(FLUSH); + } + } + YY_BREAK +case 427: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3017 "wcsbth.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 428: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3022 "wcsbth.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 429: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3027 "wcsbth.l" +{ + errmsg = "invalid keyvalue or malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 430: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3032 "wcsbth.l" +{ + errmsg = "malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 431: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3037 "wcsbth.l" +{ + if (ipass == npass) { + if (ctrl < 0) { + // Preserve discards. + keep = keyrec; + + } else if (2 < ctrl) { + nother++; + wcsfprintf(stderr, "%.80s\n Not a recognized WCS keyword.\n", + keyrec); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 432: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3052 "wcsbth.l" +{ + if (ipass == npass) { + (*nreject)++; + + if (ctrl%10 == -1) { + keep = keyrec; + } + + if (1 < abs(ctrl%10)) { + wcsfprintf(stderr, "%.80s\n Rejected (%d), %s.\n", + keyrec, *nreject, errmsg); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 433: +/* rule 433 can match eol */ +YY_RULE_SETUP +#line 3068 "wcsbth.l" +{ + if (ipass == npass && keep) { + if (hptr < keep) { + strncpy(hptr, keep, 80); + } + hptr += 80; + } + + naux += auxprm; + auxprm = 0; + + // Throw away the rest of the line and reset for the next one. + i = j = 0; + n = k = 0; + m = 0; + a = ' '; + + keyrec += 80; + + keytype = 0; + valtype = -1; + vptr = 0x0; + keep = 0x0; + + altlin = 0; + ptype = ' '; + chekval = 0x0; + special = 0x0; + + BEGIN(INITIAL); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(CCCCCia): +case YY_STATE_EOF(iCCCna): +case YY_STATE_EOF(iCCCCn): +case YY_STATE_EOF(TCCCna): +case YY_STATE_EOF(TCCCCn): +case YY_STATE_EOF(CCi_ja): +case YY_STATE_EOF(ijCCna): +case YY_STATE_EOF(TCn_ka): +case YY_STATE_EOF(TCCn_ka): +case YY_STATE_EOF(CROTAi): +case YY_STATE_EOF(iCROTn): +case YY_STATE_EOF(TCROTn): +case YY_STATE_EOF(CCi_ma): +case YY_STATE_EOF(iCn_ma): +case YY_STATE_EOF(iCCn_ma): +case YY_STATE_EOF(TCn_ma): +case YY_STATE_EOF(TCCn_ma): +case YY_STATE_EOF(PROJPm): +case YY_STATE_EOF(CCCCCCCC): +case YY_STATE_EOF(CCCCCCCa): +case YY_STATE_EOF(CCCCna): +case YY_STATE_EOF(CCCCCna): +case YY_STATE_EOF(CCCCn): +case YY_STATE_EOF(CCCCCn): +case YY_STATE_EOF(VALUE): +case YY_STATE_EOF(INTEGER_VAL): +case YY_STATE_EOF(FLOAT_VAL): +case YY_STATE_EOF(FLOAT2_VAL): +case YY_STATE_EOF(STRING_VAL): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(DISCARD): +case YY_STATE_EOF(ERROR): +case YY_STATE_EOF(FLUSH): +#line 3100 "wcsbth.l" +{ + // End-of-input. + if (ipass == 1) { + int status; + if ((status = wcsbth_init1(&alts, naux, nwcs, wcs)) || + (*nwcs == 0 && ctrl == 0)) { + return status; + } + + if (2 < abs(ctrl%10)) { + if (*nwcs == 1) { + if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) { + wcsfprintf(stderr, "Found one coordinate representation.\n"); + } + } else { + wcsfprintf(stderr, "Found %d coordinate representations.\n", + *nwcs); + } + } + + if (alts.imgherit) npass = 3; + } + + if (ipass++ < npass) { + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + keyrec = header; + *nreject = 0; + + imherit = 1; + + i = j = 0; + k = n = 0; + m = 0; + a = ' '; + + keytype = 0; + valtype = -1; + vptr = 0x0; + + altlin = 0; + ptype = ' '; + chekval = 0x0; + special = 0x0; + + yyrestart(yyin, yyscanner); + + } else { + + if (ctrl < 0) { + *hptr = '\0'; + } else if (ctrl == 1) { + wcsfprintf(stderr, "%d WCS keyrecord%s rejected.\n", + *nreject, (*nreject==1)?" was":"s were"); + } else if (ctrl == 4) { + wcsfprintf(stderr, "\n"); + wcsfprintf(stderr, "%5d keyrecord%s rejected for syntax or " + "other errors,\n", *nreject, (*nreject==1)?" was":"s were"); + wcsfprintf(stderr, "%5d %s recognized as syntactically valid, " + "and\n", nvalid, (nvalid==1)?"was":"were"); + wcsfprintf(stderr, "%5d other%s were not recognized as WCS " + "keyrecords.\n", nother, (nother==1)?"":"s"); + } + + return wcsbth_final(&alts, nwcs, wcs); + } + } + YY_BREAK +case 434: +YY_RULE_SETUP +#line 3168 "wcsbth.l" +ECHO; + YY_BREAK +#line 30467 "wcsbth.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 3168 "wcsbth.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsbth( + char *header, + int nkeyrec, + int relax, + int ctrl, + int keysel, + int *colsel, + int *nreject, + int *nwcs, + struct wcsprm **wcs) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsbth_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsbth_scanner(header, nkeyrec, relax, ctrl, keysel, colsel, + nreject, nwcs, wcs, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + +/*---------------------------------------------------------------------------- +* Perform first-pass tasks: +* +* 1) Count the number of coordinate axes in each of the 27 possible alternate +* image-header coordinate representations. Also count the number of PVi_ma +* and PSi_ma keywords in each representation. +* +* 2) Determine the number of binary table columns that have an image array +* with a coordinate representation (up to 999), and count the number of +* coordinate axes in each of the 27 possible alternates. Also count the +* number of iVn_ma and iSn_ma keywords in each representation. +* +* 3) Determine the number of alternate pixel list coordinate representations +* (up to 27) and the table columns associated with each. Also count the +* number of TVn_ma and TSn_ma keywords in each representation. +* +* In the first pass alts->arridx[icol][27] is used to determine the number of +* axes in each of 27 possible image-header coordinate descriptions (icol == 0) +* and each of the 27 possible coordinate representations for an image array in +* each column. +* +* The elements of alts->pixlist[icol] are used as bit arrays to flag which of +* the 27 possible pixel list coordinate representations are associated with +* each table column. +*---------------------------------------------------------------------------*/ + +int wcsbth_pass1( + int keytype, + int i, + int j, + int n, + int k, + char a, + char ptype, + struct wcsbth_alts *alts) + +{ + if (a == 0) { + // Keywords such as DATE-OBS go along for the ride. + return 0; + } + + int ncol = alts->ncol; + + // Do we need to allocate memory for alts? + if (alts->arridx == 0x0) { + if (ncol == 0) { + // Can only happen if TFIELDS is missing or out-of-sequence. If n and + // k are both zero then we may be processing an image header so leave + // ncol alone - the array will be realloc'd later if required. + if (n || k) { + // The header is mangled, assume the worst. + ncol = 999; + } + } + + if (!(alts->arridx = calloc((1 + ncol)*27, sizeof(short int))) || + !(alts->npv = calloc((1 + ncol)*27, sizeof(unsigned char))) || + !(alts->nps = calloc((1 + ncol)*27, sizeof(unsigned char))) || + !(alts->pixlist = calloc((1 + ncol), sizeof(unsigned int)))) { + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + return WCSHDRERR_MEMORY; + } + + alts->ncol = ncol; + + } else if (n > ncol || k > ncol) { + // Can only happen if TFIELDS or the WCS keyword is wrong; carry on. + ncol = 999; + if (!(alts->arridx = realloc(alts->arridx, + 27*(1 + ncol)*sizeof(short int))) || + !(alts->npv = realloc(alts->npv, + 27*(1 + ncol)*sizeof(unsigned char))) || + !(alts->nps = realloc(alts->nps, + 27*(1 + ncol)*sizeof(unsigned char))) || + !(alts->pixlist = realloc(alts->pixlist, + (1 + ncol)*sizeof(unsigned int)))) { + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + return WCSHDRERR_MEMORY; + } + + // Since realloc() doesn't initialize the extra memory. + for (int icol = (1 + alts->ncol); icol < (1 + ncol); icol++) { + for (int ialt = 0; ialt < 27; ialt++) { + alts->arridx[icol][ialt] = 0; + alts->npv[icol][ialt] = 0; + alts->nps[icol][ialt] = 0; + alts->pixlist[icol] = 0; + } + } + + alts->ncol = ncol; + } + + int ialt = 0; + if (a != ' ') { + ialt = a - 'A' + 1; + } + + // A BINTAB keytype such as LONPna, in conjunction with an IMGAXIS keytype + // causes a table column to be recognized as an image array. + if (keytype & IMGHEAD || keytype & BIMGARR) { + // n == 0 is expected for IMGHEAD keywords. + if (i == 0 && j == 0) { + if (alts->arridx[n][ialt] == 0) { + // Flag that an auxiliary keyword was seen. + alts->arridx[n][ialt] = -1; + } + + } else { + // Record the maximum axis number found. + if (alts->arridx[n][ialt] < i) { + alts->arridx[n][ialt] = i; + } + + if (alts->arridx[n][ialt] < j) { + alts->arridx[n][ialt] = j; + } + } + + if (ptype == 'v') { + alts->npv[n][ialt]++; + } else if (ptype == 's') { + alts->nps[n][ialt]++; + } + } + + // BINTAB keytypes, which apply both to pixel lists as well as binary table + // image arrays, never contribute to recognizing a table column as a pixel + // list axis. A PIXLIST keytype is required for that. + if (keytype == PIXLIST) { + int mask = 1 << ialt; + + // n > 0 for PIXLIST keytypes. + alts->pixlist[n] |= mask; + if (k) alts->pixlist[k] |= mask; + + // Used as a flag over all columns. + alts->pixlist[0] |= mask; + + if (ptype == 'v') { + alts->pixnpv[ialt]++; + } else if (ptype == 's') { + alts->pixnps[ialt]++; + } + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Perform initializations at the end of the first pass: +* +* 1) Determine the required number of wcsprm structs, allocate memory for +* an array of them and initialize each one. +*---------------------------------------------------------------------------*/ + +int wcsbth_init1( + struct wcsbth_alts *alts, + int naux, + int *nwcs, + struct wcsprm **wcs) + +{ + int status = 0; + + if (alts->arridx == 0x0) { + *nwcs = 0; + return 0; + } + + // Determine the number of axes in each pixel list representation. + int ialt, mask, ncol = alts->ncol; + for (ialt = 0, mask = 1; ialt < 27; ialt++, mask <<= 1) { + alts->pixidx[ialt] = 0; + + if (alts->pixlist[0] | mask) { + for (int icol = 1; icol <= ncol; icol++) { + if (alts->pixlist[icol] & mask) { + alts->pixidx[ialt]++; + } + } + } + } + + // Find the total number of coordinate representations. + *nwcs = 0; + alts->imgherit = 0; + int inherit[27]; + for (int ialt = 0; ialt < 27; ialt++) { + inherit[ialt] = 0; + + for (int icol = 1; icol <= ncol; icol++) { + if (alts->arridx[icol][ialt] < 0) { + // No BIMGARR keytype but there's at least one BINTAB. + if (alts->arridx[0][ialt] > 0) { + // There is an IMGAXIS keytype that we will inherit, so count this + // representation. + alts->arridx[icol][ialt] = alts->arridx[0][ialt]; + } else { + alts->arridx[icol][ialt] = 0; + } + } + + if (alts->arridx[icol][ialt]) { + if (alts->arridx[0][ialt]) { + // All IMGHEAD keywords are inherited for this ialt. + inherit[ialt] = 1; + + if (alts->arridx[icol][ialt] < alts->arridx[0][ialt]) { + // The extra axes are also inherited. + alts->arridx[icol][ialt] = alts->arridx[0][ialt]; + } + } + + (*nwcs)++; + } + } + + // Count every "a" found in any IMGHEAD keyword... + if (alts->arridx[0][ialt]) { + if (inherit[ialt]) { + // ...but not if the IMGHEAD keywords will be inherited. + alts->arridx[0][ialt] = 0; + alts->imgherit = 1; + } else if (alts->arridx[0][ialt] > 0) { + (*nwcs)++; + } + } + + // We need a struct for every "a" found in a PIXLIST keyword. + if (alts->pixidx[ialt]) { + (*nwcs)++; + } + } + + + if (*nwcs) { + // Allocate memory for the required number of wcsprm structs. + if (!(*wcs = calloc(*nwcs, sizeof(struct wcsprm)))) { + return WCSHDRERR_MEMORY; + } + + // Initialize each wcsprm struct. + struct wcsprm *wcsp = *wcs; + *nwcs = 0; + for (int icol = 0; icol <= ncol; icol++) { + for (int ialt = 0; ialt < 27; ialt++) { + if (alts->arridx[icol][ialt] > 0) { + // Image-header representations that are not for inheritance + // (icol == 0) or binary table image array representations. + wcsp->flag = -1; + int npvmax = alts->npv[icol][ialt]; + int npsmax = alts->nps[icol][ialt]; + if ((status = wcsinit(1, (int)(alts->arridx[icol][ialt]), wcsp, + npvmax, npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Record the table column number. + wcsp->colnum = icol; + + // On the second pass alts->arridx[icol][27] indexes the array of + // wcsprm structs. + alts->arridx[icol][ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that this column has no WCS for this "a". + alts->arridx[icol][ialt] = -1; + } + } + } + + for (int ialt = 0; ialt < 27; ialt++) { + if (alts->pixidx[ialt]) { + // Pixel lists representations. + wcsp->flag = -1; + int npvmax = alts->pixnpv[ialt]; + int npsmax = alts->pixnps[ialt]; + if ((status = wcsinit(1, (int)(alts->pixidx[ialt]), wcsp, npvmax, + npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Record the pixel list column numbers. + int icol, ix, mask = (1 << ialt); + for (icol = 1, ix = 0; icol <= ncol; icol++) { + if (alts->pixlist[icol] & mask) { + wcsp->colax[ix++] = icol; + } + } + + // alts->pixidx[] indexes the array of wcsprm structs. + alts->pixidx[ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that this column is not a pixel list axis for this "a". + alts->pixidx[ialt] = -1; + } + } + } + + return status; +} + + +/*---------------------------------------------------------------------------- +* Return a pointer to the next wcsprm struct for a particular column number +* and alternate. +*---------------------------------------------------------------------------*/ + +struct wcsprm *wcsbth_idx( + struct wcsprm *wcs, + struct wcsbth_alts *alts, + int keytype, + int n, + char a) + +{ + const char as[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + if (!wcs) return 0x0; + + int iwcs = -1; + for (; iwcs < 0 && alts->ialt < 27; alts->ialt++) { + // Note that a == 0 applies to every alternate, otherwise this + // loop simply determines the appropriate value of alts->ialt. + if (a && a != as[alts->ialt]) continue; + + if (keytype & (IMGHEAD | BIMGARR)) { + for (; iwcs < 0 && alts->icol <= alts->ncol; alts->icol++) { + // Image header keywords, n == 0, apply to all columns, otherwise this + // loop simply determines the appropriate value of alts->icol. + if (n && n != alts->icol) continue; + iwcs = alts->arridx[alts->icol][alts->ialt]; + } + + // Break out of the loop to stop alts->ialt from being incremented. + if (iwcs >= 0) break; + + // Start from scratch for the next alts->ialt. + alts->icol = 0; + } + + if (keytype & (IMGAUX | PIXLIST)) { + iwcs = alts->pixidx[alts->ialt]; + } + } + + return (iwcs >= 0) ? (wcs + iwcs) : 0x0; +} + + +/*---------------------------------------------------------------------------- +* Return the axis number associated with the specified column number in a +* particular pixel list coordinate representation. +*---------------------------------------------------------------------------*/ + +int wcsbth_colax( + struct wcsprm *wcs, + struct wcsbth_alts *alts, + int n, + char a) + +{ + if (!wcs) return 0; + + struct wcsprm *wcsp = wcs; + if (a != ' ') { + wcsp += alts->pixidx[a-'A'+1]; + } + + for (int ix = 0; ix < wcsp->naxis; ix++) { + if (wcsp->colax[ix] == n) { + return ++ix; + } + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret the JDREF, JDREFI, and JDREFF keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_jdref(double *mjdref, const double *jdref) + +{ + // Set MJDREF from JDREF. + if (undefined(mjdref[0] && undefined(mjdref[1]))) { + mjdref[0] = jdref[0] - 2400000.0; + mjdref[1] = jdref[1] - 0.5; + + if (mjdref[1] < 0.0) { + mjdref[0] -= 1.0; + mjdref[1] += 1.0; + } + } + + return 0; +} + +int wcsbth_jdrefi(double *mjdref, const double *jdrefi) + +{ + // Set the integer part of MJDREF from JDREFI. + if (undefined(mjdref[0])) { + mjdref[0] = *jdrefi - 2400000.5; + } + + return 0; +} + + +int wcsbth_jdreff(double *mjdref, const double *jdreff) + +{ + // Set the fractional part of MJDREF from JDREFF. + if (undefined(mjdref[1])) { + mjdref[1] = *jdreff; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret EPOCHa keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_epoch(double *equinox, const double *epoch) + +{ + // If EQUINOXa is currently undefined then set it from EPOCHa. + if (undefined(*equinox)) { + *equinox = *epoch; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret VSOURCEa keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_vsource(double *zsource, const double *vsource) + +{ + const double c = 299792458.0; + + // If ZSOURCEa is currently undefined then set it from VSOURCEa. + if (undefined(*zsource)) { + // Convert relativistic Doppler velocity to redshift. + double beta = *vsource/c; + *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Check validity of a TIMEPIXR keyvalue. +*---------------------------------------------------------------------------*/ + +int wcsbth_timepixr(double timepixr) + +{ + return (timepixr < 0.0 || 1.0 < timepixr); +} + + +/*---------------------------------------------------------------------------- +* Tie up loose ends. +*---------------------------------------------------------------------------*/ + +int wcsbth_final( + struct wcsbth_alts *alts, + int *nwcs, + struct wcsprm **wcs) + +{ + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + + for (int ialt = 0; ialt < *nwcs; ialt++) { + // Interpret -TAB header keywords. + int status; + if ((status = wcstab(*wcs+ialt))) { + wcsvfree(nwcs, wcs); + return status; + } + } + + return 0; +} + diff --git a/deps/wcslib/C/flexed/wcspih.c b/deps/wcslib/C/flexed/wcspih.c new file mode 100644 index 0000000..1e1c793 --- /dev/null +++ b/deps/wcslib/C/flexed/wcspih.c @@ -0,0 +1,26681 @@ +#line 2 "wcspih.c" + +#line 4 "wcspih.c" + +#define _POSIX_C_SOURCE 1 +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define wcspih_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wcspih_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wcspih_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wcspih_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wcspih_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wcspih_scan_buffer +#endif + +#ifdef yy_scan_string +#define wcspih_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wcspih_scan_string +#endif + +#ifdef yy_scan_bytes +#define wcspih_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wcspih_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wcspih_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wcspih_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wcspih_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wcspih_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wcspih_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wcspih_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wcspih_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wcspih_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wcspihpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wcspihpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wcspihpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wcspihpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wcspihensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wcspihensure_buffer_stack +#endif + +#ifdef yylex +#define wcspihlex_ALREADY_DEFINED +#else +#define yylex wcspihlex +#endif + +#ifdef yyrestart +#define wcspihrestart_ALREADY_DEFINED +#else +#define yyrestart wcspihrestart +#endif + +#ifdef yylex_init +#define wcspihlex_init_ALREADY_DEFINED +#else +#define yylex_init wcspihlex_init +#endif + +#ifdef yylex_init_extra +#define wcspihlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wcspihlex_init_extra +#endif + +#ifdef yylex_destroy +#define wcspihlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wcspihlex_destroy +#endif + +#ifdef yyget_debug +#define wcspihget_debug_ALREADY_DEFINED +#else +#define yyget_debug wcspihget_debug +#endif + +#ifdef yyset_debug +#define wcspihset_debug_ALREADY_DEFINED +#else +#define yyset_debug wcspihset_debug +#endif + +#ifdef yyget_extra +#define wcspihget_extra_ALREADY_DEFINED +#else +#define yyget_extra wcspihget_extra +#endif + +#ifdef yyset_extra +#define wcspihset_extra_ALREADY_DEFINED +#else +#define yyset_extra wcspihset_extra +#endif + +#ifdef yyget_in +#define wcspihget_in_ALREADY_DEFINED +#else +#define yyget_in wcspihget_in +#endif + +#ifdef yyset_in +#define wcspihset_in_ALREADY_DEFINED +#else +#define yyset_in wcspihset_in +#endif + +#ifdef yyget_out +#define wcspihget_out_ALREADY_DEFINED +#else +#define yyget_out wcspihget_out +#endif + +#ifdef yyset_out +#define wcspihset_out_ALREADY_DEFINED +#else +#define yyset_out wcspihset_out +#endif + +#ifdef yyget_leng +#define wcspihget_leng_ALREADY_DEFINED +#else +#define yyget_leng wcspihget_leng +#endif + +#ifdef yyget_text +#define wcspihget_text_ALREADY_DEFINED +#else +#define yyget_text wcspihget_text +#endif + +#ifdef yyget_lineno +#define wcspihget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wcspihget_lineno +#endif + +#ifdef yyset_lineno +#define wcspihset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wcspihset_lineno +#endif + +#ifdef yyget_column +#define wcspihget_column_ALREADY_DEFINED +#else +#define yyget_column wcspihget_column +#endif + +#ifdef yyset_column +#define wcspihset_column_ALREADY_DEFINED +#else +#define yyset_column wcspihset_column +#endif + +#ifdef yywrap +#define wcspihwrap_ALREADY_DEFINED +#else +#define yywrap wcspihwrap +#endif + +#ifdef yyalloc +#define wcspihalloc_ALREADY_DEFINED +#else +#define yyalloc wcspihalloc +#endif + +#ifdef yyrealloc +#define wcspihrealloc_ALREADY_DEFINED +#else +#define yyrealloc wcspihrealloc +#endif + +#ifdef yyfree +#define wcspihfree_ALREADY_DEFINED +#else +#define yyfree wcspihfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + +#define YY_LESS_LINENO(n) +#define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define wcspihwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 55, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 58, 59, 60, 61, 62, + 57, 57, 63, 57, 64, 57, 65, 66, 67, 68, + 69, 57, 70, 71, 72, 57, 73, 74, 75, 76, + 77, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57 + }, + + { + 55, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 56, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 79, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78 + }, + + { + 55, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 56, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 79, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78 + }, + + { + 55, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 56, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 82, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81 + }, + + { + 55, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 56, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 82, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81 + }, + + { + 55, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 56, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 85, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84 + }, + + { + 55, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 56, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 85, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, + + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84 + }, + + { + 55, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 56, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 88, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + + }, + + { + 55, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 56, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 88, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + }, + + { + 55, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 56, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 91, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, + + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90 + }, + + { + 55, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 56, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 91, 90, 90, 90, 90, 90, 90, 90, + + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90 + }, + + { + 55, 92, 92, 92, 92, 92, 92, 92, 92, 92, + + 56, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92 + }, + + { + 55, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 56, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92 + }, + + { + 55, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 56, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93 + }, + + { + 55, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 56, 93, 93, 93, 93, 93, 93, 93, 93, 93, + + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + + 93, 93, 93, 93, 93, 93, 93, 93 + }, + + { + 55, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 56, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95 + }, + + { + 55, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 56, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, + + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95 + }, + + { + 55, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 56, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97 + + }, + + { + 55, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 56, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97 + }, + + { + 55, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 56, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + }, + + { + 55, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 56, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + + 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + }, + + { + 55, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 56, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101 + }, + + { + 55, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 56, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101 + }, + + { + 55, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 56, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 104, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103 + }, + + { + 55, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 56, 103, 103, 103, 103, 103, 103, 103, 103, 103, + + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 104, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + + 103, 103, 103, 103, 103, 103, 103, 103 + }, + + { + 55, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 56, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 106, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105 + }, + + { + 55, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 56, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + + 105, 106, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105 + }, + + { + 55, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 56, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 108, 107, 108, 107, 107, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107 + + }, + + { + 55, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 56, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 108, 107, 108, 107, 107, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107 + }, + + { + 55, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 56, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 111, 110, 111, 112, 110, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 55, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 56, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 111, 110, 111, 112, 110, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 55, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 56, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 115, 114, 115, 116, 114, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 55, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 56, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 115, 114, 115, 116, 114, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 55, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 56, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118 + }, + + { + 55, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 56, 118, 118, 118, 118, 118, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118 + }, + + { + 55, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 56, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120 + }, + + { + 55, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 56, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120 + }, + + { + 55, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 56, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 122, 122, 122, 122, 123, 122, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 122, 122, 122, 122, 122 + + }, + + { + 55, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 56, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 122, 122, 122, 122, 123, 122, 123, 123, 123, + + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 122, 122, 122, 122, 122 + }, + + { + 55, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 56, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 125, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 55, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 56, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 125, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 55, 126, 126, 126, 126, 126, 126, 126, 126, 126, + + 56, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 127, 126, 127, 128, 126, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126 + }, + + { + 55, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 56, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 127, 126, 127, 128, 126, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126 + }, + + { + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 130, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 130, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 55, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 133, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 134, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131 + }, + + { + 55, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 133, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 134, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131 + }, + + { + 55, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135 + + }, + + { + 55, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135 + }, + + { + 55, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 + }, + + { + 55, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 + }, + + { + 55, 139, 139, 139, 139, 139, 139, 139, 139, 139, + + 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139 + }, + + { + 55, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139 + }, + + { + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55 + }, + + { + 55, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56 + }, + + { + 55, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57 + }, + + { + 55, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, 141, -58, -58, + 142, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, 143, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58 + }, + + { + 55, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, 144, 145, + -59, -59, -59, -59, -59, -59, 146, -59, -59, -59, + 147, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, 148, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59 + + }, + + { + 55, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, 149, -60, + -60, -60, -60, -60, -60, -60, -60, -60, 150, -60, + 151, 152, 153, 154, 155, 156, -60, -60, -60, -60, + 157, -60, -60, -60, -60, 158, -60, -60, -60, -60, + + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60 + }, + + { + 55, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, 159, -61, -61, -61, -61, + + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + 160, 161, -61, 162, -61, -61, 163, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61 + }, + + { + 55, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, 164, -62, + 165, 166, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62 + }, + + { + 55, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, 167, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63 + }, + + { + 55, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, 168, 169, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64 + }, + + { + 55, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, 170, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, 171, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65 + }, + + { + 55, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, 172, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66 + }, + + { + 55, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, 173, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67 + }, + + { + 55, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + + -68, -68, -68, -68, -68, -68, 174, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68 + }, + + { + 55, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, 175, -69, -69, + -69, -69, -69, -69, -69, -69, 176, -69, -69, -69, + 177, -69, 178, 179, -69, -69, 180, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69 + + }, + + { + 55, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, 181, -70, -70, -70, 182, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, 183, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70 + }, + + { + 55, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + 184, -71, -71, 185, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71 + }, + + { + 55, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, 186, + -72, -72, -72, 187, -72, -72, -72, -72, -72, -72, + -72, -72, 188, 189, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72 + }, + + { + 55, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, 190, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, 191, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73 + }, + + { + 55, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, 192, -74, 193, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74 + }, + + { + 55, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + 194, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75 + }, + + { + 55, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + 195, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76 + }, + + { + 55, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, 196, -77, -77, -77, -77, -77, -77, + + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77 + }, + + { + 55, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78 + }, + + { + 55, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + + -79, -79, 197, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, 198, 199, + 199, 199, 199, 199, 199, 199, 199, 199, -79, -79, + -79, -79, -79, -79, -79, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79 + + }, + + { + 55, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, 200, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, -80, -80, + -80, -80, -80, -80, -80, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, -80, -80, -80, -80, -80, -80, -80, -80, -80, + + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80 + }, + + { + 55, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81 + }, + + { + 55, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, 202, -82, -82, 203, 204, + 204, 204, 204, 204, 204, 204, 204, 204, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, 205, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 55, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, 202, -83, -83, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, 207, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83 + }, + + { + 55, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84 + }, + + { + 55, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, 208, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, 209, 210, + + 210, 210, 210, 210, 210, 210, 210, 210, -85, -85, + -85, -85, -85, -85, -85, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 55, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, 211, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, -86, -86, + -86, -86, -86, -86, -86, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86 + }, + + { + 55, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 55, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, 213, -88, -88, 214, 215, + 215, 215, 215, 215, 215, 215, 215, 215, -88, -88, + + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, 216, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88 + }, + + { + 55, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, 213, -89, -89, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, 218, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89 + + }, + + { + 55, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 55, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91 + }, + + { + 55, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92 + }, + + { + 55, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 55, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, 219, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, -94, -94, + -94, -94, -94, -94, -94, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94 + }, + + { + 55, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95 + }, + + { + 55, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, 221, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96 + }, + + { + 55, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97 + }, + + { + 55, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, 223, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98 + }, + + { + 55, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99 + + }, + + { + 55, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, 224, -100, -100, -100, -100, + + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100 + }, + + { + 55, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101 + }, + + { + 55, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, 225, -102, -102, -102, -102, -102, -102, -102, + + -102, -102, -102, -102, -102, -102, -102, -102, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102 + }, + + { + 55, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103 + }, + + { + 55, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, 227, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104 + }, + + { + 55, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105 + }, + + { + 55, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, 228, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106 + }, + + { + 55, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107 + }, + + { + 55, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -108, -108, + + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108 + }, + + { + 55, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109 + + }, + + { + 55, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110 + }, + + { + 55, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, 230, -111, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111 + }, + + { + 55, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, -112, -112, -112, -112, -112, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112 + }, + + { + 55, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, 233, -113, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, 235, 235, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + 235, 235, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113 + }, + + { + 55, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114 + }, + + { + 55, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, 236, -115, 237, 237, + + 237, 237, 237, 237, 237, 237, 237, 237, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115 + }, + + { + 55, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116 + }, + + { + 55, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, 239, -117, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, 241, 241, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + 241, 241, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117 + }, + + { + 55, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118 + }, + + { + 55, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + + 242, 242, 242, 242, 242, 242, 242, 242, 242, 243, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242 + + }, + + { + 55, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120 + }, + + { + 55, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244 + }, + + { + 55, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122 + }, + + { + 55, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, 246, -123, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, -123, -123, + -123, -123, -123, -123, -123, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, -123, -123, -123, -123, 246, -123, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, -123, -123, -123, -123, -123 + }, + + { + 55, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124 + }, + + { + 55, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, 247, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125 + }, + + { + 55, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126 + }, + + { + 55, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, 248, -127, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127 + }, + + { + 55, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -128, -128, + + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128 + }, + + { + 55, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, 251, -129, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, 253, 253, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + 253, 253, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129 + + }, + + { + 55, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130 + }, + + { + 55, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 256, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 257, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254 + }, + + { + 55, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132 + }, + + { + 55, 258, 258, 258, 258, 258, 258, 258, 258, 258, + + 259, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 260, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 261, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 267, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266 + }, + + { + 55, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136 + }, + + { + 55, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268 + }, + + { + 55, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138 + }, + + { + 55, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 271, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270 + + }, + + { + 55, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140 + }, + + { + 55, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, 272, -141, + + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141 + }, + + { + 55, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, 273, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142 + }, + + { + 55, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, 274, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, 275, + -143, -143, 276, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143 + }, + + { + 55, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, 277, -144, -144, -144, -144, -144, -144, + + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144 + }, + + { + 55, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + 278, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145 + }, + + { + 55, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, 279, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, 280, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146 + }, + + { + 55, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + + -147, -147, -147, -147, -147, 281, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147 + }, + + { + 55, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + + -148, -148, -148, -148, -148, -148, -148, -148, 282, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, 283, + -148, -148, 284, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148 + }, + + { + 55, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, 285, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149 + + }, + + { + 55, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, 286, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + 287, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150 + }, + + { + 55, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, 288, 289, + + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151 + }, + + { + 55, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, 290, 291, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152 + }, + + { + 55, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, 292, -153, + -153, -153, -153, -153, -153, -153, 293, -153, -153, 294, + 295, -153, -153, -153, -153, -153, 296, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153 + }, + + { + 55, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + + -154, -154, -154, -154, -154, -154, -154, -154, -154, 297, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154 + }, + + { + 55, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, 298, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155 + }, + + { + 55, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, 299, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156 + }, + + { + 55, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + 300, -157, -157, -157, -157, -157, -157, -157, -157, -157, + + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157 + }, + + { + 55, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, 301, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158 + }, + + { + 55, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, 302, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159 + + }, + + { + 55, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160 + }, + + { + 55, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161 + }, + + { + 55, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, 303, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162 + }, + + { + 55, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, 304, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163 + }, + + { + 55, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, 305, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164 + }, + + { + 55, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, 306, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165 + }, + + { + 55, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, 307, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166 + }, + + { + 55, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, 308, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167 + }, + + { + 55, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, 309, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, 310, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168 + }, + + { + 55, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + 311, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169 + + }, + + { + 55, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, 312, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170 + }, + + { + 55, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + + -171, -171, -171, -171, -171, -171, -171, -171, 313, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171 + }, + + { + 55, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, 314, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172 + }, + + { + 55, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, 315, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173 + }, + + { + 55, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + + -174, -174, -174, 316, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174 + }, + + { + 55, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175 + }, + + { + 55, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, 317, -176, -176, -176, 318, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, 319, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176 + }, + + { + 55, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, 320, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177 + }, + + { + 55, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, 321, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178 + }, + + { + 55, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179 + + }, + + { + 55, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180 + }, + + { + 55, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, 322, -181, + + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181 + }, + + { + 55, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, 323, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182 + }, + + { + 55, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, 324, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183 + }, + + { + 55, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, 325, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184 + }, + + { + 55, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, 326, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185 + }, + + { + 55, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, 327, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186 + }, + + { + 55, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, 328, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187 + }, + + { + 55, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + + -188, -188, -188, -188, -188, -188, -188, -188, -188, 329, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188 + }, + + { + 55, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, 330, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189 + + }, + + { + 55, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, 331, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190 + }, + + { + 55, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + + -191, -191, -191, -191, -191, -191, -191, -191, -191, 332, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191 + }, + + { + 55, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, 333, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192 + }, + + { + 55, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, 334, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193 + }, + + { + 55, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, 335, -194, -194, -194, -194, -194, 336, + + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194 + }, + + { + 55, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, 337, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195 + }, + + { + 55, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, 338, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196 + }, + + { + 55, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, 339, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197 + }, + + { + 55, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, 340, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, 341, 342, + 342, 342, 342, 342, 342, 342, 342, 342, -198, -198, + + -198, -198, -198, -198, -198, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198 + }, + + { + 55, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, 343, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, 341, 342, + 342, 342, 342, 342, 342, 342, 342, 342, -199, -199, + -199, -199, -199, -199, -199, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199 + + }, + + { + 55, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, 344, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200 + }, + + { + 55, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, 345, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, 346, 346, + 346, 346, 346, 346, 346, 346, 346, 346, -201, -201, + -201, -201, -201, -201, -201, 345, 345, 345, 345, 345, + + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201 + }, + + { + 55, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, -202, -202, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202 + }, + + { + 55, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, 348, -203, -203, 349, 350, + 350, 350, 350, 350, 350, 350, 350, 350, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, 351, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203 + }, + + { + 55, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, 348, -204, -204, 352, 353, + 353, 353, 353, 353, 353, 353, 353, 353, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, 354, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204 + }, + + { + 55, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, 355, 355, + + 355, 355, 355, 355, 355, 355, 355, 355, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205 + }, + + { + 55, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 348, -206, -206, 356, 357, + 357, 357, 357, 357, 357, 357, 357, 357, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 358, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206 + }, + + { + 55, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, 359, 360, + 360, 360, 360, 360, 360, 360, 360, 360, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207 + }, + + { + 55, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, 361, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208 + }, + + { + 55, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, 362, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 363, 364, + 364, 364, 364, 364, 364, 364, 364, 364, -209, -209, + -209, -209, -209, -209, -209, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209 + + }, + + { + 55, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, 365, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, 363, 364, + 364, 364, 364, 364, 364, 364, 364, 364, -210, -210, + -210, -210, -210, -210, -210, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, -210, -210, -210, -210, -210, -210, -210, -210, -210, + + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210 + }, + + { + 55, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, 366, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211 + }, + + { + 55, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, 367, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, 363, 363, + 363, 363, 363, 363, 363, 363, 363, 363, -212, -212, + -212, -212, -212, -212, -212, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212 + }, + + { + 55, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 + }, + + { + 55, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, 369, -214, -214, 370, 371, + 371, 371, 371, 371, 371, 371, 371, 371, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, 372, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214 + }, + + { + 55, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 369, -215, -215, 373, 373, + + 373, 373, 373, 373, 373, 373, 373, 373, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 374, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215 + }, + + { + 55, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216 + }, + + { + 55, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, 369, -217, -217, 376, 376, + 376, 376, 376, 376, 376, 376, 376, 376, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + + -217, -217, -217, -217, -217, 377, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217 + }, + + { + 55, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, 378, 379, + 379, 379, 379, 379, 379, 379, 379, 379, -218, -218, + + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218 + }, + + { + 55, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + + -219, -219, 380, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219 + + }, + + { + 55, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, 381, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, -220, -220, + -220, -220, -220, -220, -220, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, -220, -220, -220, -220, -220, -220, -220, -220, -220, + + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220 + }, + + { + 55, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, 383, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221 + }, + + { + 55, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, 384, -222, -222, -222, -222, -222, -222, -222, + + -222, -222, -222, -222, -222, -222, -222, -222, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222 + }, + + { + 55, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, 386, 386, + 386, 386, 386, 386, 386, 386, 386, 386, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223 + }, + + { + 55, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, 387, 387, + 387, 387, 387, 387, 387, 387, 387, 387, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224 + }, + + { + 55, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, 388, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225 + }, + + { + 55, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, 389, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226 + }, + + { + 55, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, 227, -227, -227, -227, -227, -227, -227, 390, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227 + }, + + { + 55, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, 228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228 + }, + + { + 55, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229 + + }, + + { + 55, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230 + }, + + { + 55, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, 233, -231, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, 235, 235, + + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + 235, 235, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231 + }, + + { + 55, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + + -232, -232, -232, -232, -232, -232, -232, -232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, 235, 235, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + 235, 235, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232 + }, + + { + 55, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 391, 391, + 391, 391, 391, 391, 391, 391, 391, 391, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 235, 235, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + 235, 235, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233 + }, + + { + 55, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, 233, -234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, 235, 235, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + 235, 235, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234 + }, + + { + 55, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, 392, -235, 392, -235, -235, 393, 393, + + 393, 393, 393, 393, 393, 393, 393, 393, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235 + }, + + { + 55, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236 + }, + + { + 55, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, 239, -237, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, 241, 241, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + 241, 241, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237 + }, + + { + 55, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -238, -238, + + -238, -238, -238, -238, -238, -238, -238, -238, 241, 241, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + 241, 241, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238 + }, + + { + 55, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 241, 241, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + 241, 241, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239 + + }, + + { + 55, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, 239, -240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, 241, 241, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + + 241, 241, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240 + }, + + { + 55, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, 395, -241, 395, -241, -241, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241 + }, + + { + 55, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 243, + + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242 + }, + + { + 55, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, 242, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243 + }, + + { + 55, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244 + }, + + { + 55, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245 + }, + + { + 55, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, 246, -246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, -246, -246, + -246, -246, -246, -246, -246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, -246, -246, -246, -246, 246, -246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + + 246, 246, 246, -246, -246, -246, -246, -246 + }, + + { + 55, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, 247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247 + }, + + { + 55, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -248, -248, + + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248 + }, + + { + 55, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, 251, -249, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, 253, 253, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + 253, 253, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249 + + }, + + { + 55, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 253, 253, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + + 253, 253, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250 + }, + + { + 55, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, 253, 253, + + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + 253, 253, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251 + }, + + { + 55, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + + -252, -252, -252, -252, -252, -252, 251, -252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, 253, 253, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + 253, 253, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252 + }, + + { + 55, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, 398, -253, 398, -253, -253, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253 + }, + + { + 55, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 256, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 257, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254 + }, + + { + 55, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255 + }, + + { + 55, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 255, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 256, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 257, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + }, + + { + 55, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259 + + }, + + { + 55, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 410, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 411, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 412, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 267, 266, 266, 266, 266, 266, 266, 266, 266, 266, + + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + + 266, 266, 266, 266, 266, 266, 266, 266 + }, + + { + 55, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267 + }, + + { + 55, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268 + }, + + { + 55, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269 + + }, + + { + 55, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 271, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270 + }, + + { + 55, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271 + }, + + { + 55, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, 413, 414, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272 + }, + + { + 55, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, 415, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273 + }, + + { + 55, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, 416, -274, -274, + + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274 + }, + + { + 55, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, 417, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275 + }, + + { + 55, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, 418, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276 + }, + + { + 55, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, 419, -277, -277, -277, -277, -277, -277, + + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277 + }, + + { + 55, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, 420, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278 + }, + + { + 55, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, 421, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279 + + }, + + { + 55, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 422, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280 + }, + + { + 55, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + + -281, -281, -281, -281, -281, -281, -281, -281, -281, 423, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281 + }, + + { + 55, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, 424, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282 + }, + + { + 55, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, 425, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283 + }, + + { + 55, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, 426, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 + }, + + { + 55, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, 427, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285 + }, + + { + 55, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, 428, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286 + }, + + { + 55, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, 429, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287 + }, + + { + 55, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, 430, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288 + }, + + { + 55, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, 431, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289 + + }, + + { + 55, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, 432, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290 + }, + + { + 55, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, 433, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291 + }, + + { + 55, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, 434, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292 + }, + + { + 55, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 435, -293, + -293, -293, -293, -293, 436, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293 + }, + + { + 55, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + + -294, -294, -294, -294, 437, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294 + }, + + { + 55, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, 438, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295 + }, + + { + 55, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, 439, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296 + }, + + { + 55, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, 440, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297 + }, + + { + 55, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + 441, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298 + }, + + { + 55, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, 442, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299 + + }, + + { + 55, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, 443, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300 + }, + + { + 55, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, 444, -301, -301, -301, -301, + + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301 + }, + + { + 55, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, 445, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302 + }, + + { + 55, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, 446, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303 + }, + + { + 55, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + + -304, -304, 447, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304 + }, + + { + 55, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, 448, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305 + }, + + { + 55, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, 449, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306 + }, + + { + 55, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, 450, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307 + }, + + { + 55, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, 451, -308, + -308, -308, -308, -308, 452, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308 + }, + + { + 55, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, 453, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309 + + }, + + { + 55, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, 454, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310 + }, + + { + 55, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + + -311, -311, -311, -311, -311, -311, -311, -311, -311, 455, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311 + }, + + { + 55, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + 456, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312 + }, + + { + 55, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + 457, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313 + }, + + { + 55, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, 458, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + + -314, -314, 459, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314 + }, + + { + 55, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, 460, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315 + }, + + { + 55, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, 461, -316, -316, -316, -316, -316, -316, -316, 462, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316 + }, + + { + 55, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, 463, -317, -317, -317, -317, -317, + + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317 + }, + + { + 55, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + 464, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318 + }, + + { + 55, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, 465, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, 466, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319 + + }, + + { + 55, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, 467, -320, -320, 468, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320 + }, + + { + 55, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + + -321, -321, -321, -321, 469, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321 + }, + + { + 55, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, 470, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322 + }, + + { + 55, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, 471, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323 + }, + + { + 55, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, 472, -324, + + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324 + }, + + { + 55, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, 473, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325 + }, + + { + 55, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, 474, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326 + }, + + { + 55, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, 475, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327 + }, + + { + 55, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + + -328, -328, -328, -328, -328, -328, -328, -328, -328, 476, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, 477, 478, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328 + }, + + { + 55, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + 479, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329 + + }, + + { + 55, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, 480, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, 481, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330 + }, + + { + 55, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, 482, -331, -331, -331, -331, + + -331, -331, -331, -331, -331, -331, -331, -331, -331, 483, + -331, -331, 484, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331 + }, + + { + 55, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, 485, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332 + }, + + { + 55, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, 486, + 486, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333 + }, + + { + 55, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, 487, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, 488, -334, + + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334 + }, + + { + 55, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, 489, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335 + }, + + { + 55, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, 490, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336 + }, + + { + 55, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, 491, -337, + + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337 + }, + + { + 55, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, 492, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338 + }, + + { + 55, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + + -339, -339, 493, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339 + + }, + + { + 55, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, 494, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340 + }, + + { + 55, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, 495, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, 496, 497, + 497, 497, 497, 497, 497, 497, 497, 497, -341, -341, + -341, -341, -341, -341, -341, 495, 495, 495, 495, 495, + + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341 + }, + + { + 55, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, 498, -342, -342, -342, -342, -342, -342, -342, + + -342, -342, -342, -342, -342, -342, -342, -342, 496, 497, + 497, 497, 497, 497, 497, 497, 497, 497, -342, -342, + -342, -342, -342, -342, -342, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342 + }, + + { + 55, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, 499, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343 + }, + + { + 55, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, 500, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344 + }, + + { + 55, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, 501, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345 + }, + + { + 55, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, 495, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 502, -346, -346, + -346, -346, -346, -346, -346, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346 + }, + + { + 55, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, 503, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -347, -347, + -347, -347, -347, -347, -347, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + + 503, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347 + }, + + { + 55, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, 505, 505, + 505, 505, 505, 505, 505, 505, 505, 505, -348, -348, + + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348 + }, + + { + 55, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, 506, -349, -349, 507, 508, + 508, 508, 508, 508, 508, 508, 508, 508, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, 509, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349 + + }, + + { + 55, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, 506, -350, -350, 510, 510, + 510, 510, 510, 510, 510, 510, 510, 510, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, 511, -350, -350, -350, -350, + + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350 + }, + + { + 55, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, 512, 512, + 512, 512, 512, 512, 512, 512, 512, 512, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351 + }, + + { + 55, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + + -352, -352, -352, -352, -352, 506, -352, -352, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, 513, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352 + }, + + { + 55, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, 506, -353, -353, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, 513, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353 + }, + + { + 55, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, 515, 516, + 516, 516, 516, 516, 516, 516, 516, 516, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354 + }, + + { + 55, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, 517, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, 518, 518, + + 518, 518, 518, 518, 518, 518, 518, 518, -355, -355, + -355, -355, -355, -355, -355, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355 + }, + + { + 55, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, 506, -356, -356, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, 509, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356 + }, + + { + 55, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, 506, -357, -357, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + + -357, -357, -357, -357, -357, 509, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357 + }, + + { + 55, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, 519, 520, + 520, 520, 520, 520, 520, 520, 520, 520, -358, -358, + + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358 + }, + + { + 55, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + + -359, -359, 517, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, 521, 522, + 522, 522, 522, 522, 522, 522, 522, 522, -359, -359, + -359, -359, -359, -359, -359, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359 + + }, + + { + 55, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, 523, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, 524, 524, + 524, 524, 524, 524, 524, 524, 524, 524, -360, -360, + -360, -360, -360, -360, -360, 523, 523, 523, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, + 523, -360, -360, -360, -360, -360, -360, -360, -360, -360, + + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360 + }, + + { + 55, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361 + }, + + { + 55, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362 + }, + + { + 55, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363 + }, + + { + 55, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364 + }, + + { + 55, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365 + }, + + { + 55, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366 + }, + + { + 55, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367 + }, + + { + 55, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, 525, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, -368, -368, + + -368, -368, -368, -368, -368, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368 + }, + + { + 55, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, 527, 527, + 527, 527, 527, 527, 527, 527, 527, 527, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369 + + }, + + { + 55, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, 528, -370, -370, 529, 530, + 530, 530, 530, 530, 530, 530, 530, 530, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, 531, -370, -370, -370, -370, + + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370 + }, + + { + 55, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, 528, -371, -371, 532, 532, + 532, 532, 532, 532, 532, 532, 532, 532, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, 533, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371 + }, + + { + 55, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + + -372, -372, -372, -372, -372, -372, -372, -372, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372 + }, + + { + 55, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, 528, -373, -373, 529, 529, + 529, 529, 529, 529, 529, 529, 529, 529, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, 535, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373 + }, + + { + 55, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, 536, 537, + 537, 537, 537, 537, 537, 537, 537, 537, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374 + }, + + { + 55, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, 538, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, 539, 539, + + 539, 539, 539, 539, 539, 539, 539, 539, -375, -375, + -375, -375, -375, -375, -375, 538, 538, 538, 538, 538, + 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, + 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, + 538, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375 + }, + + { + 55, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, 528, -376, -376, 529, 529, + 529, 529, 529, 529, 529, 529, 529, 529, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, 531, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376 + }, + + { + 55, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, 540, 541, + 541, 541, 541, 541, 541, 541, 541, 541, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377 + }, + + { + 55, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, 542, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, 543, 544, + 544, 544, 544, 544, 544, 544, 544, 544, -378, -378, + + -378, -378, -378, -378, -378, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378 + }, + + { + 55, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + + -379, -379, 542, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, -379, -379, + -379, -379, -379, -379, -379, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379 + + }, + + { + 55, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380 + }, + + { + 55, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381 + }, + + { + 55, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382 + }, + + { + 55, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383 + }, + + { + 55, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384 + }, + + { + 55, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385 + }, + + { + 55, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, 546, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386 + }, + + { + 55, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, 547, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387 + }, + + { + 55, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, 548, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388 + }, + + { + 55, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + + -389, -389, 549, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389 + + }, + + { + 55, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 551, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550 + }, + + { + 55, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, 391, 391, + 391, 391, 391, 391, 391, 391, 391, 391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, 235, 235, + + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + 235, 235, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391 + }, + + { + 55, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + + -392, -392, -392, -392, -392, -392, -392, -392, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392 + }, + + { + 55, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393 + }, + + { + 55, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, 241, 241, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + 241, 241, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394 + }, + + { + 55, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, 396, 396, + + 396, 396, 396, 396, 396, 396, 396, 396, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395 + }, + + { + 55, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396 + }, + + { + 55, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, 253, 253, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + 253, 253, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397 + }, + + { + 55, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -398, -398, + + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398 + }, + + { + 55, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399 + + }, + + { + 55, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 552, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 553, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 554, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + }, + + { + 55, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + + }, + + { + 55, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410 + }, + + { + 55, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 410, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 411, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 412, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + }, + + { + 55, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413 + }, + + { + 55, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414 + }, + + { + 55, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, 563, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415 + }, + + { + 55, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, 564, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416 + }, + + { + 55, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, 565, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417 + }, + + { + 55, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + + -418, -418, -418, -418, -418, -418, -418, -418, 566, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418 + }, + + { + 55, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, 567, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419 + + }, + + { + 55, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, 568, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420 + }, + + { + 55, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, 569, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421 + }, + + { + 55, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, 570, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422 + }, + + { + 55, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, 571, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423 + }, + + { + 55, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, 572, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424 + }, + + { + 55, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, 573, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425 + }, + + { + 55, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, 574, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426 + }, + + { + 55, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, 575, -427, -427, -427, -427, -427, + + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427 + }, + + { + 55, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + + -428, -428, -428, -428, -428, -428, -428, -428, -428, 576, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428 + }, + + { + 55, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, 577, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429 + + }, + + { + 55, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, 578, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430 + }, + + { + 55, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + + -431, -431, -431, 579, -431, -431, -431, -431, -431, -431, + -431, -431, 580, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431 + }, + + { + 55, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, 581, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432 + }, + + { + 55, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, 582, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433 + }, + + { + 55, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + + -434, -434, 583, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434 + }, + + { + 55, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, 584, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435 + }, + + { + 55, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, 585, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436 + }, + + { + 55, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, 586, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437 + }, + + { + 55, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, 587, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438 + }, + + { + 55, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, 588, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439 + + }, + + { + 55, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, 589, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440 + }, + + { + 55, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, 590, + + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441 + }, + + { + 55, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, 591, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442 + }, + + { + 55, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, 592, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443 + }, + + { + 55, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, 593, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444 + }, + + { + 55, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, 594, -445, -445, -445, -445, + + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, 595, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445 + }, + + { + 55, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, 596, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446 + }, + + { + 55, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, 597, -447, -447, -447, -447, -447, -447, -447, + + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447 + }, + + { + 55, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, 598, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448 + }, + + { + 55, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, 599, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449 + + }, + + { + 55, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, 600, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450 + }, + + { + 55, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, 601, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451 + }, + + { + 55, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, 602, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452 + }, + + { + 55, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, 603, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453 + }, + + { + 55, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + 604, -454, -454, -454, -454, -454, -454, -454, -454, -454, + + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454 + }, + + { + 55, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, 605, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455 + }, + + { + 55, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, 606, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456 + }, + + { + 55, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, 607, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457 + }, + + { + 55, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + + -458, -458, -458, -458, -458, 608, 609, -458, -458, 610, + -458, -458, -458, -458, -458, -458, -458, -458, -458, 611, + -458, -458, 612, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458 + }, + + { + 55, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, 613, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459 + + }, + + { + 55, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, 614, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460 + }, + + { + 55, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, 615, + + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461 + }, + + { + 55, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, 616, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462 + }, + + { + 55, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, 617, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463 + }, + + { + 55, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, 618, -464, -464, -464, -464, -464, -464, -464, + + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464 + }, + + { + 55, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, 619, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465 + }, + + { + 55, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, 620, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466 + }, + + { + 55, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, 621, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467 + }, + + { + 55, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, 622, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468 + }, + + { + 55, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + 623, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469 + + }, + + { + 55, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, 624, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, 625, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470 + }, + + { + 55, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + + 626, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, 627, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471 + }, + + { + 55, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, 628, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472 + }, + + { + 55, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, 629, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473 + }, + + { + 55, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, 630, + + -474, -474, -474, 631, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474 + }, + + { + 55, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + 632, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475 + }, + + { + 55, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, 633, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, 634, + 635, -476, -476, 636, -476, 637, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476 + }, + + { + 55, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, 638, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477 + }, + + { + 55, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, 639, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478 + }, + + { + 55, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, 640, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + 641, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479 + + }, + + { + 55, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, 642, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480 + }, + + { + 55, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + 643, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481 + }, + + { + 55, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, 644, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482 + }, + + { + 55, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, 645, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483 + }, + + { + 55, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, 646, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484 + }, + + { + 55, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, 647, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485 + }, + + { + 55, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, 648, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486 + }, + + { + 55, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, 649, -487, + + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487 + }, + + { + 55, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + + -488, -488, -488, -488, -488, 650, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488 + }, + + { + 55, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, 651, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489 + + }, + + { + 55, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, 652, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490 + }, + + { + 55, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, 653, + + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491 + }, + + { + 55, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, 654, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492 + }, + + { + 55, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, 655, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493 + }, + + { + 55, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, 656, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494 + }, + + { + 55, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, 657, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495 + }, + + { + 55, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, 658, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, 659, 660, + 660, 660, 660, 660, 660, 660, 660, 660, -496, -496, + -496, -496, -496, -496, -496, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496 + }, + + { + 55, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, 661, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, 659, 660, + 660, 660, 660, 660, 660, 660, 660, 660, -497, -497, + -497, -497, -497, -497, -497, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + + 661, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497 + }, + + { + 55, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, 662, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498 + }, + + { + 55, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + + -499, -499, 663, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499 + + }, + + { + 55, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, 664, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500 + }, + + { + 55, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, 665, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501 + }, + + { + 55, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, 658, -502, -502, -502, -502, -502, -502, -502, + + -502, -502, -502, -502, -502, -502, -502, -502, 666, 666, + 666, 666, 666, 666, 666, 666, 666, 666, -502, -502, + -502, -502, -502, -502, -502, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502 + }, + + { + 55, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, 667, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503 + }, + + { + 55, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, 668, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, 669, 669, + 669, 669, 669, 669, 669, 669, 669, 669, -504, -504, + -504, -504, -504, -504, -504, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504 + }, + + { + 55, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, 670, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, 671, 671, + + 671, 671, 671, 671, 671, 671, 671, 671, -505, -505, + -505, -505, -505, -505, -505, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, + 670, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505 + }, + + { + 55, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506 + }, + + { + 55, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, 673, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + + -507, -507, -507, -507, -507, 674, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507 + }, + + { + 55, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, 673, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, 675, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508 + }, + + { + 55, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509 + + }, + + { + 55, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, 673, -510, -510, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, 678, -510, -510, -510, -510, + + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510 + }, + + { + 55, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, 679, 680, + 680, 680, 680, 680, 680, 680, 680, 680, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511 + }, + + { + 55, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, 681, -512, -512, -512, -512, -512, -512, -512, + + -512, -512, -512, -512, -512, -512, -512, -512, 682, 682, + 682, 682, 682, 682, 682, 682, 682, 682, -512, -512, + -512, -512, -512, -512, -512, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512 + }, + + { + 55, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, 683, 684, + 684, 684, 684, 684, 684, 684, 684, 684, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513 + }, + + { + 55, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, 673, -514, -514, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, 674, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514 + }, + + { + 55, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, 681, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, 685, 686, + + 686, 686, 686, 686, 686, 686, 686, 686, -515, -515, + -515, -515, -515, -515, -515, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515 + }, + + { + 55, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, 687, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, -516, -516, + -516, -516, -516, -516, -516, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, + 687, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516 + }, + + { + 55, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, 689, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517 + }, + + { + 55, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, 690, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, 691, 691, + 691, 691, 691, 691, 691, 691, 691, 691, -518, -518, + + -518, -518, -518, -518, -518, 690, 690, 690, 690, 690, + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518 + }, + + { + 55, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + + -519, -519, 681, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, 692, 693, + 693, 693, 693, 693, 693, 693, 693, 693, -519, -519, + -519, -519, -519, -519, -519, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519 + + }, + + { + 55, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, 694, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, 695, 695, + 695, 695, 695, 695, 695, 695, 695, 695, -520, -520, + -520, -520, -520, -520, -520, 694, 694, 694, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, + 694, -520, -520, -520, -520, -520, -520, -520, -520, -520, + + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520 + }, + + { + 55, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, 690, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, 696, 697, + 697, 697, 697, 697, 697, 697, 697, 697, -521, -521, + -521, -521, -521, -521, -521, 690, 690, 690, 690, 690, + + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521 + }, + + { + 55, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, 698, -522, -522, -522, -522, -522, -522, -522, + + -522, -522, -522, -522, -522, -522, -522, -522, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, -522, -522, + -522, -522, -522, -522, -522, 698, 698, 698, 698, 698, + 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 698, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522 + }, + + { + 55, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, 700, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523 + }, + + { + 55, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, 701, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, 691, 691, + 691, 691, 691, 691, 691, 691, 691, 691, -524, -524, + -524, -524, -524, -524, -524, 701, 701, 701, 701, 701, + 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, + + 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, + 701, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524 + }, + + { + 55, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, 702, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525 + }, + + { + 55, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, 703, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, -526, -526, + -526, -526, -526, -526, -526, 703, 703, 703, 703, 703, + 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, + 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, + 703, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526 + }, + + { + 55, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, 705, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, 706, 706, + 706, 706, 706, 706, 706, 706, 706, 706, -527, -527, + -527, -527, -527, -527, -527, 705, 705, 705, 705, 705, + 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, + 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, + + 705, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527 + }, + + { + 55, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, 707, 707, + 707, 707, 707, 707, 707, 707, 707, 707, -528, -528, + + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528 + }, + + { + 55, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, 708, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, 709, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529 + + }, + + { + 55, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, 708, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, 710, -530, -530, -530, -530, + + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530 + }, + + { + 55, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, 711, 711, + 711, 711, 711, 711, 711, 711, 711, 711, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531 + }, + + { + 55, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + + -532, -532, -532, -532, -532, 708, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, 712, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532 + }, + + { + 55, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, 713, 714, + 714, 714, 714, 714, 714, 714, 714, 714, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533 + }, + + { + 55, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, 715, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, -534, -534, + -534, -534, -534, -534, -534, 715, 715, 715, 715, 715, + 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, + + 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, + 715, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534 + }, + + { + 55, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, 717, 718, + + 718, 718, 718, 718, 718, 718, 718, 718, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535 + }, + + { + 55, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, 719, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, 720, 721, + 721, 721, 721, 721, 721, 721, 721, 721, -536, -536, + -536, -536, -536, -536, -536, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536 + }, + + { + 55, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, 719, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, 722, 722, + 722, 722, 722, 722, 722, 722, 722, 722, -537, -537, + -537, -537, -537, -537, -537, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + + 719, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537 + }, + + { + 55, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, 723, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538 + }, + + { + 55, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + + -539, -539, 724, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, 725, 725, + 725, 725, 725, 725, 725, 725, 725, 725, -539, -539, + -539, -539, -539, -539, -539, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, + 724, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539 + + }, + + { + 55, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, 726, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, 727, 728, + 728, 728, 728, 728, 728, 728, 728, 728, -540, -540, + -540, -540, -540, -540, -540, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, -540, -540, -540, -540, -540, -540, -540, -540, -540, + + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540 + }, + + { + 55, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, 726, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, 729, 729, + 729, 729, 729, 729, 729, 729, 729, 729, -541, -541, + -541, -541, -541, -541, -541, 726, 726, 726, 726, 726, + + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541 + }, + + { + 55, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, 730, -542, -542, -542, -542, -542, -542, -542, + + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542 + }, + + { + 55, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, 731, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, 732, 733, + 733, 733, 733, 733, 733, 733, 733, 733, -543, -543, + -543, -543, -543, -543, -543, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543 + }, + + { + 55, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, 731, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, 734, 734, + 734, 734, 734, 734, 734, 734, 734, 734, -544, -544, + -544, -544, -544, -544, -544, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544 + }, + + { + 55, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, 735, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, 725, 725, + + 725, 725, 725, 725, 725, 725, 725, 725, -545, -545, + -545, -545, -545, -545, -545, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545 + }, + + { + 55, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, 736, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546 + }, + + { + 55, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, 737, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547 + }, + + { + 55, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548 + }, + + { + 55, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549 + + }, + + { + 55, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 551, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550 + }, + + { + 55, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, 550, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551 + }, + + { + 55, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552 + }, + + { + 55, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 552, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 553, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 554, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400 + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + + }, + + { + 55, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + }, + + { + 55, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, 742, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563 + }, + + { + 55, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + + -564, -564, -564, -564, -564, -564, -564, -564, 743, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564 + }, + + { + 55, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, 744, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565 + }, + + { + 55, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, 745, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566 + }, + + { + 55, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, 746, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567 + }, + + { + 55, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, 747, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568 + }, + + { + 55, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, 748, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569 + + }, + + { + 55, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, 749, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570 + }, + + { + 55, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, 750, -571, + + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571 + }, + + { + 55, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, 751, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572 + }, + + { + 55, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, 752, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573 + }, + + { + 55, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, 753, -574, -574, -574, -574, -574, -574, + + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574 + }, + + { + 55, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575 + }, + + { + 55, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576 + }, + + { + 55, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, 754, + 755, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577 + }, + + { + 55, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578 + }, + + { + 55, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579 + + }, + + { + 55, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580 + }, + + { + 55, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581 + }, + + { + 55, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582 + }, + + { + 55, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583 + }, + + { + 55, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, 756, + + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584 + }, + + { + 55, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, 757, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585 + }, + + { + 55, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586 + }, + + { + 55, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587 + }, + + { + 55, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588 + }, + + { + 55, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589 + + }, + + { + 55, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590 + }, + + { + 55, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591 + }, + + { + 55, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592 + }, + + { + 55, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, 758, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593 + }, + + { + 55, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, 759, 760, -594, -594, 761, + -594, -594, -594, -594, -594, -594, -594, -594, -594, 762, + + -594, -594, 763, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594 + }, + + { + 55, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, 764, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595 + }, + + { + 55, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, 765, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596 + }, + + { + 55, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597 + }, + + { + 55, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, 766, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598 + }, + + { + 55, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + + -599, -599, 767, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, + 767, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599 + + }, + + { + 55, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, 768, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600 + }, + + { + 55, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + + -601, -601, -601, -601, -601, -601, -601, -601, -601, 769, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601 + }, + + { + 55, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, 770, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602 + }, + + { + 55, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + 771, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603 + }, + + { + 55, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, 772, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + 773, -604, -604, 774, -604, -604, -604, -604, -604, -604, + + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604 + }, + + { + 55, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, 775, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605 + }, + + { + 55, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, 776, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606 + }, + + { + 55, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, 777, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607 + }, + + { + 55, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, 778, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608 + }, + + { + 55, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, 779, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609 + + }, + + { + 55, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, 780, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610 + }, + + { + 55, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, 781, -611, -611, -611, + + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611 + }, + + { + 55, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, 782, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612 + }, + + { + 55, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + 783, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613 + }, + + { + 55, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, 784, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614 + }, + + { + 55, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, 785, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615 + }, + + { + 55, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, 786, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616 + }, + + { + 55, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, 787, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617 + }, + + { + 55, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + + -618, -618, -618, -618, -618, -618, -618, -618, -618, 788, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618 + }, + + { + 55, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, 789, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619 + + }, + + { + 55, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, 790, -620, -620, -620, -620, 791, -620, -620, + -620, -620, -620, 792, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620 + }, + + { + 55, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, 793, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621 + }, + + { + 55, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, 794, -622, -622, -622, -622, -622, -622, -622, + + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622 + }, + + { + 55, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623 + }, + + { + 55, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + + -624, -624, -624, 795, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624 + }, + + { + 55, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, 796, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625 + }, + + { + 55, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, 797, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626 + }, + + { + 55, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, 798, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627 + }, + + { + 55, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, 799, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628 + }, + + { + 55, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, 800, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629 + + }, + + { + 55, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, 801, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630 + }, + + { + 55, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, 802, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631 + }, + + { + 55, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, 803, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632 + }, + + { + 55, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, 804, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633 + }, + + { + 55, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + 805, -634, -634, -634, -634, -634, -634, -634, -634, -634, + + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634 + }, + + { + 55, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, 806, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635 + }, + + { + 55, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, 807, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636 + }, + + { + 55, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, 808, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637 + }, + + { + 55, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + + -638, -638, -638, -638, -638, -638, -638, -638, -638, 809, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638 + }, + + { + 55, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, 810, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639 + + }, + + { + 55, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, 811, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640 + }, + + { + 55, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + + -641, -641, -641, -641, -641, -641, -641, -641, -641, 812, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641 + }, + + { + 55, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, 813, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642 + }, + + { + 55, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, 814, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643 + }, + + { + 55, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, 815, -644, -644, -644, -644, -644, -644, -644, -644, + + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644 + }, + + { + 55, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, 816, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645 + }, + + { + 55, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + 817, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646 + }, + + { + 55, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, 818, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647 + }, + + { + 55, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, 819, 819, + 819, 819, 819, 819, 819, 819, 819, 819, -648, -648, + + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648 + }, + + { + 55, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, 820, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649 + + }, + + { + 55, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, 821, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650 + }, + + { + 55, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + + -651, -651, -651, -651, -651, -651, 822, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651 + }, + + { + 55, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, 823, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652 + }, + + { + 55, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, 824, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653 + }, + + { + 55, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, 825, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654 + }, + + { + 55, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, 826, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655 + }, + + { + 55, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, 827, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656 + }, + + { + 55, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, 828, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657 + }, + + { + 55, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, 829, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658 + }, + + { + 55, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + + -659, -659, 830, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, 831, 832, + 832, 832, 832, 832, 832, 832, 832, 832, -659, -659, + -659, -659, -659, -659, -659, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659 + + }, + + { + 55, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, 833, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, 831, 832, + 832, 832, 832, 832, 832, 832, 832, 832, -660, -660, + -660, -660, -660, -660, -660, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, -660, -660, -660, -660, -660, -660, -660, -660, -660, + + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660 + }, + + { + 55, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, 834, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661 + }, + + { + 55, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, 835, -662, -662, -662, -662, -662, -662, -662, + + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662 + }, + + { + 55, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, 836, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663 + }, + + { + 55, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, 837, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664 + }, + + { + 55, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, 838, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665 + }, + + { + 55, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, 830, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, 831, 831, + 831, 831, 831, 831, 831, 831, 831, 831, -666, -666, + -666, -666, -666, -666, -666, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666 + }, + + { + 55, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, 839, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667 + }, + + { + 55, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, 840, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668 + }, + + { + 55, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + + -669, -669, 841, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, 842, 842, + 842, 842, 842, 842, 842, 842, 842, 842, -669, -669, + -669, -669, -669, -669, -669, 841, 841, 841, 841, 841, + 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, + 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, + 841, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669 + + }, + + { + 55, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, 843, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670 + }, + + { + 55, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, 844, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, 845, 845, + 845, 845, 845, 845, 845, 845, 845, 845, -671, -671, + -671, -671, -671, -671, -671, 844, 844, 844, 844, 844, + + 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, + 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, + 844, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671 + }, + + { + 55, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, 846, -672, -672, -672, -672, -672, -672, -672, + + -672, -672, -672, -672, -672, -672, -672, -672, 847, 847, + 847, 847, 847, 847, 847, 847, 847, 847, -672, -672, + -672, -672, -672, -672, -672, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672 + }, + + { + 55, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673 + }, + + { + 55, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, 849, 849, + 849, 849, 849, 849, 849, 849, 849, 849, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674 + }, + + { + 55, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, 849, 850, + + 850, 850, 850, 850, 850, 850, 850, 850, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675 + }, + + { + 55, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, 851, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, 852, 852, + 852, 852, 852, 852, 852, 852, 852, 852, -676, -676, + -676, -676, -676, -676, -676, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676 + }, + + { + 55, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, 853, + 853, 853, 853, 853, 853, 853, 853, 853, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677 + }, + + { + 55, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, 849, 854, + 854, 854, 854, 854, 854, 854, 854, 854, -678, -678, + + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678 + }, + + { + 55, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + + -679, -679, 851, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, 852, 855, + 855, 855, 855, 855, 855, 855, 855, 855, -679, -679, + -679, -679, -679, -679, -679, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679 + + }, + + { + 55, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, 856, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, 857, 857, + 857, 857, 857, 857, 857, 857, 857, 857, -680, -680, + -680, -680, -680, -680, -680, 856, 856, 856, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, + 856, -680, -680, -680, -680, -680, -680, -680, -680, -680, + + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680 + }, + + { + 55, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, 858, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681 + }, + + { + 55, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, 859, -682, -682, -682, -682, -682, -682, -682, + + -682, -682, -682, -682, -682, -682, -682, -682, 860, 860, + 860, 860, 860, 860, 860, 860, 860, 860, -682, -682, + -682, -682, -682, -682, -682, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682 + }, + + { + 55, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, 851, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, 852, 861, + 861, 861, 861, 861, 861, 861, 861, 861, -683, -683, + -683, -683, -683, -683, -683, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683 + }, + + { + 55, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, 862, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 863, -684, -684, + -684, -684, -684, -684, -684, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684 + }, + + { + 55, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, 859, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, 860, 864, + + 864, 864, 864, 864, 864, 864, 864, 864, -685, -685, + -685, -685, -685, -685, -685, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685 + }, + + { + 55, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, 865, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, -686, -686, + -686, -686, -686, -686, -686, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, + 865, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686 + }, + + { + 55, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, 867, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687 + }, + + { + 55, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, 868, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, 860, 860, + 860, 860, 860, 860, 860, 860, 860, 860, -688, -688, + + -688, -688, -688, -688, -688, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688 + }, + + { + 55, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + + -689, -689, 869, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689 + + }, + + { + 55, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, 870, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690 + }, + + { + 55, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, 871, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, -691, -691, + -691, -691, -691, -691, -691, 871, 871, 871, 871, 871, + + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691 + }, + + { + 55, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, 859, -692, -692, -692, -692, -692, -692, -692, + + -692, -692, -692, -692, -692, -692, -692, -692, 860, 873, + 873, 873, 873, 873, 873, 873, 873, 873, -692, -692, + -692, -692, -692, -692, -692, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692 + }, + + { + 55, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, 874, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, -693, -693, + -693, -693, -693, -693, -693, 874, 874, 874, 874, 874, + 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, + 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, + 874, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693 + }, + + { + 55, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, 876, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694 + }, + + { + 55, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, 877, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, 860, 860, + + 860, 860, 860, 860, 860, 860, 860, 860, -695, -695, + -695, -695, -695, -695, -695, 877, 877, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, + 877, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695 + }, + + { + 55, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, 871, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, 872, 878, + 878, 878, 878, 878, 878, 878, 878, 878, -696, -696, + -696, -696, -696, -696, -696, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696 + }, + + { + 55, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, 879, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, 880, 880, + 880, 880, 880, 880, 880, 880, 880, 880, -697, -697, + -697, -697, -697, -697, -697, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, + + 879, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697 + }, + + { + 55, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, 881, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698 + }, + + { + 55, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + + -699, -699, 882, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, -699, -699, + -699, -699, -699, -699, -699, 882, 882, 882, 882, 882, + 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 882, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699 + + }, + + { + 55, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, 883, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700 + }, + + { + 55, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, 884, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701 + }, + + { + 55, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, 885, -702, -702, -702, -702, -702, -702, -702, + + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702 + }, + + { + 55, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, 886, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703 + }, + + { + 55, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, 887, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, 888, 888, + 888, 888, 888, 888, 888, 888, 888, 888, -704, -704, + -704, -704, -704, -704, -704, 887, 887, 887, 887, 887, + 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, + + 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, + 887, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704 + }, + + { + 55, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, 889, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705 + }, + + { + 55, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, 890, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, 891, 891, + 891, 891, 891, 891, 891, 891, 891, 891, -706, -706, + -706, -706, -706, -706, -706, 890, 890, 890, 890, 890, + 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, + 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, + 890, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706 + }, + + { + 55, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, 892, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, -707, -707, + -707, -707, -707, -707, -707, 892, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, + + 892, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707 + }, + + { + 55, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, -708, -708, + + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708 + }, + + { + 55, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, 895, 895, + 895, 895, 895, 895, 895, 895, 895, 895, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709 + + }, + + { + 55, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, 896, 896, + 896, 896, 896, 896, 896, 896, 896, 896, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710 + }, + + { + 55, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, 897, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, 898, 898, + 898, 898, 898, 898, 898, 898, 898, 898, -711, -711, + -711, -711, -711, -711, -711, 897, 897, 897, 897, 897, + + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711 + }, + + { + 55, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + + -712, -712, -712, -712, -712, -712, -712, -712, 899, 899, + 899, 899, 899, 899, 899, 899, 899, 899, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712 + }, + + { + 55, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, 900, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, 901, 901, + 901, 901, 901, 901, 901, 901, 901, 901, -713, -713, + -713, -713, -713, -713, -713, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713 + }, + + { + 55, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, 900, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, -714, -714, + -714, -714, -714, -714, -714, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714 + }, + + { + 55, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, 903, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715 + }, + + { + 55, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, 904, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, 905, 905, + 905, 905, 905, 905, 905, 905, 905, 905, -716, -716, + -716, -716, -716, -716, -716, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + + -716, -716, -716, -716, -716, -716, -716, -716 + }, + + { + 55, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, 906, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 907, -717, -717, + -717, -717, -717, -717, -717, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + + 906, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717 + }, + + { + 55, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, 906, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, 908, 908, + 908, 908, 908, 908, 908, 908, 908, 908, -718, -718, + + -718, -718, -718, -718, -718, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718 + }, + + { + 55, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + + -719, -719, 909, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719 + + }, + + { + 55, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, 910, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, 911, 911, + 911, 911, 911, 911, 911, 911, 911, 911, -720, -720, + -720, -720, -720, -720, -720, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, -720, -720, -720, -720, -720, -720, -720, -720, -720, + + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720 + }, + + { + 55, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, 910, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, 912, 912, + 912, 912, 912, 912, 912, 912, 912, 912, -721, -721, + -721, -721, -721, -721, -721, 910, 910, 910, 910, 910, + + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721 + }, + + { + 55, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, 913, -722, -722, -722, -722, -722, -722, -722, + + -722, -722, -722, -722, -722, -722, -722, -722, 905, 905, + 905, 905, 905, 905, 905, 905, 905, 905, -722, -722, + -722, -722, -722, -722, -722, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722 + }, + + { + 55, -723, -723, -723, -723, -723, -723, -723, -723, -723, + + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, 914, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723 + }, + + { + 55, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, 915, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724 + }, + + { + 55, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, 916, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, 917, 917, + + 917, 917, 917, 917, 917, 917, 917, 917, -725, -725, + -725, -725, -725, -725, -725, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, + 916, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725 + }, + + { + 55, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, 918, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726 + }, + + { + 55, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, 919, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, 920, 920, + 920, 920, 920, 920, 920, 920, 920, 920, -727, -727, + -727, -727, -727, -727, -727, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + + 919, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727 + }, + + { + 55, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, 919, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, -728, -728, + + -728, -728, -728, -728, -728, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728 + }, + + { + 55, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + + -729, -729, 922, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, 905, 905, + 905, 905, 905, 905, 905, 905, 905, 905, -729, -729, + -729, -729, -729, -729, -729, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729 + + }, + + { + 55, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, 923, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730 + }, + + { + 55, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, 924, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731 + }, + + { + 55, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, 925, -732, -732, -732, -732, -732, -732, -732, + + -732, -732, -732, -732, -732, -732, -732, -732, 926, 926, + 926, 926, 926, 926, 926, 926, 926, 926, -732, -732, + -732, -732, -732, -732, -732, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732 + }, + + { + 55, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, 925, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, 927, 927, + 927, 927, 927, 927, 927, 927, 927, 927, -733, -733, + -733, -733, -733, -733, -733, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733 + }, + + { + 55, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, 928, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, -734, -734, + -734, -734, -734, -734, -734, 928, 928, 928, 928, 928, + 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, + + 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, + 928, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734 + }, + + { + 55, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, 929, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735 + }, + + { + 55, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, 930, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736 + }, + + { + 55, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737 + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739 + + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, 931, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742 + }, + + { + 55, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, 932, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743 + }, + + { + 55, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + + -744, -744, 933, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744 + }, + + { + 55, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, 934, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745 + }, + + { + 55, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, 935, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746 + }, + + { + 55, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, 936, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747 + }, + + { + 55, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + + -748, -748, -748, -748, -748, -748, 937, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748 + }, + + { + 55, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, 938, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749 + + }, + + { + 55, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, 939, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750 + }, + + { + 55, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, 940, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751 + }, + + { + 55, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, 941, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752 + }, + + { + 55, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, 942, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753 + }, + + { + 55, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, 943, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754 + }, + + { + 55, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, 944, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755 + }, + + { + 55, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, 945, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756 + }, + + { + 55, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, 946, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757 + }, + + { + 55, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, 947, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758 + }, + + { + 55, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, 948, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759 + + }, + + { + 55, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, 949, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760 + }, + + { + 55, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + + -761, -761, -761, -761, -761, -761, -761, -761, 950, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761 + }, + + { + 55, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, 951, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762 + }, + + { + 55, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, 952, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763 + }, + + { + 55, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + 953, -764, -764, -764, -764, -764, -764, -764, -764, -764, + + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764 + }, + + { + 55, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, 954, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765 + }, + + { + 55, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, 955, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766 + }, + + { + 55, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, 956, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767 + }, + + { + 55, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, 957, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768 + }, + + { + 55, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, 958, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769 + + }, + + { + 55, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, 959, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770 + }, + + { + 55, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, 960, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + + 961, -771, -771, 962, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771 + }, + + { + 55, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, 963, -772, -772, -772, -772, -772, -772, -772, + + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772 + }, + + { + 55, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, 964, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773 + }, + + { + 55, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, 965, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774 + }, + + { + 55, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, 966, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775 + }, + + { + 55, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, 967, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776 + }, + + { + 55, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, 968, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777 + }, + + { + 55, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, 969, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778 + }, + + { + 55, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, 970, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779 + + }, + + { + 55, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, 971, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780 + }, + + { + 55, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, 972, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781 + }, + + { + 55, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + 973, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782 + }, + + { + 55, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, 974, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + 975, -783, -783, 976, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783 + }, + + { + 55, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, 977, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784 + }, + + { + 55, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, 978, -785, -785, -785, -785, + + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785 + }, + + { + 55, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, 979, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786 + }, + + { + 55, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, 980, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787 + }, + + { + 55, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, 981, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788 + }, + + { + 55, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, 982, -789, + -789, -789, -789, -789, -789, -789, -789, 983, -789, -789, + -789, -789, -789, 984, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789 + + }, + + { + 55, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, 985, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790 + }, + + { + 55, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, 986, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791 + }, + + { + 55, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, 987, -792, -792, -792, -792, -792, -792, -792, + + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792 + }, + + { + 55, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, 988, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793 + }, + + { + 55, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, 989, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794 + }, + + { + 55, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, 990, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795 + }, + + { + 55, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, 991, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796 + }, + + { + 55, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, 992, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, 993, -797, -797, -797, -797, -797, -797, -797, -797, + + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797 + }, + + { + 55, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, 994, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798 + }, + + { + 55, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, 995, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799 + + }, + + { + 55, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, 996, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800 + }, + + { + 55, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, 997, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801 + }, + + { + 55, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, 998, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802 + }, + + { + 55, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, 999, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803 + }, + + { + 55, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, 1000, -804, -804, -804, + + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804 + }, + + { + 55, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + 1001, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805 + }, + + { + 55, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, 1002, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806 + }, + + { + 55, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, 1003, -807, -807, -807, -807, -807, -807, + + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807 + }, + + { + 55, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, 1004, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808 + }, + + { + 55, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, 1005, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809 + + }, + + { + 55, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, 1006, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810 + }, + + { + 55, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, 1007, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811 + }, + + { + 55, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, 1008, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812 + }, + + { + 55, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, 1009, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813 + }, + + { + 55, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, 1010, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814 + }, + + { + 55, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, 1011, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815 + }, + + { + 55, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, 1012, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816 + }, + + { + 55, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, 1013, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + + 1013, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817 + }, + + { + 55, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + + -818, -818, -818, -818, -818, -818, -818, -818, -818, 1014, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818 + }, + + { + 55, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819 + + }, + + { + 55, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, 1016, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820 + }, + + { + 55, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, 1017, + + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821 + }, + + { + 55, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, 1018, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822 + }, + + { + 55, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, 1019, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823 + }, + + { + 55, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + + -824, -824, -824, 1020, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824 + }, + + { + 55, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, 1021, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825 + }, + + { + 55, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826 + }, + + { + 55, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827 + }, + + { + 55, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828 + }, + + { + 55, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829 + + }, + + { + 55, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830 + }, + + { + 55, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831 + }, + + { + 55, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832 + }, + + { + 55, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833 + }, + + { + 55, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834 + }, + + { + 55, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835 + }, + + { + 55, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836 + }, + + { + 55, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837 + }, + + { + 55, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838 + }, + + { + 55, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839 + + }, + + { + 55, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840 + }, + + { + 55, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841 + }, + + { + 55, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842 + }, + + { + 55, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843 + }, + + { + 55, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844 + }, + + { + 55, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845 + }, + + { + 55, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846 + }, + + { + 55, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847 + }, + + { + 55, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848 + }, + + { + 55, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849 + + }, + + { + 55, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850 + }, + + { + 55, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851 + }, + + { + 55, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852 + }, + + { + 55, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853 + }, + + { + 55, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854 + }, + + { + 55, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855 + }, + + { + 55, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856 + }, + + { + 55, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857 + }, + + { + 55, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858 + }, + + { + 55, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859 + + }, + + { + 55, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860 + }, + + { + 55, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861 + }, + + { + 55, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862 + }, + + { + 55, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863 + }, + + { + 55, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864 + }, + + { + 55, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865 + }, + + { + 55, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866 + }, + + { + 55, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867 + }, + + { + 55, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868 + }, + + { + 55, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869 + + }, + + { + 55, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870 + }, + + { + 55, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871 + }, + + { + 55, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872 + }, + + { + 55, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873 + }, + + { + 55, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874 + }, + + { + 55, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875 + }, + + { + 55, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876 + }, + + { + 55, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877 + }, + + { + 55, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878 + }, + + { + 55, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879 + + }, + + { + 55, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880 + }, + + { + 55, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881 + }, + + { + 55, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882 + }, + + { + 55, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883 + }, + + { + 55, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884 + }, + + { + 55, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885 + }, + + { + 55, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886 + }, + + { + 55, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887 + }, + + { + 55, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888 + }, + + { + 55, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889 + + }, + + { + 55, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890 + }, + + { + 55, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891 + }, + + { + 55, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892 + }, + + { + 55, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893 + }, + + { + 55, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894 + }, + + { + 55, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895 + }, + + { + 55, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896 + }, + + { + 55, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897 + }, + + { + 55, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898 + }, + + { + 55, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899 + + }, + + { + 55, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900 + }, + + { + 55, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901 + }, + + { + 55, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902 + }, + + { + 55, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903 + }, + + { + 55, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904 + }, + + { + 55, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905 + }, + + { + 55, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906 + }, + + { + 55, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907 + }, + + { + 55, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908 + }, + + { + 55, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909 + + }, + + { + 55, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910 + }, + + { + 55, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911 + }, + + { + 55, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912 + }, + + { + 55, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913 + }, + + { + 55, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914 + }, + + { + 55, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915 + }, + + { + 55, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916 + }, + + { + 55, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917 + }, + + { + 55, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918 + }, + + { + 55, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919 + + }, + + { + 55, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920 + }, + + { + 55, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921 + }, + + { + 55, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922 + }, + + { + 55, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923 + }, + + { + 55, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924 + }, + + { + 55, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925 + }, + + { + 55, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926 + }, + + { + 55, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927 + }, + + { + 55, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928 + }, + + { + 55, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929 + + }, + + { + 55, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930 + }, + + { + 55, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, 1022, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931 + }, + + { + 55, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, 1023, -932, -932, -932, -932, -932, -932, -932, + + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932 + }, + + { + 55, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, 1024, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933 + }, + + { + 55, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + + -934, -934, -934, 1025, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934 + }, + + { + 55, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, 1026, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935 + }, + + { + 55, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, 1027, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936 + }, + + { + 55, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, 1028, -937, -937, -937, -937, -937, -937, + + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937 + }, + + { + 55, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, 1029, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938 + }, + + { + 55, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, 1030, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939 + + }, + + { + 55, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, 1031, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940 + }, + + { + 55, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, 1032, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941 + }, + + { + 55, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, 1033, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942 + }, + + { + 55, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, 1034, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943 + }, + + { + 55, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, 1035, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944 + }, + + { + 55, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, 1036, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945 + }, + + { + 55, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, 1037, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946 + }, + + { + 55, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, 1038, -947, -947, -947, -947, -947, -947, + + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947 + }, + + { + 55, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, 1039, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948 + }, + + { + 55, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, 1040, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949 + + }, + + { + 55, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, 1041, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950 + }, + + { + 55, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, 1042, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951 + }, + + { + 55, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + 1043, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952 + }, + + { + 55, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, 1044, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953 + }, + + { + 55, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + + -954, -954, -954, 1045, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954 + }, + + { + 55, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, 1046, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955 + }, + + { + 55, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, 1047, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956 + }, + + { + 55, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957 + }, + + { + 55, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, 1048, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958 + }, + + { + 55, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, 1049, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959 + + }, + + { + 55, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, 1050, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960 + }, + + { + 55, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961 + }, + + { + 55, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962 + }, + + { + 55, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, 1051, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963 + }, + + { + 55, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, 1052, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964 + }, + + { + 55, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, 1053, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965 + }, + + { + 55, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, 1054, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966 + }, + + { + 55, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967 + }, + + { + 55, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968 + }, + + { + 55, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + + -969, -969, 1055, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969 + + }, + + { + 55, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, 1056, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970 + }, + + { + 55, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, 1057, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971 + }, + + { + 55, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, 1058, -972, -972, -972, -972, -972, -972, -972, + + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972 + }, + + { + 55, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, 1059, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + 1060, -973, -973, 1061, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973 + }, + + { + 55, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, 1062, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974 + }, + + { + 55, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, 1063, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975 + }, + + { + 55, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, 1064, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976 + }, + + { + 55, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, 1065, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977 + }, + + { + 55, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + + -978, -978, -978, -978, -978, -978, 1066, -978, -978, -978, + -978, -978, 1067, -978, -978, -978, 1068, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, 1069, 1070, + 1071, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978 + }, + + { + 55, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, 1072, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979 + + }, + + { + 55, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, 1073, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980 + }, + + { + 55, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, 1074, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981 + }, + + { + 55, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, 1075, -982, -982, -982, -982, -982, -982, -982, + + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982 + }, + + { + 55, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, 1076, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983 + }, + + { + 55, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, 1077, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 1078, -984, + + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984 + }, + + { + 55, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, 1079, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985 + }, + + { + 55, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, 1080, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986 + }, + + { + 55, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, 1081, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987 + }, + + { + 55, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, 1082, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988 + }, + + { + 55, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + + -989, -989, 1083, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989 + + }, + + { + 55, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, 1084, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990 + }, + + { + 55, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991 + }, + + { + 55, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, 1085, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992 + }, + + { + 55, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993 + }, + + { + 55, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994 + }, + + { + 55, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + 1086, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995 + }, + + { + 55, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996 + }, + + { + 55, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997 + }, + + { + 55, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998 + }, + + { + 55, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + + -999, -999, 1087, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999 + + }, + + { + 55,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000, 1088,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000 + }, + + { + 55,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001, 1089,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001 + }, + + { + 55,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002, 1090,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002 + }, + + { + 55,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003, 1091,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003 + }, + + { + 55,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + + -1004,-1004,-1004,-1004, 1092,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004 + }, + + { + 55,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005, 1093,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005 + }, + + { + 55,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006, 1094,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006 + }, + + { + 55,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007, 1095,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007 + }, + + { + 55,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008, 1096,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008 + }, + + { + 55,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + + -1009,-1009, 1097,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009 + + }, + + { + 55,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010, 1098,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010 + }, + + { + 55,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011 + }, + + { + 55,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012 + }, + + { + 55,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013, 1099,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013 + }, + + { + 55,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014, 1100,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014 + }, + + { + 55,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, 1101, 1101, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015 + }, + + { + 55,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016, 1102,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016 + }, + + { + 55,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017 + }, + + { + 55,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + 1103,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018 + }, + + { + 55,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + + -1019,-1019, 1104,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019 + + }, + + { + 55,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + 1105,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020 + }, + + { + 55,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021 + }, + + { + 55,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022 + }, + + { + 55,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023 + }, + + { + 55,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024 + }, + + { + 55,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025 + }, + + { + 55,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026 + }, + + { + 55,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027 + }, + + { + 55,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028 + }, + + { + 55,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029 + + }, + + { + 55,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030 + }, + + { + 55,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031 + }, + + { + 55,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032 + }, + + { + 55,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033 + }, + + { + 55,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034 + }, + + { + 55,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035 + }, + + { + 55,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036 + }, + + { + 55,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037 + }, + + { + 55,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038 + }, + + { + 55,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039 + + }, + + { + 55,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040 + }, + + { + 55,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041 + }, + + { + 55,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042 + }, + + { + 55,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043 + }, + + { + 55,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044 + }, + + { + 55,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045 + }, + + { + 55,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046, 1106,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046 + }, + + { + 55,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047 + }, + + { + 55,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048 + }, + + { + 55,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049 + + }, + + { + 55,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050 + }, + + { + 55,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051 + }, + + { + 55,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052 + }, + + { + 55,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053 + }, + + { + 55,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054 + }, + + { + 55,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055 + }, + + { + 55,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056 + }, + + { + 55,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057 + }, + + { + 55,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058 + }, + + { + 55,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059 + + }, + + { + 55,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060 + }, + + { + 55,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061 + }, + + { + 55,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062 + }, + + { + 55,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063 + }, + + { + 55,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064 + }, + + { + 55,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065, 1107,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065 + }, + + { + 55,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066 + }, + + { + 55,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067 + }, + + { + 55,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068 + }, + + { + 55,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069 + + }, + + { + 55,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070 + }, + + { + 55,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071 + }, + + { + 55,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072 + }, + + { + 55,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073 + }, + + { + 55,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074 + }, + + { + 55,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075 + }, + + { + 55,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076 + }, + + { + 55,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077 + }, + + { + 55,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078 + }, + + { + 55,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079 + + }, + + { + 55,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080 + }, + + { + 55,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081 + }, + + { + 55,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082 + }, + + { + 55,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083 + }, + + { + 55,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084 + }, + + { + 55,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085 + }, + + { + 55,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086 + }, + + { + 55,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087 + }, + + { + 55,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088 + }, + + { + 55,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089 + + }, + + { + 55,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090 + }, + + { + 55,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091 + }, + + { + 55,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092 + }, + + { + 55,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093 + }, + + { + 55,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094 + }, + + { + 55,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095 + }, + + { + 55,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096 + }, + + { + 55,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097 + }, + + { + 55,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098 + }, + + { + 55,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099 + + }, + + { + 55,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100 + }, + + { + 55,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101 + }, + + { + 55,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102, 1108,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102 + }, + + { + 55,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103 + }, + + { + 55,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104 + }, + + { + 55,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105 + }, + + { + 55,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106, 1109,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106 + }, + + { + 55,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107, 1110,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107 + }, + + { + 55,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108, 1111,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108 + }, + + { + 55,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + + -1109,-1109, 1112,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109 + + }, + + { + 55,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110, 1113,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110, 1114,-1110, 1114,-1110,-1110, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110 + }, + + { + 55,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111, 1116,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111, 1117,-1111, 1117,-1111,-1111, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111 + }, + + { + 55,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112, 1119,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112 + }, + + { + 55,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113, 1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113, 1114,-1113, 1114,-1113,-1113, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113 + }, + + { + 55,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114 + }, + + { + 55,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115, 1120,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115, 1121, 1115, 1115, + + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115 + }, + + { + 55,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116, 1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116, 1117,-1116, 1117,-1116,-1116, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116 + }, + + { + 55,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117 + }, + + { + 55,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1118,-1118, + + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118 + }, + + { + 55,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + + -1119,-1119, 1122,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119 + + }, + + { + 55,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120, 1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120, 1121,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120 + }, + + { + 55, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + -1121, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123 + }, + + { + 55,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122, 1124,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122 + }, + + { + 55, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + + -1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123 + }, + + { + 55,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124, 1125,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124 + }, + + { + 55,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125, 1126,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125 + }, + + { + 55,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126, 1127,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126 + }, + + { + 55,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127, 1128,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127 + }, + + { + 55,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128, 1129,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128 + }, + + { + 55,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + + -1129,-1129, 1130,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129 + + }, + + { + 55,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130, 1131,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130 + }, + + { + 55,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131, 1132,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131 + }, + + { + 55,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132, 1133,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132 + }, + + { + 55,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133, 1134,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133 + }, + + { + 55,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134, 1135,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134 + }, + + { + 55,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135, 1136,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135 + }, + + { + 55,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136, 1137,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136 + }, + + { + 55,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137, 1138,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137 + }, + + { + 55,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138, 1139,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138 + }, + + { + 55,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + + -1139,-1139, 1140,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139 + + }, + + { + 55,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140, 1141,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140 + }, + + { + 55,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141, 1142,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141 + }, + + { + 55,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142, 1143,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142 + }, + + { + 55,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143, 1144,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143 + }, + + { + 55,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144, 1145,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144 + }, + + { + 55,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145, 1146,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145 + }, + + { + 55,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146, 1147,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146 + }, + + { + 55,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147, 1148,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147 + }, + + { + 55,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148, 1149,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148 + }, + + { + 55,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + + -1149,-1149, 1150,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149 + + }, + + { + 55,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150, 1151,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150 + }, + + { + 55,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151, 1152,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151 + }, + + { + 55,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152, 1153,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152 + }, + + { + 55,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153, 1154,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153 + }, + + { + 55,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154, 1155,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154 + }, + + { + 55,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155, 1156,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155 + }, + + { + 55,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156, 1157,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156 + }, + + { + 55,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157, 1158,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157 + }, + + { + 55,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158, 1159,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158 + }, + + { + 55,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + + -1159,-1159, 1160,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159 + + }, + + { + 55,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160, 1161,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160 + }, + + { + 55,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161, 1162,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161 + }, + + { + 55,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162, 1163,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162 + }, + + { + 55,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163, 1164,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163 + }, + + { + 55,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164, 1165,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164 + }, + + { + 55,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165, 1166,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165 + }, + + { + 55,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166, 1167,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166 + }, + + { + 55,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167, 1168,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167 + }, + + { + 55,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168, 1169,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168 + }, + + { + 55,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + + -1169,-1169, 1170,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169 + + }, + + { + 55,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170, 1171,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170 + }, + + { + 55,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171, 1172,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171 + }, + + { + 55,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172, 1173,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172 + }, + + { + 55,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173, 1174,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173 + }, + + { + 55,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174, 1175,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174 + }, + + { + 55,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175, 1176,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175 + }, + + { + 55,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176, 1177,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176 + }, + + { + 55,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177, 1178,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177 + }, + + { + 55,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178, 1179,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178 + }, + + { + 55,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + + -1179,-1179, 1180,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179 + + }, + + { + 55,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180, 1181,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180 + }, + + { + 55,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181, 1182,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181 + }, + + { + 55,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182, 1183,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182 + }, + + { + 55,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183, 1184,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183 + }, + + { + 55,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184, 1185,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184 + }, + + { + 55,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185, 1186,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185 + }, + + { + 55,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186, 1187,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186 + }, + + { + 55,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187, 1188,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187 + }, + + { + 55,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188, 1189,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188 + }, + + { + 55,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + + -1189,-1189, 1190,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189 + + }, + + { + 55,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 293 +#define YY_END_OF_BUFFER 294 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[1191] = + { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 293, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 150, 150, 150, + 198, 198, 198, 151, 151, 151, 247, 247, 247, 201, + 199, 200, 251, 251, 255, 255, 258, 258, 259, 259, + + 262, 262, 264, 264, 266, 266, 268, 268, 267, 270, + 270, 270, 269, 272, 272, 272, 271, 274, 274, 276, + 276, 278, 277, 280, 280, 283, 283, 283, 281, 284, + 293, 285, 293, 293, 293, 290, 293, 291, 293, 292, + 0, 0, 107, 0, 0, 0, 0, 108, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 18, 16, + 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 265, 267, 0, + 269, 269, 269, 269, 0, 0, 271, 271, 271, 271, + 0, 0, 273, 0, 275, 277, 279, 0, 281, 282, + 282, 281, 0, 0, 287, 0, 0, 0, 285, 0, + 0, 0, 285, 0, 0, 0, 290, 0, 291, 0, + 292, 0, 109, 0, 0, 0, 0, 0, 0, 0, + 110, 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, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 148, 149, 140, 139, 132, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, + 249, 250, 252, 253, 254, 0, 0, 0, 0, 0, + 269, 0, 269, 271, 0, 271, 282, 0, 282, 0, + + 0, 286, 0, 0, 0, 288, 0, 0, 0, 285, + 0, 0, 125, 126, 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, 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, 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, + 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, 0, 0, 0, 0, 0, 260, 261, 0, + 263, 289, 0, 0, 0, 286, 0, 0, 0, 285, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 20, 0, 94, 24, 98, + 95, 99, 21, 0, 0, 7, 3, 10, 22, 9, + 8, 23, 0, 0, 0, 0, 100, 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, 17, 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, 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, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 257, 0, 286, 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, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 141, 142, 143, 144, 145, + 146, 138, 137, 136, 135, 134, 130, 131, 187, 189, + 192, 196, 188, 191, 195, 190, 194, 193, 183, 161, + 180, 184, 197, 172, 162, 158, 167, 178, 181, 185, + 173, 170, 175, 163, 159, 168, 156, 165, 177, 179, + 182, 186, 174, 171, 176, 154, 155, 164, 160, 169, + 157, 166, 152, 153, 237, 239, 242, 246, 238, 241, + 245, 240, 244, 243, 233, 211, 230, 234, 222, 208, + + 212, 217, 228, 231, 235, 220, 223, 225, 206, 209, + 213, 218, 215, 227, 229, 232, 236, 204, 221, 224, + 226, 205, 202, 207, 210, 214, 219, 216, 203, 256, + 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, 74, 0, 0, 0, + 44, 42, 0, 0, 0, 0, 12, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 0, 13, 15, 0, 75, 76, 80, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 77, 0, 0, 0, 0, 25, 0, 0, 0, + 79, 103, 105, 101, 88, 93, 55, 92, 91, 104, + 106, 102, 89, 111, 112, 84, 86, 90, 48, 47, + 49, 46, 32, 31, 83, 0, 73, 85, 87, 40, + 39, 43, 41, 54, 52, 51, 53, 50, 34, 38, + 36, 33, 37, 35, 0, 68, 69, 67, 64, 65, + 66, 70, 124, 29, 121, 122, 123, 120, 117, 118, + 119, 113, 114, 72, 14, 82, 59, 62, 45, 63, + 26, 30, 61, 60, 28, 27, 56, 57, 19, 78, + + 127, 0, 115, 58, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, + 1, 0, 1, 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, 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, 0, 0, 128 + } ; + +static const yy_state_type yy_NUL_trans[1191] = + { 0, + 56, 57, 78, 78, 81, 81, 84, 84, 87, 87, + 90, 90, 92, 92, 93, 93, 95, 95, 97, 97, + 99, 99, 101, 101, 103, 103, 105, 105, 107, 107, + 110, 110, 114, 114, 118, 118, 120, 120, 122, 122, + 124, 124, 126, 126, 56, 56, 131, 131, 135, 135, + 137, 137, 139, 139, 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, 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, 242, 0, + 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 254, 0, 258, 262, 266, 0, 268, 0, 270, 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, 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, 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, 0, 0, 0, 0, 0, + 0, 242, 0, 244, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 254, 0, 400, 401, 405, 0, 409, + 262, 262, 0, 262, 262, 266, 0, 268, 0, 270, + 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, 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, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, + + 401, 0, 401, 401, 405, 0, 405, 555, 405, 0, + 409, 559, 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, 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, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, + 0, 0, 400, 738, 555, 0, 555, 555, 559, 0, + 559, 559, 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, 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, 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, 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 738, 0, 738, + 738, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, + 1123, 0, 1123, 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, 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, 0, 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "wcspih.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcspih.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* wcspih.l is a Flex description file containing the definition of a lexical +* scanner for parsing the WCS keyrecords from a FITS primary image or image +* extension header. +* +* wcspih.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description +* of the user interface and operating notes. +* +* Implementation notes +* -------------------- +* Use of the WCSAXESa keyword is not mandatory. Its default value is "the +* larger of NAXIS and the largest index of these keywords [i.e. CRPIXj, PCi_j +* or CDi_j, CDELTi, CTYPEi, CRVALi, and CUNITi] found in the FITS header". +* Consequently the definition of WCSAXESa effectively invalidates the use of +* NAXIS for determining the number of coordinate axes and forces a preliminary +* pass through the header to determine the "largest index" in headers where +* WCSAXESa was omitted. +* +* Furthermore, since the use of WCSAXESa is optional, there is no way to +* determine the number of coordinate representations (the "a" value) other +* than by parsing all of the WCS keywords in the header; even if WCSAXESa was +* specified for some representations it cannot be known in advance whether it +* was specified for all of those present in the header. +* +* Hence the definition of WCSAXESa forces the scanner to be implemented in two +* passes. The first pass is used to determine the number of coordinate +* representations (up to 27) and the number of coordinate axes in each. +* Effectively WCSAXESa is ignored unless it exceeds the "largest index" in +* which case the keywords for the extra axes assume their default values. The +* number of PVi_ma and PSi_ma keywords in each representation is also counted +* in the first pass. +* +* On completion of the first pass, memory is allocated for an array of the +* required number of wcsprm structs and each of these is initialized +* appropriately. These structs are filled in the second pass. +* +* The parser does not check for duplicated keywords, it accepts the last +* encountered. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Indices for parameterized keywords. */ +/* Alternate coordinate system identifier. */ +/* Keyvalue data types. */ +/* Inline comment syntax. */ +/* Exclusive start states. */ + + + + + + +#line 110 "wcspih.l" +#include +#include +#include +#include +#include +#include + +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcsutil.h" + +#include "dis.h" +#include "wcs.h" +#include "wcshdr.h" + +#define INTEGER 0 +#define FLOAT 1 +#define FLOAT2 2 +#define STRING 3 +#define RECORD 4 + +#define PRIOR 1 +#define SEQUENT 2 + +#define SIP 1 +#define DSS 2 +#define WAT 3 + +// User data associated with yyscanner. +struct wcspih_extra { + // Values passed to YY_INPUT. + char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcspih_scanner(char *header, int nkeyrec, int relax, \ + int ctrl, int *nreject, int *nwcs, struct wcsprm **wcs, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; +static int wcspih_final(int ndp[], int ndq[], int distran, double dsstmp[], + char *wat[], int *nwcs, struct wcsprm **wcs); +static int wcspih_init1(int naxis, int alts[], int dpq[], int npv[], + int nps[], int ndp[], int ndq[], int auxprm, int distran, + int *nwcs, struct wcsprm **wcs); +static void wcspih_pass1(int naxis, int i, int j, char a, int distype, + int alts[], int dpq[], int *npptr); + +static int wcspih_jdref(double *wptr, const double *jdref); +static int wcspih_jdrefi(double *wptr, const double *jdrefi); +static int wcspih_jdreff(double *wptr, const double *jdreff); +static int wcspih_epoch(double *wptr, const double *epoch); +static int wcspih_vsource(double *wptr, const double *vsource); + +static int wcspih_timepixr(double timepixr); + +#line 21599 "wcspih.c" +#line 21600 "wcspih.c" + +#define INITIAL 0 +#define CCia 1 +#define CCi_ja 2 +#define CCCCCia 3 +#define CCi_ma 4 +#define CCCCCCCa 5 +#define CCCCCCCC 6 +#define CROTAi 7 +#define PROJPn 8 +#define SIP2 9 +#define SIP3 10 +#define DSSAMDXY 11 +#define PLTDECSN 12 +#define VALUE 13 +#define INTEGER_VAL 14 +#define FLOAT_VAL 15 +#define FLOAT2_VAL 16 +#define STRING_VAL 17 +#define RECORD_VAL 18 +#define RECFIELD 19 +#define RECCOLON 20 +#define RECVALUE 21 +#define RECEND 22 +#define COMMENT 23 +#define DISCARD 24 +#define ERROR 25 +#define FLUSH 26 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct wcspih_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 187 "wcspih.l" + +#line 189 "wcspih.l" + int p, q; + char *errmsg, errtxt[80], *keyname, strtmp[80], *wat[2], *watstr; + int alts[27], dpq[27], inttmp, ndp[27], ndq[27], nps[27], npv[27], + rectype; + double dbltmp, dbl2tmp[2], dsstmp[20]; + struct auxprm auxtem; + struct disprm distem; + struct wcsprm wcstem; + + int naxis = 0; + for (int ialt = 0; ialt < 27; ialt++) { + alts[ialt] = 0; + dpq[ialt] = 0; + npv[ialt] = 0; + nps[ialt] = 0; + ndp[ialt] = 0; + ndq[ialt] = 0; + } + + // Our handle on the input stream. + char *keyrec = header; + char *hptr = header; + char *keep = 0x0; + + // For keeping tallies of keywords found. + *nreject = 0; + int nvalid = 0; + int nother = 0; + + // If strict, then also reject. + if (relax & WCSHDR_strict) relax |= WCSHDR_reject; + + // Keyword indices, as used in the WCS papers, e.g. PCi_ja, PVi_ma. + int i = 0; + int j = 0; + int m = 0; + char a = ' '; + + // For decoding the keyvalue. + int valtype = -1; + int distype = 0; + void *vptr = 0x0; + + // For keywords that require special handling. + int altlin = 0; + int *npptr = 0x0; + int (*chekval)(double) = 0x0; + int (*special)(double *, const double *) = 0x0; + int auxprm = 0; + int naux = 0; + int distran = 0; + int sipflag = 0; + int dssflag = 0; + int watflag = 0; + int watn = 0; + + // The data structures produced. + *nwcs = 0; + *wcs = 0x0; + + // Control variables. + int ipass = 1; + int npass = 2; + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return WCSHDRERR_PARSER; + } + + BEGIN(INITIAL); + + +#line 21950 "wcspih.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 265 "wcspih.l" +{ + keyname = "NAXISn"; + + if (ipass == 1) { + sscanf(yytext, "NAXIS = %d", &naxis); + if (naxis < 0) naxis = 0; + BEGIN(FLUSH); + + } else { + sscanf(yytext, "NAXIS = %d", &i); + + if (i < 0) { + errmsg = "negative value of NAXIS ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 285 "wcspih.l" +{ + sscanf(yytext, "WCSAXES%c= %d", &a, &i); + + if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCSAXESa"; + BEGIN(COMMENT); + } + } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 301 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + keyname = "CRPIXja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 309 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + keyname = "PCi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 318 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + keyname = "CDi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 327 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + keyname = "CDELTia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 335 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "CROTAn"; + BEGIN(CROTAi); + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 344 "wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + keyname = "CUNITia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 352 "wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + keyname = "CTYPEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 360 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + keyname = "CRVALia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 368 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.lonpole); + + keyname = "LONPOLEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 376 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.latpole); + + keyname = "LATPOLEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 384 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + keyname = "RESTFRQa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 392 "wcspih.l" +{ + if (relax & WCSHDR_strict) { + errmsg = "the RESTFREQ keyword is deprecated, use RESTFRQa"; + BEGIN(ERROR); + + } else { + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + unput(' '); + + keyname = "RESTFREQ"; + BEGIN(CCCCCCCa); + } + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 408 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restwav); + + keyname = "RESTWAVa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 416 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + npptr = npv; + + keyname = "PVi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 425 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + npptr = npv; + + keyname = "PROJPn"; + BEGIN(PROJPn); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 434 "wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + npptr = nps; + + keyname = "PSi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 443 "wcspih.l" +{ + sscanf(yytext, "VELREF%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the VELREF keyword is deprecated, use SPECSYSa"; + BEGIN(ERROR); + + } else if ((a == ' ') || (relax & WCSHDR_VELREFa)) { + valtype = INTEGER; + vptr = &(wcstem.velref); + + unput(a); + + keyname = "VELREF"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "VELREF keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 468 "wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + keyname = "CNAMEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 476 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + keyname = "CRDERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 484 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + keyname = "CSYERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 492 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + keyname = "CZPHSia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 500 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + keyname = "CPERIia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 508 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.wcsname; + + keyname = "WCSNAMEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 516 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.timesys; + + keyname = "TIMESYS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 524 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.trefpos; + + keyname = "TREFPOS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 532 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.trefdir; + + keyname = "TREFDIR"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 540 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.plephem; + + keyname = "PLEPHEM"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 548 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.timeunit; + + keyname = "TIMEUNIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 31: +#line 557 "wcspih.l" +case 32: +YY_RULE_SETUP +#line 557 "wcspih.l" +{ + if ((yytext[4] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = STRING; + vptr = wcstem.dateref; + + keyname = "DATEREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the DATE-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 33: +#line 575 "wcspih.l" +case 34: +YY_RULE_SETUP +#line 575 "wcspih.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + + keyname = "MJDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 35: +#line 593 "wcspih.l" +case 36: +YY_RULE_SETUP +#line 593 "wcspih.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + + keyname = "MJDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 37: +#line 612 "wcspih.l" +case 38: +YY_RULE_SETUP +#line 612 "wcspih.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref + 1; + + keyname = "MJDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 39: +#line 630 "wcspih.l" +case 40: +YY_RULE_SETUP +#line 630 "wcspih.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + special = wcspih_jdref; + + keyname = "JDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 41: +#line 649 "wcspih.l" +case 42: +YY_RULE_SETUP +#line 649 "wcspih.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcspih_jdrefi; + + keyname = "JDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 43: +#line 669 "wcspih.l" +case 44: +YY_RULE_SETUP +#line 669 "wcspih.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcspih_jdreff; + + keyname = "JDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 45: +YY_RULE_SETUP +#line 687 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timeoffs); + + keyname = "TIMEOFFS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 46: +YY_RULE_SETUP +#line 695 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.dateobs; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 47: +YY_RULE_SETUP +#line 704 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.datebeg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 48: +YY_RULE_SETUP +#line 713 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.dateavg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-AVG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 49: +YY_RULE_SETUP +#line 722 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.dateend; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 50: +YY_RULE_SETUP +#line 731 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdobs); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 51: +YY_RULE_SETUP +#line 740 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdbeg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 749 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdavg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-AVG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 758 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdend); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 54: +YY_RULE_SETUP +#line 767 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.jepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "JEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 55: +YY_RULE_SETUP +#line 776 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.bepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "BEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 56: +YY_RULE_SETUP +#line 785 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstart); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTART"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 794 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstop); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTOP"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 58: +YY_RULE_SETUP +#line 803 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.xposure); + if (ctrl < -10) keep = keyrec; + + keyname = "XPOSURE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 59: +YY_RULE_SETUP +#line 812 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.telapse); + if (ctrl < -10) keep = keyrec; + + keyname = "TELAPSE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 60: +YY_RULE_SETUP +#line 821 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timsyer); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMSYER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 61: +YY_RULE_SETUP +#line 830 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timrder); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMRDER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 839 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timedel); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEDEL"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 848 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timepixr); + chekval = wcspih_timepixr; + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEPIXR"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 64: +YY_RULE_SETUP +#line 858 "wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-X"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 867 "wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 1; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-Y"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 66: +YY_RULE_SETUP +#line 876 "wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 2; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-Z"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 67: +YY_RULE_SETUP +#line 885 "wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 3; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-L"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 894 "wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 4; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-B"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 69: +YY_RULE_SETUP +#line 903 "wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 5; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-H"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 912 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.obsorbit; + + keyname = "OBSORBIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 71: +YY_RULE_SETUP +#line 920 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.radesys; + + keyname = "RADESYSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 72: +YY_RULE_SETUP +#line 928 "wcspih.l" +{ + if (relax & WCSHDR_RADECSYS) { + valtype = STRING; + vptr = wcstem.radesys; + + unput(' '); + + keyname = "RADECSYS"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the RADECSYS keyword is deprecated, use RADESYSa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 73: +YY_RULE_SETUP +#line 947 "wcspih.l" +{ + sscanf(yytext, "EPOCH%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the EPOCH keyword is deprecated, use EQUINOXa"; + BEGIN(ERROR); + + } else if (a == ' ' || relax & WCSHDR_EPOCHa) { + valtype = FLOAT; + vptr = &(wcstem.equinox); + special = wcspih_epoch; + + unput(a); + + keyname = "EPOCH"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "EPOCH keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 973 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.equinox); + + keyname = "EQUINOXa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 75: +YY_RULE_SETUP +#line 981 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.specsys; + + keyname = "SPECSYSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 76: +YY_RULE_SETUP +#line 989 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.ssysobs; + + keyname = "SSYSOBSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 77: +YY_RULE_SETUP +#line 997 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velosys); + + keyname = "VELOSYSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 1005 "wcspih.l" +{ + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcspih_vsource; + + yyless(7); + + keyname = "VSOURCEa"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the VSOURCEa keyword is deprecated, use ZSOURCEa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 1025 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.zsource); + + keyname = "ZSOURCEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 80: +YY_RULE_SETUP +#line 1033 "wcspih.l" +{ + valtype = STRING; + vptr = wcstem.ssyssrc; + + keyname = "SSYSSRCa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 81: +YY_RULE_SETUP +#line 1041 "wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velangl); + + keyname = "VELANGLa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 82: +YY_RULE_SETUP +#line 1049 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.rsun_ref); + + keyname = "RSUN_REF"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 1058 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.dsun_obs); + + keyname = "DSUN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 1067 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.crln_obs); + + keyname = "CRLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 85: +YY_RULE_SETUP +#line 1076 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hgln_obs); + + keyname = "HGLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 86: +#line 1086 "wcspih.l" +case 87: +YY_RULE_SETUP +#line 1086 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hglt_obs); + + keyname = "HGLT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 88: +YY_RULE_SETUP +#line 1095 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.a_radius); + + keyname = "A_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 89: +YY_RULE_SETUP +#line 1104 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.b_radius); + + keyname = "B_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 90: +YY_RULE_SETUP +#line 1113 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.c_radius); + + keyname = "C_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 91: +YY_RULE_SETUP +#line 1122 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blon_obs); + + keyname = "BLON_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 92: +YY_RULE_SETUP +#line 1131 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blat_obs); + + keyname = "BLAT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 93: +YY_RULE_SETUP +#line 1140 "wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.bdis_obs); + + keyname = "BDIS_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 94: +YY_RULE_SETUP +#line 1149 "wcspih.l" +{ + valtype = STRING; + distype = PRIOR; + vptr = &(distem.dtype); + + keyname = "CPDISja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 95: +YY_RULE_SETUP +#line 1158 "wcspih.l" +{ + valtype = STRING; + distype = SEQUENT; + vptr = &(distem.dtype); + + keyname = "CQDISia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 96: +YY_RULE_SETUP +#line 1167 "wcspih.l" +{ + valtype = RECORD; + distype = PRIOR; + vptr = &(distem.dp); + npptr = ndp; + + keyname = "DPja"; + BEGIN(CCia); + } + YY_BREAK +case 97: +YY_RULE_SETUP +#line 1177 "wcspih.l" +{ + valtype = RECORD; + distype = SEQUENT; + vptr = &(distem.dp); + npptr = ndq; + + keyname = "DQia"; + BEGIN(CCia); + } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 1187 "wcspih.l" +{ + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + keyname = "CPERRja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 1196 "wcspih.l" +{ + valtype = FLOAT; + distype = SEQUENT; + vptr = &(distem.maxdis); + + keyname = "CQERRia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 100: +YY_RULE_SETUP +#line 1205 "wcspih.l" +{ + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.totdis); + + keyname = "DVERRa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 101: +YY_RULE_SETUP +#line 1214 "wcspih.l" +{ + // SIP: axis 1 polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 1; + a = ' '; + + keyname = "A_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 102: +YY_RULE_SETUP +#line 1227 "wcspih.l" +{ + // SIP: axis 2 polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 2; + a = ' '; + + keyname = "B_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 103: +YY_RULE_SETUP +#line 1240 "wcspih.l" +{ + // SIP: axis 1 inverse polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 1; + a = ' '; + + keyname = "AP_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 104: +YY_RULE_SETUP +#line 1253 "wcspih.l" +{ + // SIP: axis 2 inverse polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 2; + a = ' '; + + keyname = "BP_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 105: +YY_RULE_SETUP +#line 1266 "wcspih.l" +{ + // SIP: axis 1 maximum distortion. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + i = 1; + a = ' '; + + keyname = "A_DMAX"; + BEGIN(VALUE); + } + YY_BREAK +case 106: +YY_RULE_SETUP +#line 1279 "wcspih.l" +{ + // SIP: axis 2 maximum distortion. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + i = 2; + a = ' '; + + keyname = "B_DMAX"; + BEGIN(VALUE); + } + YY_BREAK +case 107: +YY_RULE_SETUP +#line 1292 "wcspih.l" +{ + // SIP: axis 1 polynomial coefficient. + i = 1; + sipflag = 2; + + keyname = "A_p_q"; + BEGIN(SIP2); + } + YY_BREAK +case 108: +YY_RULE_SETUP +#line 1301 "wcspih.l" +{ + // SIP: axis 2 polynomial coefficient. + i = 2; + sipflag = 2; + + keyname = "B_p_q"; + BEGIN(SIP2); + } + YY_BREAK +case 109: +YY_RULE_SETUP +#line 1310 "wcspih.l" +{ + // SIP: axis 1 inverse polynomial coefficient. + i = 1; + sipflag = 3; + + keyname = "AP_p_q"; + BEGIN(SIP3); + } + YY_BREAK +case 110: +YY_RULE_SETUP +#line 1319 "wcspih.l" +{ + // SIP: axis 2 inverse polynomial coefficient. + i = 2; + sipflag = 3; + + keyname = "BP_p_q"; + BEGIN(SIP3); + } + YY_BREAK +case 111: +YY_RULE_SETUP +#line 1328 "wcspih.l" +{ + // DSS: LLH corner pixel coordinate 1. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp; + dssflag = 1; + distran = DSS; + + keyname = "CNPIX1"; + BEGIN(VALUE); + } + YY_BREAK +case 112: +YY_RULE_SETUP +#line 1340 "wcspih.l" +{ + // DSS: LLH corner pixel coordinate 2. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+1; + dssflag = 1; + distran = DSS; + + keyname = "CNPIX1"; + BEGIN(VALUE); + } + YY_BREAK +case 113: +YY_RULE_SETUP +#line 1352 "wcspih.l" +{ + // DSS: plate centre x-coordinate in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+2; + dssflag = 1; + distran = DSS; + + keyname = "PPO3"; + BEGIN(VALUE); + } + YY_BREAK +case 114: +YY_RULE_SETUP +#line 1364 "wcspih.l" +{ + // DSS: plate centre y-coordinate in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+3; + dssflag = 1; + distran = DSS; + + keyname = "PPO6"; + BEGIN(VALUE); + } + YY_BREAK +case 115: +YY_RULE_SETUP +#line 1376 "wcspih.l" +{ + // DSS: pixel x-dimension in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+4; + dssflag = 1; + distran = DSS; + + keyname = "XPIXELSZ"; + BEGIN(VALUE); + } + YY_BREAK +case 116: +YY_RULE_SETUP +#line 1388 "wcspih.l" +{ + // DSS: pixel y-dimension in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+5; + dssflag = 1; + distran = DSS; + + keyname = "YPIXELSZ"; + BEGIN(VALUE); + } + YY_BREAK +case 117: +YY_RULE_SETUP +#line 1400 "wcspih.l" +{ + // DSS: plate centre, right ascension - hours. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+6; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAH"; + BEGIN(VALUE); + } + YY_BREAK +case 118: +YY_RULE_SETUP +#line 1412 "wcspih.l" +{ + // DSS: plate centre, right ascension - minutes. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+7; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAM"; + BEGIN(VALUE); + } + YY_BREAK +case 119: +YY_RULE_SETUP +#line 1424 "wcspih.l" +{ + // DSS: plate centre, right ascension - seconds. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+8; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAS"; + BEGIN(VALUE); + } + YY_BREAK +case 120: +YY_RULE_SETUP +#line 1436 "wcspih.l" +{ + // DSS: plate centre, declination - sign. + valtype = STRING; + distype = SEQUENT; + vptr = dsstmp+9; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECSN"; + BEGIN(PLTDECSN); + } + YY_BREAK +case 121: +YY_RULE_SETUP +#line 1448 "wcspih.l" +{ + // DSS: plate centre, declination - degrees. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+10; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECD"; + BEGIN(VALUE); + } + YY_BREAK +case 122: +YY_RULE_SETUP +#line 1460 "wcspih.l" +{ + // DSS: plate centre, declination - arcmin. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+11; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECM"; + BEGIN(VALUE); + } + YY_BREAK +case 123: +YY_RULE_SETUP +#line 1472 "wcspih.l" +{ + // DSS: plate centre, declination - arcsec. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+12; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECS"; + BEGIN(VALUE); + } + YY_BREAK +case 124: +YY_RULE_SETUP +#line 1484 "wcspih.l" +{ + // DSS: plate identification (insufficient to trigger DSS). + valtype = STRING; + distype = SEQUENT; + vptr = dsstmp+13; + dssflag = 2; + distran = 0; + + keyname = "PLATEID"; + BEGIN(VALUE); + } + YY_BREAK +case 125: +YY_RULE_SETUP +#line 1496 "wcspih.l" +{ + // DSS: axis 1 polynomial coefficient. + i = 1; + dssflag = 3; + + keyname = "AMDXm"; + BEGIN(DSSAMDXY); + } + YY_BREAK +case 126: +YY_RULE_SETUP +#line 1505 "wcspih.l" +{ + // DSS: axis 2 polynomial coefficient. + i = 2; + dssflag = 3; + + keyname = "AMDYm"; + BEGIN(DSSAMDXY); + } + YY_BREAK +case 127: +YY_RULE_SETUP +#line 1514 "wcspih.l" +{ + // TNX or ZPX: string-encoded data array. + sscanf(yytext, "WAT%d_%d", &i, &m); + if (watn < m) watn = m; + watflag = 1; + + valtype = STRING; + distype = SEQUENT; + vptr = wat[i-1] + 68*(m-1); + + a = ' '; + distran = WAT; + + keyname = "WATi_m"; + BEGIN(VALUE); + } + YY_BREAK +case 128: +YY_RULE_SETUP +#line 1531 "wcspih.l" +{ + if (yyextra->nkeyrec) { + yyextra->nkeyrec = 0; + errmsg = "keyrecords following the END keyrecord were ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 129: +YY_RULE_SETUP +#line 1541 "wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 130: +#line 1546 "wcspih.l" +case 131: +#line 1547 "wcspih.l" +case 132: +#line 1548 "wcspih.l" +case 133: +YY_RULE_SETUP +#line 1548 "wcspih.l" +{ + sscanf(yytext, "%d%c", &i, &a); + BEGIN(VALUE); + } + YY_BREAK +case 134: +#line 1554 "wcspih.l" +case 135: +#line 1555 "wcspih.l" +case 136: +#line 1556 "wcspih.l" +case 137: +#line 1557 "wcspih.l" +case 138: +#line 1558 "wcspih.l" +case 139: +#line 1559 "wcspih.l" +case 140: +YY_RULE_SETUP +#line 1559 "wcspih.l" +{ + if (relax & WCSHDR_reject) { + // Violates the basic FITS standard. + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 141: +#line 1573 "wcspih.l" +case 142: +#line 1574 "wcspih.l" +case 143: +#line 1575 "wcspih.l" +case 144: +#line 1576 "wcspih.l" +case 145: +#line 1577 "wcspih.l" +case 146: +#line 1578 "wcspih.l" +case 147: +#line 1579 "wcspih.l" +case 148: +#line 1580 "wcspih.l" +case 149: +YY_RULE_SETUP +#line 1580 "wcspih.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + YY_BREAK +case 150: +YY_RULE_SETUP +#line 1587 "wcspih.l" +{ + // Let it go. + BEGIN(DISCARD); + } + YY_BREAK +case 151: +YY_RULE_SETUP +#line 1592 "wcspih.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "keyword looks very much like %s but isn't", + keyname); + BEGIN(ERROR); + + } else { + // Let it go. + BEGIN(DISCARD); + } + } + YY_BREAK +case 152: +#line 1607 "wcspih.l" +case 153: +#line 1608 "wcspih.l" +case 154: +#line 1609 "wcspih.l" +case 155: +YY_RULE_SETUP +#line 1609 "wcspih.l" +{ + sscanf(yytext, "%d_%d%c", &i, &j, &a); + BEGIN(VALUE); + } + YY_BREAK +case 156: +#line 1616 "wcspih.l" +case 157: +#line 1617 "wcspih.l" +case 158: +#line 1618 "wcspih.l" +case 159: +#line 1619 "wcspih.l" +case 160: +#line 1620 "wcspih.l" +case 161: +#line 1621 "wcspih.l" +case 162: +#line 1622 "wcspih.l" +case 163: +#line 1623 "wcspih.l" +case 164: +#line 1624 "wcspih.l" +case 165: +#line 1625 "wcspih.l" +case 166: +#line 1626 "wcspih.l" +case 167: +#line 1627 "wcspih.l" +case 168: +#line 1628 "wcspih.l" +case 169: +#line 1629 "wcspih.l" +case 170: +#line 1630 "wcspih.l" +case 171: +#line 1631 "wcspih.l" +case 172: +#line 1632 "wcspih.l" +case 173: +#line 1633 "wcspih.l" +case 174: +#line 1634 "wcspih.l" +case 175: +#line 1635 "wcspih.l" +case 176: +YY_RULE_SETUP +#line 1635 "wcspih.l" +{ + if (((altlin == 1) && (relax & WCSHDR_PC0i_0ja)) || + ((altlin == 2) && (relax & WCSHDR_CD0i_0ja))) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 177: +#line 1653 "wcspih.l" +case 178: +#line 1654 "wcspih.l" +case 179: +#line 1655 "wcspih.l" +case 180: +#line 1656 "wcspih.l" +case 181: +#line 1657 "wcspih.l" +case 182: +#line 1658 "wcspih.l" +case 183: +#line 1659 "wcspih.l" +case 184: +#line 1660 "wcspih.l" +case 185: +#line 1661 "wcspih.l" +case 186: +YY_RULE_SETUP +#line 1661 "wcspih.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + YY_BREAK +case 187: +#line 1669 "wcspih.l" +case 188: +#line 1670 "wcspih.l" +case 189: +#line 1671 "wcspih.l" +case 190: +#line 1672 "wcspih.l" +case 191: +#line 1673 "wcspih.l" +case 192: +#line 1674 "wcspih.l" +case 193: +#line 1675 "wcspih.l" +case 194: +#line 1676 "wcspih.l" +case 195: +#line 1677 "wcspih.l" +case 196: +YY_RULE_SETUP +#line 1677 "wcspih.l" +{ + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + YY_BREAK +case 197: +YY_RULE_SETUP +#line 1684 "wcspih.l" +{ + // This covers the defunct forms CD00i00j and PC00i00j. + if (((altlin == 1) && (relax & WCSHDR_PC00i00j)) || + ((altlin == 2) && (relax & WCSHDR_CD00i00j))) { + sscanf(yytext, "%3d%3d", &i, &j); + a = ' '; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "this form of the %s keyword is deprecated, use %s", + keyname, keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 198: +YY_RULE_SETUP +#line 1705 "wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 199: +#line 1710 "wcspih.l" +case 200: +YY_RULE_SETUP +#line 1710 "wcspih.l" +{ + if (YY_START == CCCCCCCa) { + sscanf(yytext, "%c", &a); + } else { + unput(yytext[0]); + a = 0; + } + + BEGIN(VALUE); + } + YY_BREAK +case 201: +YY_RULE_SETUP +#line 1721 "wcspih.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "invalid alternate code, keyword resembles %s " + "but isn't", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 202: +#line 1736 "wcspih.l" +case 203: +#line 1737 "wcspih.l" +case 204: +#line 1738 "wcspih.l" +case 205: +YY_RULE_SETUP +#line 1738 "wcspih.l" +{ + sscanf(yytext, "%d_%d%c", &i, &m, &a); + BEGIN(VALUE); + } + YY_BREAK +case 206: +#line 1744 "wcspih.l" +case 207: +#line 1745 "wcspih.l" +case 208: +#line 1746 "wcspih.l" +case 209: +#line 1747 "wcspih.l" +case 210: +#line 1748 "wcspih.l" +case 211: +#line 1749 "wcspih.l" +case 212: +#line 1750 "wcspih.l" +case 213: +#line 1751 "wcspih.l" +case 214: +#line 1752 "wcspih.l" +case 215: +#line 1753 "wcspih.l" +case 216: +#line 1754 "wcspih.l" +case 217: +#line 1755 "wcspih.l" +case 218: +#line 1756 "wcspih.l" +case 219: +#line 1757 "wcspih.l" +case 220: +#line 1758 "wcspih.l" +case 221: +#line 1759 "wcspih.l" +case 222: +#line 1760 "wcspih.l" +case 223: +#line 1761 "wcspih.l" +case 224: +#line 1762 "wcspih.l" +case 225: +#line 1763 "wcspih.l" +case 226: +YY_RULE_SETUP +#line 1763 "wcspih.l" +{ + if (((valtype == FLOAT) && (relax & WCSHDR_PV0i_0ma)) || + ((valtype == STRING) && (relax & WCSHDR_PS0i_0ma))) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 227: +#line 1781 "wcspih.l" +case 228: +#line 1782 "wcspih.l" +case 229: +#line 1783 "wcspih.l" +case 230: +#line 1784 "wcspih.l" +case 231: +#line 1785 "wcspih.l" +case 232: +#line 1786 "wcspih.l" +case 233: +#line 1787 "wcspih.l" +case 234: +#line 1788 "wcspih.l" +case 235: +#line 1789 "wcspih.l" +case 236: +YY_RULE_SETUP +#line 1789 "wcspih.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + YY_BREAK +case 237: +#line 1797 "wcspih.l" +case 238: +#line 1798 "wcspih.l" +case 239: +#line 1799 "wcspih.l" +case 240: +#line 1800 "wcspih.l" +case 241: +#line 1801 "wcspih.l" +case 242: +#line 1802 "wcspih.l" +case 243: +#line 1803 "wcspih.l" +case 244: +#line 1804 "wcspih.l" +case 245: +#line 1805 "wcspih.l" +case 246: +YY_RULE_SETUP +#line 1805 "wcspih.l" +{ + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + YY_BREAK +case 247: +YY_RULE_SETUP +#line 1812 "wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 248: +#line 1817 "wcspih.l" +case 249: +#line 1818 "wcspih.l" +case 250: +YY_RULE_SETUP +#line 1818 "wcspih.l" +{ + a = ' '; + sscanf(yytext, "%d%c", &i, &a); + + if (relax & WCSHDR_strict) { + errmsg = "the CROTAn keyword is deprecated, use PCi_ja"; + BEGIN(ERROR); + + } else if ((a == ' ') || (relax & WCSHDR_CROTAia)) { + yyless(0); + BEGIN(CCCCCia); + + } else if (relax & WCSHDR_reject) { + errmsg = "CROTAn keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 251: +YY_RULE_SETUP +#line 1840 "wcspih.l" +{ + yyless(0); + BEGIN(CCCCCia); + } + YY_BREAK +case 252: +YY_RULE_SETUP +#line 1845 "wcspih.l" +{ + if (relax & WCSHDR_PROJPn) { + sscanf(yytext, "%d", &m); + i = 0; + a = ' '; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "the PROJPn keyword is deprecated, use PVi_ma"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 253: +#line 1862 "wcspih.l" +case 254: +YY_RULE_SETUP +#line 1862 "wcspih.l" +{ + if (relax & (WCSHDR_PROJPn | WCSHDR_reject)) { + errmsg = "invalid PROJPn keyword"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 255: +YY_RULE_SETUP +#line 1872 "wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 256: +#line 1877 "wcspih.l" +case 257: +YY_RULE_SETUP +#line 1877 "wcspih.l" +{ + // SIP keywords. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.dp); + npptr = ndp; + + a = ' '; + distran = SIP; + + sscanf(yytext, "%d_%d", &p, &q); + BEGIN(VALUE); + } + YY_BREAK +case 258: +#line 1892 "wcspih.l" +case 259: +YY_RULE_SETUP +#line 1892 "wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 260: +#line 1897 "wcspih.l" +case 261: +YY_RULE_SETUP +#line 1897 "wcspih.l" +{ + // DSS keywords. + valtype = FLOAT; + distype = SEQUENT; + vptr = &(distem.dp); + npptr = ndq; + + a = ' '; + distran = DSS; + + sscanf(yytext, "%d", &m); + BEGIN(VALUE); + } + YY_BREAK +case 262: +YY_RULE_SETUP +#line 1911 "wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 263: +/* rule 263 can match eol */ +YY_RULE_SETUP +#line 1915 "wcspih.l" +{ + // Special handling for this iconic DSS keyword. + if (1 < ipass) { + // Look for a minus sign. + sscanf(yytext, "= '%s", strtmp); + dbltmp = strcmp(strtmp, "-") ? 1.0 : -1.0; + } + + BEGIN(COMMENT); + } + YY_BREAK +case 264: +YY_RULE_SETUP +#line 1926 "wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 265: +YY_RULE_SETUP +#line 1930 "wcspih.l" +{ + // Do checks on i, j & m. + if (99 < i || 99 < j || 99 < m) { + if (relax & WCSHDR_reject) { + if (99 < i || 99 < j) { + errmsg = "axis number exceeds 99"; + } else if (m > 99) { + errmsg = "parameter number exceeds 99"; + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else { + if (valtype == INTEGER) { + BEGIN(INTEGER_VAL); + } else if (valtype == FLOAT) { + BEGIN(FLOAT_VAL); + } else if (valtype == FLOAT2) { + BEGIN(FLOAT2_VAL); + } else if (valtype == STRING) { + BEGIN(STRING_VAL); + } else if (valtype == RECORD) { + BEGIN(RECORD_VAL); + } else { + errmsg = errtxt; + sprintf(errmsg, "internal parser ERROR, bad data type: %d", + valtype); + BEGIN(ERROR); + } + } + } + YY_BREAK +case 266: +YY_RULE_SETUP +#line 1966 "wcspih.l" +{ + errmsg = "invalid KEYWORD = VALUE syntax"; + BEGIN(ERROR); + } + YY_BREAK +case 267: +YY_RULE_SETUP +#line 1971 "wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + sscanf(yytext, "%d", &inttmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 268: +YY_RULE_SETUP +#line 1983 "wcspih.l" +{ + errmsg = "an integer value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 269: +YY_RULE_SETUP +#line 1988 "wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + wcsutil_str2double(yytext, &dbltmp); + + if (chekval && chekval(dbltmp)) { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } else { + BEGIN(COMMENT); + } + } + } + YY_BREAK +case 270: +YY_RULE_SETUP +#line 2005 "wcspih.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 271: +YY_RULE_SETUP +#line 2010 "wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue as integer and fractional parts. + wcsutil_str2double2(yytext, dbl2tmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 272: +YY_RULE_SETUP +#line 2022 "wcspih.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 273: +/* rule 273 can match eol */ +YY_RULE_SETUP +#line 2027 "wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Copy the keyvalue minus the quotes. + strncpy(strtmp, yytext+1, yyleng-2); + strtmp[yyleng-2] = '\0'; + + // Strip off trailing blanks. + for (int jx = yyleng-3; jx >= 0; jx--) { + if (strtmp[jx] != ' ') { + break; + } + strtmp[jx] = '\0'; + } + + // Squeeze out repeated quotes. + int ix = 0; + for (int jx = 0; jx < 72; jx++) { + if (ix < jx) { + strtmp[ix] = strtmp[jx]; + } + + if (strtmp[jx] == '\0') { + break; + } else if (strtmp[jx] == '\'' && strtmp[jx+1] == '\'') { + jx++; + } + + ix++; + } + + BEGIN(COMMENT); + } + } + YY_BREAK +case 274: +YY_RULE_SETUP +#line 2064 "wcspih.l" +{ + errmsg = "a string value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 275: +/* rule 275 can match eol */ +YY_RULE_SETUP +#line 2069 "wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + yyless(1); + + BEGIN(RECFIELD); + } + } + YY_BREAK +case 276: +YY_RULE_SETUP +#line 2080 "wcspih.l" +{ + errmsg = "a record was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 277: +YY_RULE_SETUP +#line 2085 "wcspih.l" +{ + strncpy(strtmp, yytext, 72); + strtmp[72] = '\0'; + BEGIN(RECCOLON); + } + YY_BREAK +case 278: +YY_RULE_SETUP +#line 2091 "wcspih.l" +{ + errmsg = "invalid record field"; + BEGIN(ERROR); + } + YY_BREAK +case 279: +YY_RULE_SETUP +#line 2096 "wcspih.l" +{ + BEGIN(RECVALUE); + } + YY_BREAK +case 280: +YY_RULE_SETUP +#line 2100 "wcspih.l" +{ + errmsg = "invalid record syntax"; + BEGIN(ERROR); + } + YY_BREAK +case 281: +YY_RULE_SETUP +#line 2105 "wcspih.l" +{ + rectype = 0; + sscanf(yytext, "%d", &inttmp); + BEGIN(RECEND); + } + YY_BREAK +case 282: +YY_RULE_SETUP +#line 2111 "wcspih.l" +{ + rectype = 1; + wcsutil_str2double(yytext, &dbltmp); + BEGIN(RECEND); + } + YY_BREAK +case 283: +YY_RULE_SETUP +#line 2117 "wcspih.l" +{ + errmsg = "invalid record value"; + BEGIN(ERROR); + } + YY_BREAK +case 284: +YY_RULE_SETUP +#line 2122 "wcspih.l" +{ + BEGIN(COMMENT); + } + YY_BREAK +case 285: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2126 "wcspih.l" +{ + if (ipass == 1) { + // Do first-pass bookkeeping. + wcspih_pass1(naxis, i, j, a, distype, alts, dpq, npptr); + BEGIN(FLUSH); + + } else if (*wcs) { + // Store the value now that the keyrecord has been validated. + int gotone = 0; + for (int ialt = 0; ialt < *nwcs; ialt++) { + // The loop here is for keywords that apply + // to every alternate; these have a == 0. + if (a >= 'A') { + ialt = alts[a-'A'+1]; + if (ialt < 0) break; + } + gotone = 1; + + if (vptr) { + if (sipflag) { + // Translate a SIP keyword into DPja. + struct disprm *disp = (*wcs)->lin.dispre; + int ipx = (disp->ndp)++; + + // SIP doesn't have alternates. + char keyword[16]; + sprintf(keyword, "DP%d", i); + sprintf(strtmp, "SIP.%s.%d_%d", (sipflag==2)?"FWD":"REV", + p, q); + if (valtype == INTEGER) { + dpfill(disp->dp+ipx, keyword, strtmp, i, 0, inttmp, 0.0); + } else { + dpfill(disp->dp+ipx, keyword, strtmp, i, 1, 0, dbltmp); + } + + } else if (dssflag) { + // All DSS keywords require special handling. + if (dssflag == 1) { + // Temporary parameter for DSS used by wcspih_final(). + *((double *)vptr) = dbltmp; + + } else if (dssflag == 2) { + // Temporary parameter for DSS used by wcspih_final(). + strcpy((char *)vptr, strtmp); + + } else { + // Translate a DSS keyword into DQia. + if (m <= 13 || dbltmp != 0.0) { + struct disprm *disp = (*wcs)->lin.disseq; + int ipx = (disp->ndp)++; + + // DSS doesn't have alternates. + char keyword[16]; + sprintf(keyword, "DQ%d", i); + sprintf(strtmp, "DSS.AMD.%d", m); + dpfill(disp->dp+ipx, keyword, strtmp, i, 1, 0, dbltmp); + + // Also required by wcspih_final(). + if (m <= 3) { + dsstmp[13+(i-1)*3+m] = dbltmp; + } + } + } + + } else if (watflag) { + // String array for TNX and ZPX used by wcspih_final(). + strcpy((char *)vptr, strtmp); + + } else { + // An "ordinary" keyword. + struct wcsprm *wcsp = *wcs + ialt; + struct disprm *disp; + void *wptr; + ptrdiff_t voff; + if (auxprm) { + // Additional auxiliary parameter. + struct auxprm *auxp = wcsp->aux; + voff = (char *)vptr - (char *)(&auxtem); + wptr = (void *)((char *)auxp + voff); + + } else if (distype) { + // Distortion parameter of some kind. + if (distype == PRIOR) { + // Prior distortion. + disp = wcsp->lin.dispre; + } else { + // Sequent distortion. + disp = wcsp->lin.disseq; + } + voff = (char *)vptr - (char *)(&distem); + wptr = (void *)((char *)disp + voff); + + } else { + // A parameter that lives directly in wcsprm. + voff = (char *)vptr - (char *)(&wcstem); + wptr = (void *)((char *)wcsp + voff); + } + + if (valtype == INTEGER) { + *((int *)wptr) = inttmp; + + } else if (valtype == FLOAT) { + // Apply keyword parameterization. + if (npptr == npv) { + int ipx = (wcsp->npv)++; + wcsp->pv[ipx].i = i; + wcsp->pv[ipx].m = m; + wptr = &(wcsp->pv[ipx].value); + + } else if (j) { + wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + + (j - 1); + + } else if (i) { + wptr = *((double **)wptr) + (i - 1); + } + + if (special) { + special(wptr, &dbltmp); + } else { + *((double *)wptr) = dbltmp; + } + + // Flag presence of PCi_ja, or CDi_ja and/or CROTAia. + if (altlin) { + wcsp->altlin |= altlin; + altlin = 0; + } + + } else if (valtype == FLOAT2) { + // Split MJDREF and JDREF into integer and fraction. + if (special) { + special(wptr, dbl2tmp); + } else { + *((double *)wptr) = dbl2tmp[0]; + *((double *)wptr + 1) = dbl2tmp[1]; + } + + } else if (valtype == STRING) { + // Apply keyword parameterization. + if (npptr == nps) { + int ipx = (wcsp->nps)++; + wcsp->ps[ipx].i = i; + wcsp->ps[ipx].m = m; + wptr = wcsp->ps[ipx].value; + + } else if (j) { + wptr = *((char (**)[72])wptr) + + (i - 1)*(wcsp->naxis) + (j - 1); + + } else if (i) { + wptr = *((char (**)[72])wptr) + (i - 1); + } + + char *cptr = (char *)wptr; + strcpy(cptr, strtmp); + + } else if (valtype == RECORD) { + int ipx = (disp->ndp)++; + + char keyword[16]; + if (a == ' ') { + sprintf(keyword, "%.2s%d", keyname, i); + } else { + sprintf(keyword, "%.2s%d%c", keyname, i, a); + } + + dpfill(disp->dp+ipx, keyword, strtmp, i, rectype, inttmp, + dbltmp); + } + } + } + + if (a) break; + } + + if (gotone) { + nvalid++; + if (ctrl == 4) { + if (distran || dssflag) { + wcsfprintf(stderr, "%.80s\n Accepted (%d) as a " + "recognized WCS convention.\n", keyrec, nvalid); + } else { + wcsfprintf(stderr, "%.80s\n Accepted (%d) as a " + "valid WCS keyrecord.\n", keyrec, nvalid); + } + } + + BEGIN(FLUSH); + + } else { + errmsg = "syntactically valid WCS keyrecord has no effect"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + } + YY_BREAK +case 286: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2326 "wcspih.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 287: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2331 "wcspih.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 288: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2336 "wcspih.l" +{ + errmsg = "invalid keyvalue or malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 289: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2341 "wcspih.l" +{ + errmsg = "malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 290: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2346 "wcspih.l" +{ + if (ipass == npass) { + if (ctrl < 0) { + // Preserve discards. + keep = keyrec; + + } else if (2 < ctrl) { + nother++; + wcsfprintf(stderr, "%.80s\n Not a recognized WCS keyword.\n", + keyrec); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 291: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2361 "wcspih.l" +{ + if (ipass == npass) { + (*nreject)++; + + if (ctrl%10 == -1) { + // Preserve rejects. + keep = keyrec; + } + + if (1 < abs(ctrl%10)) { + wcsfprintf(stderr, "%.80s\n Rejected (%d), %s.\n", + keyrec, *nreject, errmsg); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 292: +/* rule 292 can match eol */ +YY_RULE_SETUP +#line 2378 "wcspih.l" +{ + if (ipass == npass && keep) { + if (hptr < keep) { + strncpy(hptr, keep, 80); + } + hptr += 80; + } + + naux += auxprm; + + // Throw away the rest of the line and reset for the next one. + i = j = 0; + m = 0; + a = ' '; + + keyrec += 80; + + valtype = -1; + distype = 0; + vptr = 0x0; + keep = 0x0; + + altlin = 0; + npptr = 0x0; + chekval = 0x0; + special = 0x0; + auxprm = 0; + sipflag = 0; + dssflag = 0; + watflag = 0; + + BEGIN(INITIAL); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(CCia): +case YY_STATE_EOF(CCi_ja): +case YY_STATE_EOF(CCCCCia): +case YY_STATE_EOF(CCi_ma): +case YY_STATE_EOF(CCCCCCCa): +case YY_STATE_EOF(CCCCCCCC): +case YY_STATE_EOF(CROTAi): +case YY_STATE_EOF(PROJPn): +case YY_STATE_EOF(SIP2): +case YY_STATE_EOF(SIP3): +case YY_STATE_EOF(DSSAMDXY): +case YY_STATE_EOF(PLTDECSN): +case YY_STATE_EOF(VALUE): +case YY_STATE_EOF(INTEGER_VAL): +case YY_STATE_EOF(FLOAT_VAL): +case YY_STATE_EOF(FLOAT2_VAL): +case YY_STATE_EOF(STRING_VAL): +case YY_STATE_EOF(RECORD_VAL): +case YY_STATE_EOF(RECFIELD): +case YY_STATE_EOF(RECCOLON): +case YY_STATE_EOF(RECVALUE): +case YY_STATE_EOF(RECEND): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(DISCARD): +case YY_STATE_EOF(ERROR): +case YY_STATE_EOF(FLUSH): +#line 2412 "wcspih.l" +{ + // End-of-input. + int status; + if (ipass == 1) { + if ((status = wcspih_init1(naxis, alts, dpq, npv, nps, ndp, ndq, + naux, distran, nwcs, wcs)) || + (*nwcs == 0 && ctrl == 0)) { + return status; + } + + if (2 < abs(ctrl%10)) { + if (*nwcs == 1) { + if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) { + wcsfprintf(stderr, "Found one coordinate representation.\n"); + } + } else { + wcsfprintf(stderr, "Found %d coordinate representations.\n", + *nwcs); + } + } + + watstr = calloc(2*(watn*68 + 1), sizeof(char)); + wat[0] = watstr; + wat[1] = watstr + watn*68 + 1; + } + + if (ipass++ < npass) { + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + keyrec = header; + *nreject = 0; + + i = j = 0; + m = 0; + a = ' '; + + valtype = -1; + distype = 0; + vptr = 0x0; + + altlin = 0; + npptr = 0x0; + chekval = 0x0; + special = 0x0; + auxprm = 0; + sipflag = 0; + dssflag = 0; + watflag = 0; + + yyrestart(yyin, yyscanner); + + } else { + + if (ctrl < 0) { + *hptr = '\0'; + } else if (ctrl == 1) { + wcsfprintf(stderr, "%d WCS keyrecord%s rejected.\n", + *nreject, (*nreject==1)?" was":"s were"); + } else if (ctrl == 4) { + wcsfprintf(stderr, "\n"); + wcsfprintf(stderr, "%5d keyrecord%s rejected for syntax or " + "other errors,\n", *nreject, (*nreject==1)?" was":"s were"); + wcsfprintf(stderr, "%5d %s recognized as syntactically valid, " + "and\n", nvalid, (nvalid==1)?"was":"were"); + wcsfprintf(stderr, "%5d other%s were not recognized as WCS " + "keyrecords.\n", nother, (nother==1)?"":"s"); + } + + status = wcspih_final(ndp, ndq, distran, dsstmp, wat, nwcs, wcs); + free(watstr); + return status; + } + } + YY_BREAK +case 293: +YY_RULE_SETUP +#line 2486 "wcspih.l" +ECHO; + YY_BREAK +#line 24922 "wcspih.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 2486 "wcspih.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcspih( + char *header, + int nkeyrec, + int relax, + int ctrl, + int *nreject, + int *nwcs, + struct wcsprm **wcs) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcspih_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcspih_scanner(header, nkeyrec, relax, ctrl, nreject, nwcs, + wcs, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + + +/*---------------------------------------------------------------------------- +* Determine the number of coordinate representations (up to 27) and the +* number of coordinate axes in each, which distortions are present, and the +* number of PVi_ma, PSi_ma, DPja, and DQia keywords in each representation. +*---------------------------------------------------------------------------*/ + +void wcspih_pass1( + int naxis, + int i, + int j, + char a, + int distype, + int alts[], + int dpq[], + int *npptr) + +{ + // On the first pass alts[] is used to determine the number of axes + // for each of the 27 possible alternate coordinate descriptions. + if (a == 0) { + return; + } + + int ialt = 0; + if (a != ' ') { + ialt = a - 'A' + 1; + } + + int *ip = alts + ialt; + + if (*ip < naxis) { + *ip = naxis; + } + + // i or j can be greater than naxis. + if (*ip < i) { + *ip = i; + } + + if (*ip < j) { + *ip = j; + } + + // Type of distortions present. + dpq[ialt] |= distype; + + // Count PVi_ma, PSi_ma, DPja, or DQia keywords. + if (npptr) { + npptr[ialt]++; + } +} + + +/*---------------------------------------------------------------------------- +* Allocate memory for an array of the required number of wcsprm structs and +* initialize each of them. +*---------------------------------------------------------------------------*/ + +int wcspih_init1( + int naxis, + int alts[], + int dpq[], + int npv[], + int nps[], + int ndp[], + int ndq[], + int naux, + int distran, + int *nwcs, + struct wcsprm **wcs) + +{ + int status = 0; + + // Find the number of coordinate descriptions. + *nwcs = 0; + for (int ialt = 0; ialt < 27; ialt++) { + if (alts[ialt]) (*nwcs)++; + } + + int defaults; + if ((defaults = !(*nwcs) && naxis)) { + // NAXIS is non-zero but there were no WCS keywords with an alternate + // version code; create a default WCS with blank alternate version. + wcspih_pass1(naxis, 0, 0, ' ', 0, alts, dpq, 0x0); + *nwcs = 1; + } + + if (*nwcs) { + // Allocate memory for the required number of wcsprm structs. + if ((*wcs = calloc(*nwcs, sizeof(struct wcsprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + int ndis = 0; + if (distran == SIP) { + // DPja.NAXES and DPja.OFFSET.j to be added for SIP (see below and + // wcspih_final()). + ndp[0] += 6; + + } else if (distran == DSS) { + // DPja.NAXES to be added for DSS (see below and wcspih_final()). + ndq[0] += 2; + } + + // Initialize each wcsprm struct. + struct wcsprm *wcsp = *wcs; + *nwcs = 0; + for (int ialt = 0; ialt < 27; ialt++) { + if (alts[ialt]) { + wcsp->flag = -1; + int npvmax = npv[ialt]; + int npsmax = nps[ialt]; + if ((status = wcsinit(1, alts[ialt], wcsp, npvmax, npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Record in wcsname whether this is a default description. + if (defaults) { + strncpy(wcsp->wcsname, "DEFAULTS", 72); + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Any distortions present? + struct disprm *disp; + if (dpq[ialt] & 1) { + if ((disp = calloc(1, sizeof(struct disprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + // Attach it to linprm. Also inits it. + ndis++; + int ndpmax = ndp[ialt]; + disp->flag = -1; + lindist(1, &(wcsp->lin), disp, ndpmax); + } + + if (dpq[ialt] & 2) { + if ((disp = calloc(1, sizeof(struct disprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + // Attach it to linprm. Also inits it. + ndis++; + int ndpmax = ndq[ialt]; + disp->flag = -1; + lindist(2, &(wcsp->lin), disp, ndpmax); + } + + // On the second pass alts[] indexes the array of wcsprm structs. + alts[ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that there is no wcsprm for this alt. + alts[ialt] = -1; + } + } + + + // Translated distortion? Neither SIP nor DSS have alternates, so the + // presence of keywords for either (not both together), as flagged by + // distran, necessarily refers to the primary representation. + if (distran == SIP) { + strncpy((*wcs)->lin.dispre->dtype[0], "SIP", 72); + strncpy((*wcs)->lin.dispre->dtype[1], "SIP", 72); + + // SIP doesn't have axis mapping. + (*wcs)->lin.dispre->ndp = 6; + dpfill((*wcs)->lin.dispre->dp, "DP1", "NAXES", 0, 0, 2, 0.0); + dpfill((*wcs)->lin.dispre->dp+3, "DP2", "NAXES", 0, 0, 2, 0.0); + + } else if (distran == DSS) { + strncpy((*wcs)->lin.disseq->dtype[0], "DSS", 72); + strncpy((*wcs)->lin.disseq->dtype[1], "DSS", 72); + + // The Paper IV translation of DSS doesn't require an axis mapping. + (*wcs)->lin.disseq->ndp = 2; + dpfill((*wcs)->lin.disseq->dp, "DQ1", "NAXES", 0, 0, 2, 0.0); + dpfill((*wcs)->lin.disseq->dp+1, "DQ2", "NAXES", 0, 0, 2, 0.0); + } + } + + return status; +} + + +/*---------------------------------------------------------------------------- +* Interpret the JDREF, JDREFI, and JDREFF keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_jdref(double *mjdref, const double *jdref) + +{ + // Set MJDREF from JDREF. + if (undefined(mjdref[0] && undefined(mjdref[1]))) { + mjdref[0] = jdref[0] - 2400000.0; + mjdref[1] = jdref[1] - 0.5; + + if (mjdref[1] < 0.0) { + mjdref[0] -= 1.0; + mjdref[1] += 1.0; + } + } + + return 0; +} + +int wcspih_jdrefi(double *mjdref, const double *jdrefi) + +{ + // Set the integer part of MJDREF from JDREFI. + if (undefined(mjdref[0])) { + mjdref[0] = *jdrefi - 2400000.5; + } + + return 0; +} + + +int wcspih_jdreff(double *mjdref, const double *jdreff) + +{ + // Set the fractional part of MJDREF from JDREFF. + if (undefined(mjdref[1])) { + mjdref[1] = *jdreff; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret EPOCHa keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_epoch(double *equinox, const double *epoch) + +{ + // If EQUINOXa is currently undefined then set it from EPOCHa. + if (undefined(*equinox)) { + *equinox = *epoch; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret VSOURCEa keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_vsource(double *zsource, const double *vsource) + +{ + const double c = 299792458.0; + + // If ZSOURCEa is currently undefined then set it from VSOURCEa. + if (undefined(*zsource)) { + // Convert relativistic Doppler velocity to redshift. + double beta = *vsource/c; + *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Check validity of a TIMEPIXR keyvalue. +*---------------------------------------------------------------------------*/ + +int wcspih_timepixr(double timepixr) + +{ + return (timepixr < 0.0 || 1.0 < timepixr); +} + + +/*---------------------------------------------------------------------------- +* Interpret special keywords encountered for each coordinate representation. +*---------------------------------------------------------------------------*/ + +int wcspih_final( + int ndp[], + int ndq[], + int distran, + double dsstmp[], + char *wat[], + int *nwcs, + struct wcsprm **wcs) + +{ + for (int ialt = 0; ialt < *nwcs; ialt++) { + // Interpret -TAB header keywords. + int status; + if ((status = wcstab(*wcs+ialt))) { + wcsvfree(nwcs, wcs); + return status; + } + + if (ndp[ialt] && ndq[ialt]) { + // Prior and sequent distortions co-exist in this representation; + // ensure the latter gets DVERRa. + (*wcs+ialt)->lin.disseq->totdis = (*wcs+ialt)->lin.dispre->totdis; + } + } + + // Translated distortion functions; apply only to the primary WCS. + struct wcsprm *wcsp = *wcs; + if (distran == SIP) { + // SIP doesn't have alternates, nor axis mapping. + struct disprm *disp = wcsp->lin.dispre; + dpfill(disp->dp+1, "DP1", "OFFSET.1", 0, 1, 0, wcsp->crpix[0]); + dpfill(disp->dp+2, "DP1", "OFFSET.2", 0, 1, 0, wcsp->crpix[1]); + dpfill(disp->dp+4, "DP2", "OFFSET.1", 0, 1, 0, wcsp->crpix[0]); + dpfill(disp->dp+5, "DP2", "OFFSET.2", 0, 1, 0, wcsp->crpix[1]); + + } else if (distran == DSS) { + // DSS doesn't have alternates, nor axis mapping. This translation + // follows Paper IV, Sect. 5.2 using the same variable names. + double CNPIX1 = dsstmp[0]; + double CNPIX2 = dsstmp[1]; + + double Xc = dsstmp[2]/1000.0; + double Yc = dsstmp[3]/1000.0; + double Rx = dsstmp[4]/1000.0; + double Ry = dsstmp[5]/1000.0; + + double A1 = dsstmp[14]; + double A2 = dsstmp[15]; + double A3 = dsstmp[16]; + double B1 = dsstmp[17]; + double B2 = dsstmp[18]; + double B3 = dsstmp[19]; + double S = sqrt(fabs(A1*B1 - A2*B2)); + + double X0 = (A2*B3 - A3*B1) / (A1*B1 - A2*B2); + double Y0 = (A3*B2 - A1*B3) / (A1*B1 - A2*B2); + + wcsp->crpix[0] = (Xc - X0)/Rx - (CNPIX1 - 0.5); + wcsp->crpix[1] = (Yc + Y0)/Ry - (CNPIX2 - 0.5); + + wcsp->pc[0] = A1*Rx/S; + wcsp->pc[1] = -A2*Ry/S; + wcsp->pc[2] = -B2*Rx/S; + wcsp->pc[3] = B1*Ry/S; + wcsp->altlin = 1; + + wcsp->cdelt[0] = -S/3600.0; + wcsp->cdelt[1] = S/3600.0; + + double *crval = wcsp->crval; + crval[0] = (dsstmp[6] + (dsstmp[7] + dsstmp[8] /60.0)/60.0)*15.0; + crval[1] = dsstmp[10] + (dsstmp[11] + dsstmp[12]/60.0)/60.0; + if (dsstmp[9] == -1.0) crval[1] *= -1.0; + + strncpy(wcsp->ctype[0], "RA---TAN", 72); + strncpy(wcsp->ctype[1], "DEC--TAN", 72); + + sprintf(wcsp->wcsname, "DSS PLATEID %.4s", (char *)(dsstmp+13)); + + // Erase the approximate WCS provided in modern DSS headers. + wcsp->cd[0] = 0.0; + wcsp->cd[1] = 0.0; + wcsp->cd[2] = 0.0; + wcsp->cd[3] = 0.0; + + } else if (distran == WAT) { + // TNX and ZPX don't have alternates, nor axis mapping. + char *wp; + int omax, omin, wctrl[4]; + double wval; + struct disprm *disp = wcsp->lin.disseq; + + // Disassemble the core dump stored in the WATi_m strings. + int i, nterms = 0; + for (i = 0; i < 2; i++) { + char wtype[8]; + sscanf(wat[i], "wtype=%s", wtype); + + if (strcmp(wtype, "tnx") == 0) { + strncpy(disp->dtype[i], "WAT-TNX", 72); + } else if (strcmp(wtype, "zpx") == 0) { + strncpy(disp->dtype[i], "WAT-ZPX", 72); + } else { + // Could contain "tan" or something else to be ignored. + lindist(2, &(wcsp->lin), 0x0, 0); + return 0; + } + + // The PROJPn parameters are duplicated on each ZPX axis. + if (i == 1 && strcmp(wtype, "zpx") == 0) { + // Take those on the second (latitude) axis ignoring the other. + // First we have to count them and allocate space in wcsprm. + wp = wat[i]; + int npv; + for (npv = 0; npv < 30; npv++) { + if ((wp = strstr(wp, "projp")) == 0x0) break; + wp += 5; + } + + // Allocate space. + if (npv) { + wcsp->npvmax += npv; + wcsp->pv = realloc(wcsp->pv, wcsp->npvmax*sizeof(struct pvcard)); + if (wcsp->pv == 0x0) { + return WCSHDRERR_MEMORY; + } + + wcsp->m_pv = wcsp->pv; + } + + // Copy the values. + wp = wat[i]; + for (int ipv = wcsp->npv; ipv < wcsp->npvmax; ipv++) { + if ((wp = strstr(wp, "projp")) == 0x0) break; + + int m; + sscanf(wp, "projp%d=%lf", &m, &wval); + wcsp->pv[ipv].i = 2; + wcsp->pv[ipv].m = m; + wcsp->pv[ipv].value = wval; + + wp += 5; + } + + wcsp->npv += npv; + } + + // Read the control parameters. + if ((wp = strchr(wat[i], '"')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + + for (int m = 0; m < 4; m++) { + sscanf(wp, "%d", wctrl+m); + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // How many coefficients are we expecting? + omin = (wctrl[1] < wctrl[2]) ? wctrl[1] : wctrl[2]; + omax = (wctrl[1] < wctrl[2]) ? wctrl[2] : wctrl[1]; + if (wctrl[3] == 0) { + // No cross terms. + nterms += omin + omax; + + } else if (wctrl[3] == 1) { + // Full cross terms. + nterms += omin*omax; + + } else if (wctrl[3] == 2) { + // Half cross terms. + nterms += omin*omax - omin*(omin-1)/2; + } + } + + // Allocate memory for dpkeys. + ndq[0] += 2*(1 + 1 + 4) + nterms; + + disp->ndpmax += ndq[0]; + disp->dp = realloc(disp->dp, disp->ndpmax*sizeof(struct dpkey)); + if (disp->dp == 0x0) { + return WCSHDRERR_MEMORY; + } + + disp->m_dp = disp->dp; + + + // Populate dpkeys. + int idp = disp->ndp; + for (i = 0; i < 2; i++) { + dpfill(disp->dp+(idp++), "DQ", "NAXES", i+1, 0, 2, 0.0); + + // Read the control parameters. + if ((wp = strchr(wat[i], '"')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + + for (int m = 0; m < 4; m++) { + sscanf(wp, "%d", wctrl+m); + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // Polynomial type. + char wpoly[12]; + dpfill(disp->dp+(idp++), "DQ", "WAT.POLY", i+1, 0, wctrl[0], 0.0); + if (wctrl[0] == 1) { + // Chebyshev polynomial. + strncpy(wpoly, "CHBY", 12); + } else if (wctrl[0] == 2) { + // Legendre polynomial. + strncpy(wpoly, "LEGR", 12); + } else if (wctrl[0] == 3) { + // Polynomial is the sum of monomials. + strncpy(wpoly, "MONO", 12); + } else { + // Unknown code. + strncpy(wpoly, "UNKN", 12); + } + + // Read the scaling parameters. + char field[40]; + for (int m = 0; m < 4; m++) { + sscanf(wp, "%lf", &wval); + sprintf(field, "WAT.%c%s", (m<2)?'X':'Y', (m%2)?"MAX":"MIN"); + dpfill(disp->dp+(idp++), "DQ", field, i+1, 1, 0, wval); + + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // Read the coefficients. + for (int n = 0; n < wctrl[2]; n++) { + for (int m = 0; m < wctrl[1]; m++) { + if (wctrl[3] == 0) { + if (m && n) continue; + } else if (wctrl[3] == 2) { + if (m+n > omax-1) continue; + } + + sscanf(wp, "%lf", &wval); + if (wval == 0.0) continue; + + sprintf(field, "WAT.%s.%d_%d", wpoly, m, n); + dpfill(disp->dp+(idp++), "DQ", field, i+1, 1, 0, wval); + + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + } + } + + disp->ndp = idp; + } + + return 0; +} + diff --git a/deps/wcslib/C/flexed/wcsulex.c b/deps/wcslib/C/flexed/wcsulex.c new file mode 100644 index 0000000..a3a0af4 --- /dev/null +++ b/deps/wcslib/C/flexed/wcsulex.c @@ -0,0 +1,10003 @@ +#line 2 "wcsulex.c" + +#line 4 "wcsulex.c" + +#define _POSIX_C_SOURCE 1 +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define wcsulex_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wcsulex_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wcsulex_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wcsulex_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wcsulex_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wcsulex_scan_buffer +#endif + +#ifdef yy_scan_string +#define wcsulex_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wcsulex_scan_string +#endif + +#ifdef yy_scan_bytes +#define wcsulex_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wcsulex_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wcsulex_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wcsulex_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wcsulex_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wcsulex_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wcsulex_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wcsulex_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wcsulex_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wcsulex_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wcsulexpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wcsulexpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wcsulexpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wcsulexpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wcsulexensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wcsulexensure_buffer_stack +#endif + +#ifdef yylex +#define wcsulexlex_ALREADY_DEFINED +#else +#define yylex wcsulexlex +#endif + +#ifdef yyrestart +#define wcsulexrestart_ALREADY_DEFINED +#else +#define yyrestart wcsulexrestart +#endif + +#ifdef yylex_init +#define wcsulexlex_init_ALREADY_DEFINED +#else +#define yylex_init wcsulexlex_init +#endif + +#ifdef yylex_init_extra +#define wcsulexlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wcsulexlex_init_extra +#endif + +#ifdef yylex_destroy +#define wcsulexlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wcsulexlex_destroy +#endif + +#ifdef yyget_debug +#define wcsulexget_debug_ALREADY_DEFINED +#else +#define yyget_debug wcsulexget_debug +#endif + +#ifdef yyset_debug +#define wcsulexset_debug_ALREADY_DEFINED +#else +#define yyset_debug wcsulexset_debug +#endif + +#ifdef yyget_extra +#define wcsulexget_extra_ALREADY_DEFINED +#else +#define yyget_extra wcsulexget_extra +#endif + +#ifdef yyset_extra +#define wcsulexset_extra_ALREADY_DEFINED +#else +#define yyset_extra wcsulexset_extra +#endif + +#ifdef yyget_in +#define wcsulexget_in_ALREADY_DEFINED +#else +#define yyget_in wcsulexget_in +#endif + +#ifdef yyset_in +#define wcsulexset_in_ALREADY_DEFINED +#else +#define yyset_in wcsulexset_in +#endif + +#ifdef yyget_out +#define wcsulexget_out_ALREADY_DEFINED +#else +#define yyget_out wcsulexget_out +#endif + +#ifdef yyset_out +#define wcsulexset_out_ALREADY_DEFINED +#else +#define yyset_out wcsulexset_out +#endif + +#ifdef yyget_leng +#define wcsulexget_leng_ALREADY_DEFINED +#else +#define yyget_leng wcsulexget_leng +#endif + +#ifdef yyget_text +#define wcsulexget_text_ALREADY_DEFINED +#else +#define yyget_text wcsulexget_text +#endif + +#ifdef yyget_lineno +#define wcsulexget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wcsulexget_lineno +#endif + +#ifdef yyset_lineno +#define wcsulexset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wcsulexset_lineno +#endif + +#ifdef yyget_column +#define wcsulexget_column_ALREADY_DEFINED +#else +#define yyget_column wcsulexget_column +#endif + +#ifdef yyset_column +#define wcsulexset_column_ALREADY_DEFINED +#else +#define yyset_column wcsulexset_column +#endif + +#ifdef yywrap +#define wcsulexwrap_ALREADY_DEFINED +#else +#define yywrap wcsulexwrap +#endif + +#ifdef yyalloc +#define wcsulexalloc_ALREADY_DEFINED +#else +#define yyalloc wcsulexalloc +#endif + +#ifdef yyrealloc +#define wcsulexrealloc_ALREADY_DEFINED +#else +#define yyrealloc wcsulexrealloc +#endif + +#ifdef yyfree +#define wcsulexfree_ALREADY_DEFINED +#else +#define yyfree wcsulexfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + +#define YY_LESS_LINENO(n) +#define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define wcsulexwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 16, 14, 14, 14, 14, 14, 14, 14, + 17, 14, 18, 14, 14, 14, 18, 19, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 20, 21, 22, 23, 24, + + 22, 25, 26, 14, 27, 28, 14, 24, 22, 29, + 30, 14, 31, 32, 33, 14, 22, 34, 14, 24, + 24, 14, 14, 35, 14, 14, 14, 36, 37, 38, + 39, 40, 41, 28, 42, 14, 14, 24, 43, 44, + 41, 29, 45, 14, 46, 47, 48, 49, 50, 14, + 14, 51, 41, 14, 14, 14, 14, 14 + }, + + { + 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 15, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 52, 14, 14, 14, 14, 14, 14, 14, + + 17, 14, 53, 14, 14, 14, 53, 19, 14, 54, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 20, 21, 22, 23, 24, + 22, 25, 26, 14, 27, 28, 14, 24, 22, 29, + 30, 14, 31, 32, 33, 14, 22, 34, 14, 24, + 24, 55, 14, 35, 14, 14, 14, 36, 37, 38, + 39, 56, 41, 28, 42, 14, 14, 24, 57, 44, + 41, 29, 45, 14, 46, 47, 48, 49, 50, 14, + 14, 51, 41, 14, 14, 14, 14, 14 + }, + + { + 13, 58, 58, 58, 58, 58, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 59, 60, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58 + }, + + { + 13, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 59, 60, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58 + }, + + { + 13, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 15, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, + 61, 63, 61, 61, 61, 61, 61, 64, 61, 61, + 65, 61, 61, 61, 66, 61, 61, 61, 61, 67, + 68, 61, 61, 61, 61, 61, 61, 69, 61, 70, + 71, 61, 72, 61, 73, 61, 61, 74, 61, 75, + 76, 61, 77, 61, 61, 61, 61, 78, 61, 61, + 61, 79, 80, 61, 61, 61, 61, 61 + }, + + { + 13, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 15, 61, 61, 61, 61, 61, 61, 61, 61, 61, + + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, + 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, + 61, 63, 61, 61, 61, 61, 61, 64, 61, 61, + 65, 61, 61, 61, 66, 61, 61, 61, 61, 67, + 68, 61, 61, 61, 61, 61, 61, 69, 61, 70, + 71, 61, 72, 61, 73, 61, 61, 74, 61, 75, + 76, 61, 77, 61, 61, 61, 61, 78, 61, 61, + + 61, 79, 80, 61, 61, 61, 61, 61 + }, + + { + 13, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 15, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 82, 83, 84, 85, 81, + 86, 87, 88, 81, 89, 90, 81, 81, 91, 92, + 93, 81, 94, 95, 96, 81, 97, 98, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 99, 100, 101, + 102, 103, 81, 104, 105, 81, 81, 81, 106, 107, + 81, 92, 108, 81, 109, 110, 111, 112, 113, 81, + 81, 114, 81, 81, 81, 81, 81, 81 + }, + + { + 13, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 15, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 82, 83, 84, 85, 81, + 86, 87, 88, 81, 89, 90, 81, 81, 91, 92, + 93, 81, 94, 95, 96, 81, 97, 98, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 99, 100, 101, + 102, 103, 81, 104, 105, 81, 81, 81, 106, 107, + 81, 92, 108, 81, 109, 110, 111, 112, 113, 81, + 81, 114, 81, 81, 81, 81, 81, 81 + }, + + { + 13, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 15, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + + 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, + 117, 115, 118, 119, 115, 119, 120, 121, 115, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 123, 124, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115 + + }, + + { + 13, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 15, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 116, 115, 115, 115, 115, 115, 115, 115, + 117, 115, 118, 119, 115, 119, 120, 121, 115, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 123, 124, 115, 115, 115, 115, 115, + + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115 + }, + + { + 13, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 15, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125 + }, + + { + 13, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 15, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125 + }, + + { + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13 + }, + + { + 13, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14 + }, + + { + 13, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15 + }, + + { + 13, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, 126, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16 + }, + + { + 13, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17 + }, + + { + 13, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18 + }, + + { + 13, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19 + + }, + + { + 13, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, 127, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + 128, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20 + }, + + { + 13, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, 129, -21, -21, -21, -21, -21, -21 + }, + + { + 13, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22 + }, + + { + 13, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23 + }, + + { + 13, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, 130, 131, 132, -24, -24, + 132, 133, 134, -24, 135, 130, -24, -24, 132, 136, + + 137, -24, 133, 132, 132, -24, 132, 138, -24, -24, + -24, -24, -24, -24, -24, -24, -24, 139, 140, 141, + -24, 142, -24, 130, -24, -24, -24, -24, 143, 144, + -24, 136, 145, -24, 146, 147, -24, -24, -24, -24, + -24, 148, -24, -24, -24, -24, -24, -24 + }, + + { + 13, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, 130, 131, 132, -25, -25, + 132, 133, 134, -25, 135, 130, -25, -25, 132, 136, + 137, -25, 133, 132, 132, -25, 132, 138, -25, -25, + -25, -25, -25, -25, -25, -25, -25, 139, 140, 141, + -25, 142, -25, 130, -25, -25, -25, -25, 143, 144, + -25, 136, 145, -25, 146, 147, -25, -25, -25, -25, + -25, 148, -25, -25, -25, -25, -25, -25 + }, + + { + 13, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, 149, -26, -26, -26, -26, -26 + }, + + { + 13, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, 150, -27, -27, -27, -27, -27, -27 + }, + + { + 13, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28 + }, + + { + 13, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, 151, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29 + + }, + + { + 13, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, 130, 131, 132, -30, -30, + 132, 133, 134, -30, 135, 130, -30, -30, 132, 136, + 137, -30, 133, 132, 132, -30, 132, 138, -30, -30, + -30, -30, -30, -30, -30, -30, -30, 152, 140, 141, + + -30, 142, -30, 130, -30, -30, -30, -30, 143, 144, + -30, 136, 145, -30, 146, 147, -30, -30, -30, -30, + -30, 148, -30, -30, -30, -30, -30, -30 + }, + + { + 13, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, 153, -31, -31, -31, -31, -31, -31 + }, + + { + 13, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, 154, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32 + }, + + { + 13, -33, -33, -33, -33, -33, -33, -33, -33, -33, + + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, 130, 131, 132, -33, -33, + 132, 133, 134, -33, 135, 130, -33, -33, 132, 136, + 137, -33, 133, 132, 132, -33, 132, 138, -33, -33, + -33, -33, -33, -33, -33, -33, -33, 139, 140, 141, + -33, 142, -33, 130, -33, -33, -33, -33, 143, 144, + + -33, 136, 145, -33, 146, 147, -33, -33, -33, -33, + -33, 148, -33, -33, -33, -33, -33, -33 + }, + + { + 13, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, 149, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34 + }, + + { + 13, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35 + }, + + { + 13, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, 130, -36, 132, -36, -36, + 132, 133, 134, -36, 135, 130, -36, -36, 132, 136, + 137, -36, 133, 132, 132, -36, 132, 138, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, 155, 141, + 156, 142, -36, 130, -36, -36, -36, -36, 143, 157, + 128, 136, -36, -36, 158, 147, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36 + }, + + { + 13, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + + -37, -37, -37, -37, -37, -37, -37, 159, -37, -37, + -37, 160, -37, -37, -37, 161, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, 129, -37, -37, -37, -37, -37, -37 + }, + + { + 13, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + + -38, -38, -38, -38, -38, 130, -38, 132, -38, -38, + 132, 133, 134, -38, 135, 130, -38, -38, 132, 136, + 137, -38, 133, 132, 132, -38, 132, 138, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, 155, 141, + 162, 142, -38, 130, 163, -38, -38, -38, 143, 157, + -38, 164, -38, -38, 146, 147, 165, -38, -38, -38, + -38, 153, -38, -38, -38, -38, -38, -38 + }, + + { + 13, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39, -39, -39, + -39, -39, -39, -39, -39, 130, -39, 132, -39, -39, + 132, 133, 134, -39, 135, 130, -39, -39, 132, 136, + 137, -39, 133, 132, 132, -39, 132, 138, -39, -39, + -39, -39, -39, -39, -39, -39, -39, 166, 155, 141, + -39, 167, -39, 130, -39, -39, -39, -39, 143, 157, + -39, 136, -39, -39, 146, 147, -39, -39, -39, -39, + -39, -39, -39, -39, -39, -39, -39, -39 + + }, + + { + 13, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, 150, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, 168, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40 + }, + + { + 13, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, -41, -41, + -41, -41, -41, -41, -41, 130, -41, 132, -41, -41, + + 132, 133, 134, -41, 135, 130, -41, -41, 132, 136, + 137, -41, 133, 132, 132, -41, 132, 138, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41, 155, 141, + -41, 142, -41, 130, -41, -41, -41, -41, 143, 157, + -41, 136, -41, -41, 146, 147, -41, -41, -41, -41, + -41, -41, -41, -41, -41, -41, -41, -41 + }, + + { + 13, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, 130, 131, 132, -42, -42, + 132, 133, 134, -42, 135, 130, -42, -42, 132, 136, + 137, -42, 133, 132, 132, -42, 132, 138, -42, -42, + -42, -42, -42, -42, -42, -42, -42, 139, 140, 141, + -42, 142, -42, 130, -42, -42, -42, -42, 143, 144, + -42, 136, 145, -42, 146, 147, -42, -42, -42, -42, + -42, 148, -42, -42, -42, -42, -42, -42 + }, + + { + 13, -43, -43, -43, -43, -43, -43, -43, -43, -43, + + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, 149, + + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + 149, 169, -43, -43, -43, -43, -43, -43 + }, + + { + 13, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, 130, -44, 132, -44, -44, + 132, 133, 134, -44, 135, 130, -44, -44, 132, 136, + + 137, -44, 133, 132, 132, -44, 132, 138, -44, -44, + -44, -44, -44, -44, -44, -44, -44, 170, 155, 141, + -44, 142, -44, 130, -44, 171, -44, -44, 143, 157, + -44, 172, -44, -44, 146, 147, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44 + }, + + { + 13, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, 130, -45, 132, -45, -45, + 132, 133, 134, -45, 135, 130, -45, -45, 132, 136, + 137, -45, 133, 132, 132, -45, 132, 138, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, 155, 173, + -45, 142, -45, 130, 174, 175, -45, -45, 143, 157, + -45, 136, -45, -45, 146, 147, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45 + }, + + { + 13, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, 176, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + + -46, -46, -46, -46, -46, -46, -46, -46 + }, + + { + 13, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, 177, -47, 178, 162, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47 + }, + + { + 13, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, 179, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48 + }, + + { + 13, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, 130, -49, 132, -49, -49, + 132, 133, 134, -49, 135, 130, -49, -49, 132, 136, + 137, -49, 133, 132, 132, -49, 132, 138, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, 155, 141, + -49, 142, -49, 130, -49, -49, -49, -49, 143, 157, + -49, 136, -49, -49, 146, 147, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49 + + }, + + { + 13, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, 180, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50 + }, + + { + 13, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, 130, -51, 132, -51, -51, + + 132, 133, 134, -51, 135, 130, -51, -51, 132, 136, + 137, -51, 133, 132, 132, -51, 132, 138, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, 155, 141, + -51, 142, -51, 130, -51, -51, -51, -51, 143, 157, + -51, 136, -51, -51, 181, 147, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51 + }, + + { + 13, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, 182, -52, -52, -52, -52, -52, -52, -52, + + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52 + }, + + { + 13, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53 + }, + + { + 13, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, 183, 184, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54 + }, + + { + 13, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55 + }, + + { + 13, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, 150, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, 168, -56, -56, -56, -56, -56, + + 185, -56, -56, -56, -56, -56, -56, -56 + }, + + { + 13, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, 149, + 186, 187, -57, -57, -57, -57, -57, -57, -57, -57, + 149, 169, -57, -57, -57, -57, -57, -57 + }, + + { + 13, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + -58, -58, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188 + }, + + { + 13, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59 + + }, + + { + 13, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60 + }, + + { + 13, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61 + }, + + { + 13, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62 + }, + + { + 13, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63 + }, + + { + 13, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64 + }, + + { + 13, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65 + }, + + { + 13, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66 + }, + + { + 13, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67 + }, + + { + 13, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68 + }, + + { + 13, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69 + + }, + + { + 13, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70 + }, + + { + 13, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, 189, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71 + }, + + { + 13, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72 + }, + + { + 13, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73 + }, + + { + 13, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74 + }, + + { + 13, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75 + }, + + { + 13, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76 + }, + + { + 13, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77 + }, + + { + 13, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78 + }, + + { + 13, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79 + + }, + + { + 13, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80 + }, + + { + 13, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81 + }, + + { + 13, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, 190, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + 191, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 13, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, 192, -83, -83, -83, -83, -83, -83 + }, + + { + 13, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84 + }, + + { + 13, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 13, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86 + }, + + { + 13, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 13, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, 193, -88, -88, -88, -88, -88 + }, + + { + 13, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, 194, -89, -89, -89, -89, -89, -89 + + }, + + { + 13, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 13, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91 + }, + + { + 13, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, 195, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92 + }, + + { + 13, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, 196, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 13, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, 197, -94, -94, -94, -94, -94, -94 + }, + + { + 13, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, 198, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95 + }, + + { + 13, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96 + }, + + { + 13, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97 + }, + + { + 13, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, 199, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98 + }, + + { + 13, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + 200, -99, -99, -99, -99, -99, -99, -99, -99, -99, + 191, -99, -99, -99, 201, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99 + + }, + + { + 13, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, 202, -100, -100, + + -100, 203, -100, -100, -100, 204, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, 192, -100, -100, -100, -100, -100, -100 + }, + + { + 13, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + 205, -101, -101, -101, 206, -101, -101, -101, -101, -101, + -101, 207, -101, -101, -101, -101, 208, -101, -101, -101, + -101, 209, -101, -101, -101, -101, -101, -101 + }, + + { + 13, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, 210, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102 + }, + + { + 13, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, 211, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, 212, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103 + }, + + { + 13, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104 + }, + + { + 13, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105 + }, + + { + 13, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, 213, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + 214, 215, -106, -106, -106, -106, -106, -106 + }, + + { + 13, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + + -107, -107, -107, -107, -107, -107, -107, 216, -107, -107, + -107, -107, -107, -107, -107, 217, -107, -107, -107, -107, + -107, 218, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107 + }, + + { + 13, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, 219, + -108, -108, -108, -108, 220, 221, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108 + }, + + { + 13, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, 222, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109 + + }, + + { + 13, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, 223, -110, -110, 224, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110 + }, + + { + 13, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, 225, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111 + }, + + { + 13, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112 + }, + + { + 13, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, 226, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113 + }, + + { + 13, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, 227, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114 + }, + + { + 13, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115 + }, + + { + 13, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, 228, -116, -116, -116, -116, -116, -116, -116, + 229, -116, 230, 231, -116, 231, 232, 233, -116, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, 235, 236, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116 + }, + + { + 13, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, 237, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, 238, -117, 238, 239, -117, 240, 241, + 241, 241, 241, 241, 241, 241, 241, 241, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117 + }, + + { + 13, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, 242, -118, -118, -118, -118, -118, -118, -118, + -118, -118, 236, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118 + }, + + { + 13, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119 + + }, + + { + 13, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, 242, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120 + }, + + { + 13, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, 243, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121 + }, + + { + 13, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, -122, -122, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122 + }, + + { + 13, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123 + }, + + { + 13, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124 + }, + + { + 13, 245, 245, 245, 245, 245, 245, 245, 245, 245, + -125, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245 + }, + + { + 13, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, 126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126 + }, + + { + 13, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127 + }, + + { + 13, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, 246, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128 + }, + + { + 13, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, 247, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129 + + }, + + { + 13, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130 + }, + + { + 13, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, 248, -131, -131, -131, -131, -131, -131 + }, + + { + 13, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132 + }, + + { + 13, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133 + }, + + { + 13, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, 132, -134, -134, -134, -134, -134 + }, + + { + 13, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, 133, -135, -135, -135, -135, -135, -135 + }, + + { + 13, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, 249, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136 + }, + + { + 13, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + + -137, -137, -137, -137, -137, -137, -137, 132, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137 + }, + + { + 13, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, 132, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138 + }, + + { + 13, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139 + + }, + + { + 13, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, 250, -140, -140, + + -140, -140, -140, -140, -140, 251, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, 248, -140, -140, -140, -140, -140, -140 + }, + + { + 13, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + 130, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141 + }, + + { + 13, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, 133, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142 + }, + + { + 13, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, 132, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + 132, -143, -143, -143, -143, -143, -143, -143 + }, + + { + 13, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, 252, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144 + }, + + { + 13, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, 139, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145 + }, + + { + 13, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, 253, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146 + }, + + { + 13, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, 130, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147 + }, + + { + 13, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, 139, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148 + }, + + { + 13, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149 + + }, + + { + 13, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150 + }, + + { + 13, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, 149, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151 + }, + + { + 13, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152 + }, + + { + 13, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153 + }, + + { + 13, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + 127, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154 + }, + + { + 13, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, 250, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155 + }, + + { + 13, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, 165, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156 + }, + + { + 13, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + + -157, -157, -157, -157, -157, -157, -157, 254, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, 252, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157 + }, + + { + 13, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, 253, -158, 255, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158 + }, + + { + 13, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, 256, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159 + + }, + + { + 13, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, 257, -160, -160, + + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160 + }, + + { + 13, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + 165, -161, -161, -161, -161, -161, 258, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161 + }, + + { + 13, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162 + }, + + { + 13, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, 259, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163 + }, + + { + 13, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, 249, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, 260, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164 + }, + + { + 13, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165 + }, + + { + 13, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, 130, 131, 132, -166, -166, + 132, 133, 134, -166, 135, 130, -166, -166, 132, 136, + 137, -166, 133, 132, 132, -166, 132, 138, -166, -166, + -166, -166, -166, -166, -166, -166, -166, 139, 140, 141, + -166, 142, -166, 130, -166, -166, -166, -166, 143, 144, + -166, 136, 145, -166, 146, 147, -166, -166, -166, -166, + + -166, 148, -166, -166, -166, -166, -166, -166 + }, + + { + 13, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, 133, -167, -167, -167, + + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, 153, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167 + }, + + { + 13, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, 153, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168 + }, + + { + 13, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, 127, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169 + + }, + + { + 13, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + + -170, -170, -170, 150, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, 153, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170 + }, + + { + 13, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + 153, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171 + }, + + { + 13, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, 249, -172, -172, -172, 162, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172 + }, + + { + 13, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + 130, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173 + }, + + { + 13, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, 261, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174 + }, + + { + 13, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + 262, -175, -175, -175, -175, -175, -175, -175 + }, + + { + 13, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + 162, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176 + }, + + { + 13, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, 263, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177 + }, + + { + 13, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, 264, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178 + }, + + { + 13, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, 265, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179 + + }, + + { + 13, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + 266, -180, -180, -180, -180, -180, -180, -180 + }, + + { + 13, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, 253, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181 + }, + + { + 13, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, 182, -182, -182, -182, -182, -182, -182, -182, + + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182 + }, + + { + 13, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183 + }, + + { + 13, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, 267, 267, + 267, 267, 267, 267, 267, 267, 267, 267, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184 + }, + + { + 13, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, 268, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185 + }, + + { + 13, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, 269, -186, -186, -186, -186, -186, -186, -186, + 270, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186 + }, + + { + 13, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, 271, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187 + }, + + { + 13, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + -188, -188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188 + }, + + { + 13, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189 + + }, + + { + 13, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190 + }, + + { + 13, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, 272, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191 + }, + + { + 13, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, 273, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192 + }, + + { + 13, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193 + }, + + { + 13, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194 + }, + + { + 13, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, 274, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195 + }, + + { + 13, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196 + }, + + { + 13, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197 + }, + + { + 13, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + 275, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198 + }, + + { + 13, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199 + + }, + + { + 13, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, 276, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200 + }, + + { + 13, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, 277, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201 + }, + + { + 13, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, 278, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202 + }, + + { + 13, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, 279, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203 + }, + + { + 13, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + 280, -204, -204, -204, -204, -204, 281, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204 + }, + + { + 13, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205 + }, + + { + 13, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, 282, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206 + }, + + { + 13, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, 283, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207 + }, + + { + 13, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208 + }, + + { + 13, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209 + + }, + + { + 13, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + + -210, -210, -210, 284, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210 + }, + + { + 13, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211 + }, + + { + 13, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, 285, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212 + }, + + { + 13, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 + }, + + { + 13, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214 + }, + + { + 13, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, 286, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215 + }, + + { + 13, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, 287, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, 288, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216 + }, + + { + 13, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + 289, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217 + }, + + { + 13, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, 290, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218 + }, + + { + 13, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219 + + }, + + { + 13, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, 291, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220 + }, + + { + 13, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + 292, -221, -221, -221, -221, -221, -221, -221 + }, + + { + 13, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + 293, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222 + }, + + { + 13, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, 294, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223 + }, + + { + 13, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224 + }, + + { + 13, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, 295, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225 + }, + + { + 13, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + 296, -226, -226, -226, -226, -226, -226, -226 + }, + + { + 13, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227 + }, + + { + 13, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, 228, -228, -228, -228, -228, -228, -228, -228, + 229, -228, 230, 231, -228, 231, 232, 233, -228, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -228, -228, + + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, 235, 236, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228 + }, + + { + 13, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + + -229, -229, 237, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, 238, -229, 238, 239, -229, 240, 241, + 241, 241, 241, 241, 241, 241, 241, 241, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229 + + }, + + { + 13, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, 242, -230, -230, -230, -230, -230, -230, -230, + -230, -230, 236, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230 + }, + + { + 13, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231 + }, + + { + 13, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, 242, -232, -232, -232, -232, -232, -232, -232, + + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232 + }, + + { + 13, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, 243, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233 + }, + + { + 13, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234 + }, + + { + 13, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235 + }, + + { + 13, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236 + }, + + { + 13, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, 237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, 238, -237, 238, 239, -237, 240, 241, + 241, 241, 241, 241, 241, 241, 241, 241, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237 + }, + + { + 13, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, 239, -238, 240, 241, + 241, 241, 241, 241, 241, 241, 241, 241, -238, -238, + + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238 + }, + + { + 13, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 297, 297, + 297, 297, 297, 297, 297, 297, 297, 297, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239 + + }, + + { + 13, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, 298, -240, -240, -240, -240, -240, -240, -240, + -240, 299, -240, -240, -240, -240, 300, -240, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240 + }, + + { + 13, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, 302, -241, -241, -241, -241, -241, -241, -241, + -241, 303, -241, -241, -241, -241, 300, 304, 305, 305, + 305, 305, 305, 305, 305, 305, 305, 305, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241 + }, + + { + 13, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, 242, -242, -242, -242, -242, -242, -242, -242, + + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242 + }, + + { + 13, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, 243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243 + }, + + { + 13, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244 + }, + + { + 13, 245, 245, 245, 245, 245, 245, 245, 245, 245, + -245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, + 245, 245, 245, 245, 245, 245, 245, 245 + }, + + { + 13, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, 306, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246 + }, + + { + 13, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, 258, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247 + }, + + { + 13, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, 307, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248 + }, + + { + 13, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, 132, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249 + + }, + + { + 13, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, 308, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250 + }, + + { + 13, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, 139, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251 + }, + + { + 13, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, 130, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252 + }, + + { + 13, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + 130, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253 + }, + + { + 13, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, 309, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254 + }, + + { + 13, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, 310, + -255, -255, -255, -255, -255, 311, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255 + }, + + { + 13, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + 150, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256 + }, + + { + 13, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, 127, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257 + }, + + { + 13, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258 + }, + + { + 13, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + 165, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259 + + }, + + { + 13, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + 312, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260 + }, + + { + 13, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, 313, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261 + }, + + { + 13, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, 314, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262 + }, + + { + 13, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, 315, 316, -263, -263, + -263, -263, 317, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263 + }, + + { + 13, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, 318, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264 + }, + + { + 13, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + 153, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265 + }, + + { + 13, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, 319, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266 + }, + + { + 13, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267 + }, + + { + 13, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, 320, -268, -268, -268, -268, -268, -268, -268, + 321, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268 + }, + + { + 13, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + + -269, -269, 269, -269, -269, -269, -269, -269, -269, -269, + 270, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269 + + }, + + { + 13, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270 + }, + + { + 13, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, 322, -271, -271, -271, -271, -271, -271, -271, + 323, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271 + }, + + { + 13, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, 324, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272 + }, + + { + 13, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, 325, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273 + }, + + { + 13, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274 + }, + + { + 13, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275 + }, + + { + 13, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276 + }, + + { + 13, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, 326, + -277, -277, -277, -277, -277, 327, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277 + }, + + { + 13, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + 328, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278 + }, + + { + 13, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, 329, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279 + + }, + + { + 13, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280 + }, + + { + 13, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281 + }, + + { + 13, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + 330, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282 + }, + + { + 13, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + 331, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283 + }, + + { + 13, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 + }, + + { + 13, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285 + }, + + { + 13, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286 + }, + + { + 13, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287 + }, + + { + 13, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288 + }, + + { + 13, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289 + + }, + + { + 13, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290 + }, + + { + 13, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, 332, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291 + }, + + { + 13, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, 333, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292 + }, + + { + 13, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293 + }, + + { + 13, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, 334, 335, -294, -294, + + -294, -294, 336, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294 + }, + + { + 13, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + 337, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295 + }, + + { + 13, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, 338, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296 + }, + + { + 13, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, 298, -297, -297, -297, -297, -297, -297, -297, + -297, 299, -297, -297, -297, -297, -297, -297, 297, 297, + 297, 297, 297, 297, 297, 297, 297, 297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297 + }, + + { + 13, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, 298, -298, -298, -298, -298, -298, -298, -298, + -298, 299, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298 + }, + + { + 13, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299 + + }, + + { + 13, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, 298, -300, -300, -300, -300, -300, -300, -300, + -300, 299, -300, -300, -300, -300, -300, -300, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300 + }, + + { + 13, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, 298, -301, -301, -301, -301, -301, -301, -301, + -301, 299, -301, -301, -301, -301, 300, -301, 301, 301, + 301, 301, 301, 301, 301, 301, 301, 301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301 + }, + + { + 13, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, 302, -302, -302, -302, -302, -302, -302, -302, + + -302, 303, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302 + }, + + { + 13, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303 + }, + + { + 13, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, 340, + 340, 340, 340, 340, 340, 340, 340, 340, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304 + }, + + { + 13, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, 302, -305, -305, -305, -305, -305, -305, -305, + -305, 303, -305, -305, -305, -305, 300, 304, 305, 305, + + 305, 305, 305, 305, 305, 305, 305, 305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305 + }, + + { + 13, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, 341, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306 + }, + + { + 13, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, 139, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307 + }, + + { + 13, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + 133, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308 + }, + + { + 13, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309 + + }, + + { + 13, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + + -310, -310, -310, -310, -310, 342, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310 + }, + + { + 13, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, 343, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311 + }, + + { + 13, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, 165, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312 + }, + + { + 13, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, 344, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313 + }, + + { + 13, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, 165, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314 + }, + + { + 13, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, 345, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315 + }, + + { + 13, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, 346, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316 + }, + + { + 13, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + + -317, -317, -317, -317, -317, -317, -317, 347, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317 + }, + + { + 13, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, 348, -318, -318, -318, -318, -318, -318, -318, + 349, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318 + }, + + { + 13, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, 165, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319 + + }, + + { + 13, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, 320, -320, -320, -320, -320, -320, -320, -320, + 321, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320 + }, + + { + 13, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321 + }, + + { + 13, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, 322, -322, -322, -322, -322, -322, -322, -322, + + 323, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322 + }, + + { + 13, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323 + }, + + { + 13, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, 350, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324 + }, + + { + 13, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325 + }, + + { + 13, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, 351, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326 + }, + + { + 13, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, 352, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327 + }, + + { + 13, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328 + }, + + { + 13, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329 + + }, + + { + 13, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330 + }, + + { + 13, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, 208, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331 + }, + + { + 13, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, 353, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332 + }, + + { + 13, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, 354, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333 + }, + + { + 13, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, 355, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334 + }, + + { + 13, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, 356, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335 + }, + + { + 13, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, 357, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336 + }, + + { + 13, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337 + }, + + { + 13, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, 358, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338 + }, + + { + 13, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + + -339, -339, 298, -339, -339, -339, -339, -339, -339, -339, + -339, 299, -339, -339, -339, -339, -339, -339, 339, 339, + 339, 339, 339, 339, 339, 339, 339, 339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339 + + }, + + { + 13, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, 359, -340, -340, -340, -340, -340, -340, -340, + -340, 360, -340, -340, -340, -340, -340, -340, 361, 361, + 361, 361, 361, 361, 361, 361, 361, 361, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340 + }, + + { + 13, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, 362, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341 + }, + + { + 13, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + 153, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342 + }, + + { + 13, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, 153, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343 + }, + + { + 13, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + 165, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344 + }, + + { + 13, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, 127, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345 + }, + + { + 13, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, 363, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346 + }, + + { + 13, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + 127, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347 + }, + + { + 13, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, 348, -348, -348, -348, -348, -348, -348, -348, + 349, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348 + }, + + { + 13, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349 + + }, + + { + 13, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, 364, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350 + }, + + { + 13, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + 365, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351 + }, + + { + 13, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, 366, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352 + }, + + { + 13, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + 367, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353 + }, + + { + 13, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354 + }, + + { + 13, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, 368, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355 + }, + + { + 13, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, 369, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356 + }, + + { + 13, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + 370, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357 + }, + + { + 13, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358 + }, + + { + 13, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + + -359, -359, 359, -359, -359, -359, -359, -359, -359, -359, + -359, 360, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359 + + }, + + { + 13, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360 + }, + + { + 13, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, 359, -361, -361, -361, -361, -361, -361, -361, + -361, 360, -361, -361, -361, -361, -361, -361, 361, 361, + 361, 361, 361, 361, 361, 361, 361, 361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361 + }, + + { + 13, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, 371, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362 + }, + + { + 13, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, 127, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363 + }, + + { + 13, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, 372, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364 + }, + + { + 13, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365 + }, + + { + 13, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366 + }, + + { + 13, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367 + }, + + { + 13, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368 + }, + + { + 13, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, 373, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369 + + }, + + { + 13, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370 + }, + + { + 13, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, 127, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371 + }, + + { + 13, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, 374, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372 + }, + + { + 13, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373 + }, + + { + 13, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyg->yytext_ptr -= yyg->yy_more_len; \ + yyleng = (int) (yy_cp - yyg->yytext_ptr); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 120 +#define YY_END_OF_BUFFER 121 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[375] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 119, 119, 121, 20, 120, 9, 11, 12, 14, 15, + 20, 15, 15, 20, 15, 15, 15, 15, 20, 20, + 15, 15, 15, 15, 19, 15, 20, 20, 15, 20, + 20, 15, 20, 15, 20, 20, 15, 20, 15, 20, + 20, 1, 8, 20, 2, 20, 20, 23, 21, 22, + 44, 41, 38, 37, 40, 39, 43, 42, 31, 25, + 24, 30, 35, 36, 26, 28, 29, 27, 33, 32, + 107, 45, 107, 57, 62, 67, 68, 70, 73, 75, + 84, 107, 107, 90, 93, 100, 103, 105, 46, 107, + + 107, 63, 107, 69, 71, 107, 79, 107, 107, 94, + 107, 102, 107, 107, 118, 115, 114, 113, 118, 113, + 116, 109, 117, 108, 119, 9, 15, 0, 0, 16, + 0, 16, 16, 16, 16, 0, 0, 16, 17, 0, + 0, 0, 0, 16, 0, 0, 16, 0, 15, 15, + 0, 15, 15, 0, 0, 0, 16, 0, 0, 0, + 0, 15, 0, 0, 15, 0, 0, 0, 0, 0, + 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, + 15, 1, 13, 4, 0, 0, 0, 23, 34, 51, + 0, 0, 72, 74, 0, 86, 92, 0, 106, 0, + + 0, 0, 0, 0, 58, 0, 0, 60, 61, 0, + 66, 0, 76, 77, 0, 0, 0, 0, 87, 88, + 0, 0, 0, 98, 0, 0, 46, 115, 114, 113, + 0, 113, 116, 109, 117, 108, 0, 0, 0, 0, + 0, 113, 116, 109, 119, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, + 0, 15, 0, 0, 0, 0, 3, 0, 0, 6, + 0, 0, 0, 85, 99, 47, 0, 0, 0, 54, + 55, 0, 0, 64, 65, 78, 80, 81, 82, 83, + 0, 89, 91, 0, 0, 0, 0, 0, 112, 0, + + 0, 0, 110, 0, 0, 0, 0, 0, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 7, 0, 5, 0, 56, 0, 0, 52, 53, 59, + 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, + 0, 0, 0, 89, 0, 0, 0, 104, 0, 111, + 0, 0, 0, 0, 49, 50, 88, 95, 0, 97, + 0, 0, 96, 48 + } ; + +static const yy_state_type yy_NUL_trans[375] = + { 0, + 14, 14, 58, 58, 61, 61, 81, 81, 115, 115, + 125, 125, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 188, 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, + 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, 0, 0, 245, 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, 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, 188, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 245, 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, 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, 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, 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, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() (yyg->yy_more_flag = 1) +#define YY_MORE_ADJ yyg->yy_more_len +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "wcsulex.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsulex.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* wcsulex.l is a Flex description file containing the definition of a +* recursive, multi-buffered lexical scanner and parser for FITS units +* specifications. +* +* It requires Flex v2.5.4 or later. +* +* Refer to wcsunits.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Exponents. */ +/* Metric prefixes. */ +/* Basic and derived SI units. */ +/* Additional recognized units: all metric prefixes allowed. */ +/* Additional recognized units: only super-metric prefixes allowed. */ +/* Additional recognized units: only sub-metric prefixes allowed. */ +/* Additional recognized units for which NO metric prefixes are allowed. */ +/* All additional recognized units. */ +/* Exclusive start states. */ + +#line 85 "wcsulex.l" +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsunits.h" +#include "wcsutil.h" + +// User data associated with yyscanner. +struct wcsulex_extra { + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsulexe_scanner(const char unitstr[], int *func, \ + double *scale, double units[WCSUNITS_NTYPE], struct wcserr **err, \ + yyscan_t yyscanner) + +// Dummy definition to circumvent compiler warnings. +#define YY_INPUT(inbuff, count, bufsize) { count = YY_NULL; } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; + +#line 7229 "wcsulex.c" +#line 7230 "wcsulex.c" + +#define INITIAL 0 +#define PAREN 1 +#define PREFIX 2 +#define UNITS 3 +#define EXPON 4 +#define FLUSH 5 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct wcsulex_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 116 "wcsulex.l" + +#line 118 "wcsulex.l" + static const char *function = "wcsulexe_scanner"; + + void add(double *factor, double types[], double *expon, double *scale, + double units[]); + + // Initialise returned values. + *func = 0; + *scale = 1.0; + + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + units[i] = 0.0; + } + + if (err) *err = 0x0; + + double types[WCSUNITS_NTYPE]; + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + types[i] = 0.0; + } + double expon = 1.0; + double factor = 1.0; + + int bracket = 0; + int operator = 0; + int paren = 0; + int status = 0; + + // Avert a flex-induced memory leak. + if (YY_CURRENT_BUFFER && YY_CURRENT_BUFFER->yy_input_file == stdin) { + yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); + } + + yy_scan_string(unitstr, yyscanner); + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units parser error parsing '%s'", unitstr); + } + + BEGIN(INITIAL); + +#ifdef DEBUG + fprintf(stderr, "\n%s ->\n", unitstr); +#endif + +#line 7529 "wcsulex.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yyg->yy_more_len = 0; + if ( yyg->yy_more_flag ) + { + yyg->yy_more_len = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + yyg->yy_more_flag = 0; + } + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 164 "wcsulex.l" +{ + // Pretend initial whitespace doesn't exist. + yy_set_bol(1); + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 169 "wcsulex.l" +{ + if (bracket++) { + BEGIN(FLUSH); + } else { + yy_set_bol(1); + } + } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 177 "wcsulex.l" +{ + status = wcserr_set(WCSERR_SET(UNITSERR_BAD_NUM_MULTIPLIER), + "Invalid exponent in '%s'", unitstr); + BEGIN(FLUSH); + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 183 "wcsulex.l" +{ + factor = 10.0; + BEGIN(EXPON); + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 188 "wcsulex.l" +{ + *func = 1; + unput('('); + BEGIN(PAREN); + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 194 "wcsulex.l" +{ + *func = 2; + unput('('); + BEGIN(PAREN); + } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 200 "wcsulex.l" +{ + *func = 3; + unput('('); + BEGIN(PAREN); + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 206 "wcsulex.l" +{ + // Leading binary multiply. + status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), + "Dangling binary operator in '%s'", unitstr); + BEGIN(FLUSH); + } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 213 "wcsulex.l" +// Discard whitespace in INITIAL context. + YY_BREAK +case 10: +YY_RULE_SETUP +#line 215 "wcsulex.l" +{ + expon /= 2.0; + unput('('); + BEGIN(PAREN); + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 221 "wcsulex.l" +{ + // Gather terms in parentheses. + yyless(0); + BEGIN(PAREN); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 227 "wcsulex.l" +{ + if (operator++) { + BEGIN(FLUSH); + } + } + YY_BREAK +case 13: +#line 234 "wcsulex.l" +case 14: +YY_RULE_SETUP +#line 234 "wcsulex.l" +{ + if (operator++) { + BEGIN(FLUSH); + } else { + expon *= -1.0; + } + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 242 "wcsulex.l" +{ + operator = 0; + yyless(0); + BEGIN(UNITS); + } + YY_BREAK +case 16: +#line 249 "wcsulex.l" +case 17: +#line 250 "wcsulex.l" +case 18: +YY_RULE_SETUP +#line 250 "wcsulex.l" +{ + operator = 0; + yyless(0); + BEGIN(PREFIX); + } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 256 "wcsulex.l" +{ + bracket = !bracket; + BEGIN(FLUSH); + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 261 "wcsulex.l" +{ + status = wcserr_set(WCSERR_SET(UNITSERR_BAD_INITIAL_SYMBOL), + "Invalid symbol in INITIAL context in '%s'", unitstr); + BEGIN(FLUSH); + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 267 "wcsulex.l" +{ + paren++; + operator = 0; + yymore(); + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 273 "wcsulex.l" +{ + paren--; + if (paren) { + // Not balanced yet. + yymore(); + + } else { + // Balanced; strip off the outer parentheses and recurse. + yytext[yyleng-1] = '\0'; + + int func_r; + double factor_r; + status = wcsulexe(yytext+1, &func_r, &factor_r, types, err); + + YY_BUFFER_STATE buf = YY_CURRENT_BUFFER; + yy_switch_to_buffer(buf, yyscanner); + + if (func_r) { + status = wcserr_set(WCSERR_SET(UNITSERR_FUNCTION_CONTEXT), + "Function in invalid context in '%s'", unitstr); + } + + if (status) { + BEGIN(FLUSH); + } else { + factor *= factor_r; + BEGIN(EXPON); + } + } + } + YY_BREAK +case 23: +/* rule 23 can match eol */ +YY_RULE_SETUP +#line 304 "wcsulex.l" +{ + yymore(); + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 308 "wcsulex.l" +{ + factor = 1e-1; + BEGIN(UNITS); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 313 "wcsulex.l" +{ + factor = 1e-2; + BEGIN(UNITS); + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 318 "wcsulex.l" +{ + factor = 1e-3; + BEGIN(UNITS); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 323 "wcsulex.l" +{ + factor = 1e-6; + BEGIN(UNITS); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 328 "wcsulex.l" +{ + factor = 1e-9; + BEGIN(UNITS); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 333 "wcsulex.l" +{ + factor = 1e-12; + BEGIN(UNITS); + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 338 "wcsulex.l" +{ + factor = 1e-15; + BEGIN(UNITS); + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 343 "wcsulex.l" +{ + factor = 1e-18; + BEGIN(UNITS); + } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 348 "wcsulex.l" +{ + factor = 1e-21; + BEGIN(UNITS); + } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 353 "wcsulex.l" +{ + factor = 1e-24; + BEGIN(UNITS); + } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 358 "wcsulex.l" +{ + factor = 1e+1; + BEGIN(UNITS); + } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 363 "wcsulex.l" +{ + factor = 1e+2; + BEGIN(UNITS); + } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 368 "wcsulex.l" +{ + factor = 1e+3; + BEGIN(UNITS); + } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 373 "wcsulex.l" +{ + factor = 1e+6; + BEGIN(UNITS); + } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 378 "wcsulex.l" +{ + factor = 1e+9; + BEGIN(UNITS); + } + YY_BREAK +case 39: +YY_RULE_SETUP +#line 383 "wcsulex.l" +{ + factor = 1e+12; + BEGIN(UNITS); + } + YY_BREAK +case 40: +YY_RULE_SETUP +#line 388 "wcsulex.l" +{ + factor = 1e+15; + BEGIN(UNITS); + } + YY_BREAK +case 41: +YY_RULE_SETUP +#line 393 "wcsulex.l" +{ + factor = 1e+18; + BEGIN(UNITS); + } + YY_BREAK +case 42: +YY_RULE_SETUP +#line 398 "wcsulex.l" +{ + factor = 1e+21; + BEGIN(UNITS); + } + YY_BREAK +case 43: +YY_RULE_SETUP +#line 403 "wcsulex.l" +{ + factor = 1e+24; + BEGIN(UNITS); + } + YY_BREAK +case 44: +YY_RULE_SETUP +#line 408 "wcsulex.l" +{ + // Internal parser error. + status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units parser error parsing '%s'", unitstr); + BEGIN(FLUSH); + } + YY_BREAK +case 45: +YY_RULE_SETUP +#line 415 "wcsulex.l" +{ + // Ampere. + types[WCSUNITS_CHARGE] += 1.0; + types[WCSUNITS_TIME] -= 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 46: +YY_RULE_SETUP +#line 422 "wcsulex.l" +{ + // Julian year (annum). + factor *= 31557600.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 47: +YY_RULE_SETUP +#line 429 "wcsulex.l" +{ + // Analogue-to-digital converter units. + types[WCSUNITS_COUNT] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 48: +YY_RULE_SETUP +#line 435 "wcsulex.l" +{ + // Angstrom. + factor *= 1e-10; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 49: +YY_RULE_SETUP +#line 442 "wcsulex.l" +{ + // Minute of arc. + factor /= 60.0; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 50: +YY_RULE_SETUP +#line 449 "wcsulex.l" +{ + // Second of arc. + factor /= 3600.0; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 51: +YY_RULE_SETUP +#line 456 "wcsulex.l" +{ + // Astronomical unit. + factor *= 1.49598e+11; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 463 "wcsulex.l" +{ + // Barn. + factor *= 1e-28; + types[WCSUNITS_LENGTH] += 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 470 "wcsulex.l" +{ + // Beam, as in Jy/beam. + types[WCSUNITS_BEAM] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 54: +YY_RULE_SETUP +#line 476 "wcsulex.l" +{ + // Bin (e.g. histogram). + types[WCSUNITS_BIN] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 55: +YY_RULE_SETUP +#line 482 "wcsulex.l" +{ + // Bit. + types[WCSUNITS_BIT] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 56: +YY_RULE_SETUP +#line 488 "wcsulex.l" +{ + // Byte. + factor *= 8.0; + types[WCSUNITS_BIT] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 495 "wcsulex.l" +{ + // Coulomb. + types[WCSUNITS_CHARGE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 58: +YY_RULE_SETUP +#line 501 "wcsulex.l" +{ + // Candela. + types[WCSUNITS_LUMINTEN] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 59: +YY_RULE_SETUP +#line 507 "wcsulex.l" +{ + // Channel. + types[WCSUNITS_BIN] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 60: +YY_RULE_SETUP +#line 513 "wcsulex.l" +{ + // Count. + types[WCSUNITS_COUNT] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 61: +YY_RULE_SETUP +#line 519 "wcsulex.l" +{ + // Julian century. + factor *= 3155760000.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 526 "wcsulex.l" +{ + // Debye. + factor *= 1e-29 / 3.0; + types[WCSUNITS_CHARGE] += 1.0; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 534 "wcsulex.l" +{ + // Day. + factor *= 86400.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 64: +YY_RULE_SETUP +#line 541 "wcsulex.l" +{ + // Degree. + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 547 "wcsulex.l" +{ + // Erg. + factor *= 1e-7; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 66: +YY_RULE_SETUP +#line 556 "wcsulex.l" +{ + // Electron volt. + factor *= 1.6021765e-19; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 67: +YY_RULE_SETUP +#line 565 "wcsulex.l" +{ + // Farad. + types[WCSUNITS_MASS] -= 1.0; + types[WCSUNITS_LENGTH] -= 2.0; + types[WCSUNITS_TIME] += 3.0; + types[WCSUNITS_CHARGE] += 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 574 "wcsulex.l" +{ + // Gauss. + factor *= 1e-4; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 69: +YY_RULE_SETUP +#line 583 "wcsulex.l" +{ + // Gram. + factor *= 1e-3; + types[WCSUNITS_MASS] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 590 "wcsulex.l" +{ + // Henry. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] += 2.0; + types[WCSUNITS_CHARGE] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 71: +YY_RULE_SETUP +#line 599 "wcsulex.l" +{ + // Hour. + factor *= 3600.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 72: +YY_RULE_SETUP +#line 606 "wcsulex.l" +{ + // Hertz. + types[WCSUNITS_TIME] -= 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 73: +YY_RULE_SETUP +#line 612 "wcsulex.l" +{ + // Joule. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 620 "wcsulex.l" +{ + // Jansky. + factor *= 1e-26; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 75: +YY_RULE_SETUP +#line 628 "wcsulex.l" +{ + // Kelvin. + types[WCSUNITS_TEMPERATURE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 76: +YY_RULE_SETUP +#line 634 "wcsulex.l" +{ + // Lumen. + types[WCSUNITS_LUMINTEN] += 1.0; + types[WCSUNITS_SOLID_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 77: +YY_RULE_SETUP +#line 641 "wcsulex.l" +{ + // Lux. + types[WCSUNITS_LUMINTEN] += 1.0; + types[WCSUNITS_SOLID_ANGLE] += 1.0; + types[WCSUNITS_LENGTH] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 649 "wcsulex.l" +{ + // Light year. + factor *= 2.99792458e8 * 31557600.0; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 656 "wcsulex.l" +{ + // Metre. + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 80: +YY_RULE_SETUP +#line 662 "wcsulex.l" +{ + // Stellar magnitude. + types[WCSUNITS_MAGNITUDE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 81: +YY_RULE_SETUP +#line 668 "wcsulex.l" +{ + // Milli-arcsec. + factor /= 3600e+3; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 82: +YY_RULE_SETUP +#line 675 "wcsulex.l" +{ + // Minute. + factor *= 60.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 682 "wcsulex.l" +{ + // Mole. + types[WCSUNITS_MOLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 688 "wcsulex.l" +{ + // Newton. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 1.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 85: +YY_RULE_SETUP +#line 696 "wcsulex.l" +{ + // Ohm. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 1.0; + types[WCSUNITS_CHARGE] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 86: +YY_RULE_SETUP +#line 705 "wcsulex.l" +{ + // Pascal. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] -= 1.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 87: +YY_RULE_SETUP +#line 713 "wcsulex.l" +{ + // Parsec. + factor *= 3.0857e16; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 88: +YY_RULE_SETUP +#line 720 "wcsulex.l" +{ + // Photon. + types[WCSUNITS_COUNT] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 89: +YY_RULE_SETUP +#line 726 "wcsulex.l" +{ + // Pixel. + types[WCSUNITS_PIXEL] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 90: +YY_RULE_SETUP +#line 732 "wcsulex.l" +{ + // Rayleigh. + factor *= 1e10 / (4.0 * PI); + types[WCSUNITS_LENGTH] -= 2.0; + types[WCSUNITS_TIME] -= 1.0; + types[WCSUNITS_SOLID_ANGLE] -= 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 91: +YY_RULE_SETUP +#line 741 "wcsulex.l" +{ + // Radian. + factor *= 180.0 / PI; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 92: +YY_RULE_SETUP +#line 748 "wcsulex.l" +{ + // Rydberg. + factor *= 13.605692 * 1.6021765e-19; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 93: +YY_RULE_SETUP +#line 757 "wcsulex.l" +{ + // Siemen. + types[WCSUNITS_MASS] -= 1.0; + types[WCSUNITS_LENGTH] -= 2.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] += 2.0; + BEGIN(EXPON); + } + YY_BREAK +case 94: +YY_RULE_SETUP +#line 766 "wcsulex.l" +{ + // Second. + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 95: +YY_RULE_SETUP +#line 772 "wcsulex.l" +{ + // Solar luminosity. + factor *= 3.8268e26; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 3.0; + BEGIN(EXPON); + } + YY_BREAK +case 96: +YY_RULE_SETUP +#line 781 "wcsulex.l" +{ + // Solar mass. + factor *= 1.9891e30; + types[WCSUNITS_MASS] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 97: +YY_RULE_SETUP +#line 788 "wcsulex.l" +{ + // Solar radius. + factor *= 6.9599e8; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 795 "wcsulex.l" +{ + // Steradian. + types[WCSUNITS_SOLID_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 801 "wcsulex.l" +{ + // Sun (with respect to). + types[WCSUNITS_SOLRATIO] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 100: +YY_RULE_SETUP +#line 807 "wcsulex.l" +{ + // Tesla. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 101: +YY_RULE_SETUP +#line 815 "wcsulex.l" +{ + // Turn. + factor *= 360.0; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 102: +YY_RULE_SETUP +#line 822 "wcsulex.l" +{ + // Unified atomic mass unit. + factor *= 1.6605387e-27; + types[WCSUNITS_MASS] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 103: +YY_RULE_SETUP +#line 829 "wcsulex.l" +{ + // Volt. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 1.0; + types[WCSUNITS_TIME] -= 2.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 104: +YY_RULE_SETUP +#line 838 "wcsulex.l" +{ + // Voxel. + types[WCSUNITS_VOXEL] += 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 105: +YY_RULE_SETUP +#line 844 "wcsulex.l" +{ + // Watt. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 3.0; + BEGIN(EXPON); + } + YY_BREAK +case 106: +YY_RULE_SETUP +#line 852 "wcsulex.l" +{ + // Weber. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + YY_BREAK +case 107: +YY_RULE_SETUP +#line 861 "wcsulex.l" +{ + // Internal parser error. + status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units parser error parsing '%s'", unitstr); + BEGIN(FLUSH); + } + YY_BREAK +case 108: +YY_RULE_SETUP +#line 868 "wcsulex.l" +{ + // Exponentiation. + if (operator++) { + BEGIN(FLUSH); + } + } + YY_BREAK +case 109: +YY_RULE_SETUP +#line 875 "wcsulex.l" +{ + int i; + sscanf(yytext, " %d", &i); + expon *= (double)i; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + YY_BREAK +case 110: +YY_RULE_SETUP +#line 884 "wcsulex.l" +{ + int i; + sscanf(yytext, " (%d)", &i); + expon *= (double)i; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + YY_BREAK +case 111: +YY_RULE_SETUP +#line 893 "wcsulex.l" +{ + int i, j; + sscanf(yytext, " (%d/%d)", &i, &j); + expon *= (double)i / (double)j; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + YY_BREAK +case 112: +YY_RULE_SETUP +#line 902 "wcsulex.l" +{ + char ctmp[72]; + sscanf(yytext, " (%s)", ctmp); + double dexp; + wcsutil_str2double(ctmp, &dexp); + expon *= dexp; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + YY_BREAK +case 113: +YY_RULE_SETUP +#line 913 "wcsulex.l" +{ + // Multiply. + if (operator++) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + BEGIN(INITIAL); + } + } + YY_BREAK +case 114: +YY_RULE_SETUP +#line 923 "wcsulex.l" +{ + // Multiply. + if (operator) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + unput('('); + BEGIN(INITIAL); + } + } + YY_BREAK +case 115: +YY_RULE_SETUP +#line 934 "wcsulex.l" +{ + // Multiply. + if (operator) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + BEGIN(INITIAL); + } + } + YY_BREAK +case 116: +YY_RULE_SETUP +#line 944 "wcsulex.l" +{ + // Divide. + if (operator++) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + expon = -1.0; + BEGIN(INITIAL); + } + } + YY_BREAK +case 117: +YY_RULE_SETUP +#line 955 "wcsulex.l" +{ + add(&factor, types, &expon, scale, units); + bracket = !bracket; + BEGIN(FLUSH); + } + YY_BREAK +case 118: +YY_RULE_SETUP +#line 961 "wcsulex.l" +{ + status = wcserr_set(WCSERR_SET(UNITSERR_BAD_EXPON_SYMBOL), + "Invalid symbol in EXPON context in '%s'", unitstr); + BEGIN(FLUSH); + } + YY_BREAK +case 119: +YY_RULE_SETUP +#line 967 "wcsulex.l" +{ + // Discard any remaining input. + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(PAREN): +case YY_STATE_EOF(PREFIX): +case YY_STATE_EOF(UNITS): +case YY_STATE_EOF(EXPON): +case YY_STATE_EOF(FLUSH): +#line 971 "wcsulex.l" +{ + // End-of-string. + if (YY_START == EXPON) { + add(&factor, types, &expon, scale, units); + } + + if (bracket) { + status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_BRACKET), + "Unbalanced bracket in '%s'", unitstr); + } else if (paren) { + status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_PAREN), + "Unbalanced parenthesis in '%s'", unitstr); + } else if (operator == 1) { + status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), + "Dangling binary operator in '%s'", unitstr); + } else if (operator) { + status = wcserr_set(WCSERR_SET(UNITSERR_CONSEC_BINOPS), + "Consecutive binary operators in '%s'", unitstr); +#ifdef DEBUG + } else { + fprintf(stderr, "EOS\n"); +#endif + } + + if (status) { + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + units[i] = 0.0; + *scale = 0.0; + } + } + + return status; + } + YY_BREAK +case 120: +YY_RULE_SETUP +#line 1005 "wcsulex.l" +ECHO; + YY_BREAK +#line 8786 "wcsulex.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 1005 "wcsulex.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsulexe( + const char unitstr[], + int *func, + double *scale, + double units[WCSUNITS_NTYPE], + struct wcserr **err) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsulex_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsulexe_scanner(unitstr, func, scale, units, err, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + + +/*---------------------------------------------------------------------------- +* Accumulate a term in a units specification and reset work variables. +*---------------------------------------------------------------------------*/ + +void add( + double *factor, + double types[], + double *expon, + double *scale, + double units[]) + +{ + *scale *= pow(*factor, *expon); + + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + units[i] += *expon * types[i]; + types[i] = 0.0; + } + + *expon = 1.0; + *factor = 1.0; + + return; +} + diff --git a/deps/wcslib/C/flexed/wcsutrn.c b/deps/wcslib/C/flexed/wcsutrn.c new file mode 100644 index 0000000..1c901a2 --- /dev/null +++ b/deps/wcslib/C/flexed/wcsutrn.c @@ -0,0 +1,6289 @@ +#line 2 "wcsutrn.c" + +#line 4 "wcsutrn.c" + +#define _POSIX_C_SOURCE 1 +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define wcsutrn_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wcsutrn_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wcsutrn_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wcsutrn_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wcsutrn_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wcsutrn_scan_buffer +#endif + +#ifdef yy_scan_string +#define wcsutrn_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wcsutrn_scan_string +#endif + +#ifdef yy_scan_bytes +#define wcsutrn_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wcsutrn_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wcsutrn_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wcsutrn_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wcsutrn_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wcsutrn_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wcsutrn_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wcsutrn_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wcsutrn_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wcsutrn_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wcsutrnpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wcsutrnpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wcsutrnpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wcsutrnpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wcsutrnensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wcsutrnensure_buffer_stack +#endif + +#ifdef yylex +#define wcsutrnlex_ALREADY_DEFINED +#else +#define yylex wcsutrnlex +#endif + +#ifdef yyrestart +#define wcsutrnrestart_ALREADY_DEFINED +#else +#define yyrestart wcsutrnrestart +#endif + +#ifdef yylex_init +#define wcsutrnlex_init_ALREADY_DEFINED +#else +#define yylex_init wcsutrnlex_init +#endif + +#ifdef yylex_init_extra +#define wcsutrnlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wcsutrnlex_init_extra +#endif + +#ifdef yylex_destroy +#define wcsutrnlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wcsutrnlex_destroy +#endif + +#ifdef yyget_debug +#define wcsutrnget_debug_ALREADY_DEFINED +#else +#define yyget_debug wcsutrnget_debug +#endif + +#ifdef yyset_debug +#define wcsutrnset_debug_ALREADY_DEFINED +#else +#define yyset_debug wcsutrnset_debug +#endif + +#ifdef yyget_extra +#define wcsutrnget_extra_ALREADY_DEFINED +#else +#define yyget_extra wcsutrnget_extra +#endif + +#ifdef yyset_extra +#define wcsutrnset_extra_ALREADY_DEFINED +#else +#define yyset_extra wcsutrnset_extra +#endif + +#ifdef yyget_in +#define wcsutrnget_in_ALREADY_DEFINED +#else +#define yyget_in wcsutrnget_in +#endif + +#ifdef yyset_in +#define wcsutrnset_in_ALREADY_DEFINED +#else +#define yyset_in wcsutrnset_in +#endif + +#ifdef yyget_out +#define wcsutrnget_out_ALREADY_DEFINED +#else +#define yyget_out wcsutrnget_out +#endif + +#ifdef yyset_out +#define wcsutrnset_out_ALREADY_DEFINED +#else +#define yyset_out wcsutrnset_out +#endif + +#ifdef yyget_leng +#define wcsutrnget_leng_ALREADY_DEFINED +#else +#define yyget_leng wcsutrnget_leng +#endif + +#ifdef yyget_text +#define wcsutrnget_text_ALREADY_DEFINED +#else +#define yyget_text wcsutrnget_text +#endif + +#ifdef yyget_lineno +#define wcsutrnget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wcsutrnget_lineno +#endif + +#ifdef yyset_lineno +#define wcsutrnset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wcsutrnset_lineno +#endif + +#ifdef yyget_column +#define wcsutrnget_column_ALREADY_DEFINED +#else +#define yyget_column wcsutrnget_column +#endif + +#ifdef yyset_column +#define wcsutrnset_column_ALREADY_DEFINED +#else +#define yyset_column wcsutrnset_column +#endif + +#ifdef yywrap +#define wcsutrnwrap_ALREADY_DEFINED +#else +#define yywrap wcsutrnwrap +#endif + +#ifdef yyalloc +#define wcsutrnalloc_ALREADY_DEFINED +#else +#define yyalloc wcsutrnalloc +#endif + +#ifdef yyrealloc +#define wcsutrnrealloc_ALREADY_DEFINED +#else +#define yyrealloc wcsutrnrealloc +#endif + +#ifdef yyfree +#define wcsutrnfree_ALREADY_DEFINED +#else +#define yyfree wcsutrnfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + +#define YY_LESS_LINENO(n) +#define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define wcsutrnwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 10, 11, 12, 13, 12, + + 12, 14, 15, 12, 16, 17, 12, 18, 12, 19, + 20, 12, 21, 22, 12, 12, 23, 12, 12, 24, + 12, 8, 8, 8, 8, 8, 8, 25, 12, 12, + 26, 12, 12, 12, 27, 12, 12, 28, 12, 29, + 12, 12, 30, 12, 31, 32, 12, 12, 33, 12, + 12, 34, 12, 8, 8, 8, 8, 8 + }, + + { + 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 35, 8, 8, 8, 8, 8, 8, 8, + + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 10, 11, 12, 13, 12, + 12, 14, 15, 12, 16, 17, 12, 18, 12, 19, + 20, 12, 21, 22, 12, 12, 23, 12, 12, 24, + 12, 36, 8, 8, 8, 8, 8, 25, 12, 12, + 26, 12, 12, 12, 27, 12, 12, 28, 12, 29, + 12, 12, 30, 12, 31, 32, 12, 12, 33, 12, + 12, 34, 12, 8, 8, 8, 8, 8 + }, + + { + 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, + + 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 39, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 37, 37, 37, 37, 37, 37, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 37, 37, 37, 37, 37 + }, + + { + 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 39, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 37, 37, 37, 37, 37, 37, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 37, 37, 37, 37, 37 + }, + + { + 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 38, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 38, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7 + }, + + { + 7, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8 + }, + + { + 7, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + + -9, -9, 42, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9 + + }, + + { + 7, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 44, 43, 43, 43, 43, 43, 43, 43, + 43, -10, -10, -10, -10, -10, -10, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -10, -10, -10, -10, -10 + }, + + { + 7, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, 43, 43, 43, 43, 46, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -11, -11, -11, -11, -11, -11, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 47, 43, -11, -11, -11, -11, -11 + }, + + { + 7, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -12, -12, -12, -12, -12, -12, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -12, -12, -12, -12, -12 + }, + + { + 7, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, 48, 43, 43, 43, 49, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -13, -13, -13, -13, -13, -13, 43, 43, 43, + 43, 50, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -13, -13, -13, -13, -13 + }, + + { + 7, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, 43, 43, 43, 43, 43, + 43, 43, 51, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -14, -14, -14, -14, -14, -14, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -14, -14, -14, -14, -14 + }, + + { + 7, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 52, 43, 43, 43, 43, 43, 43, 43, + 53, -15, -15, -15, -15, -15, -15, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -15, -15, -15, -15, -15 + }, + + { + 7, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 54, + 43, -16, -16, -16, -16, -16, -16, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -16, -16, -16, -16, -16 + }, + + { + 7, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, 43, 43, 43, 43, 55, + 43, 43, 56, 43, 43, 43, 43, 57, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -17, -17, -17, -17, -17, -17, 43, 43, 43, + 43, 58, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -17, -17, -17, -17, -17 + }, + + { + 7, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + + -18, -18, -18, -18, -18, 43, 43, 43, 43, 59, + 43, 43, 60, 61, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -18, -18, -18, -18, -18, -18, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -18, -18, -18, -18, -18 + }, + + { + 7, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -19, -19, -19, -19, -19, -19, 43, 43, 43, + 43, 43, 43, 43, 62, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -19, -19, -19, -19, -19 + + }, + + { + 7, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, 63, 43, 43, 43, 43, + 43, 43, 43, 64, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -20, -20, -20, -20, -20, -20, 65, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -20, -20, -20, -20, -20 + }, + + { + 7, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, 66, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -21, -21, -21, -21, -21, -21, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -21, -21, -21, -21, -21 + }, + + { + 7, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, 43, 43, 43, 43, 67, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -22, -22, -22, -22, -22, -22, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -22, -22, -22, -22, -22 + }, + + { + 7, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 68, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -23, -23, -23, -23, -23, -23, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 69, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -23, -23, -23, -23, -23 + }, + + { + 7, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, 43, 43, 43, 43, 70, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 71, 43, 43, 43, 43, 43, 43, 43, + 43, -24, -24, -24, -24, -24, -24, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -24, -24, -24, -24, -24 + }, + + { + 7, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -25, -25, -25, -25, -25, -25, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 72, 43, 43, 43, 73, 43, 43, 43, 43, 43, + 43, 43, 43, -25, -25, -25, -25, -25 + }, + + { + 7, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -26, -26, -26, -26, -26, -26, 74, 43, 43, + 43, 75, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -26, -26, -26, -26, -26 + }, + + { + 7, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -27, -27, -27, -27, -27, -27, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 52, 43, 43, 43, 43, 43, + 43, 43, 53, -27, -27, -27, -27, -27 + }, + + { + 7, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + + -28, -28, -28, -28, -28, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -28, -28, -28, -28, -28, -28, 43, 43, 43, + 43, 58, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -28, -28, -28, -28, -28 + }, + + { + 7, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -29, -29, -29, -29, -29, -29, 43, 43, 43, + 43, 76, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -29, -29, -29, -29, -29 + + }, + + { + 7, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -30, -30, -30, -30, -30, -30, 65, 43, 43, + + 43, 43, 43, 43, 43, 77, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -30, -30, -30, -30, -30 + }, + + { + 7, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -31, -31, -31, -31, -31, -31, 78, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -31, -31, -31, -31, -31 + }, + + { + 7, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -32, -32, -32, -32, -32, -32, 43, 43, 43, + 43, 79, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -32, -32, -32, -32, -32 + }, + + { + 7, -33, -33, -33, -33, -33, -33, -33, -33, -33, + + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -33, -33, -33, -33, -33, -33, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 69, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -33, -33, -33, -33, -33 + }, + + { + 7, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -34, -34, -34, -34, -34, -34, 43, 43, 43, + 43, 80, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -34, -34, -34, -34, -34 + }, + + { + 7, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, 81, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, 82, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35 + }, + + { + 7, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36 + }, + + { + 7, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37 + }, + + { + 7, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38 + }, + + { + 7, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + + 83, 83, 84, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 83, 83, 83, 83, 83 + + }, + + { + 7, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, -40, -40, -40, -40, -40, -40, 86, 86, 86, + + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, -40, -40, -40, -40, -40 + }, + + { + 7, 87, 87, 87, 87, 87, 87, 87, 87, 87, + -41, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + }, + + { + 7, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, 42, -42, -42, -42, -42, -42, -42, -42, + + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42 + }, + + { + 7, -43, -43, -43, -43, -43, -43, -43, -43, -43, + + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -43, -43, -43, -43, -43, -43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -43, -43, -43, -43, -43 + }, + + { + 7, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, 43, 43, 88, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -44, -44, -44, -44, -44, -44, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -44, -44, -44, -44, -44 + }, + + { + 7, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -45, -45, -45, -45, -45, -45, 43, 43, 43, + 43, 43, 43, 89, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -45, -45, -45, -45, -45 + }, + + { + 7, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, 90, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -46, -46, -46, -46, -46, -46, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -46, -46, -46, -46, -46 + }, + + { + 7, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -47, -47, -47, -47, -47, -47, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 91, 43, 43, 43, + 43, 43, 43, -47, -47, -47, -47, -47 + }, + + { + 7, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + + -48, -48, -48, -48, -48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 92, + 43, -48, -48, -48, -48, -48, -48, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -48, -48, -48, -48, -48 + }, + + { + 7, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, 43, 43, 43, 43, 43, + 43, 93, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -49, -49, -49, -49, -49, -49, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -49, -49, -49, -49, -49 + + }, + + { + 7, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -50, -50, -50, -50, -50, -50, 43, 43, 43, + + 43, 43, 43, 94, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -50, -50, -50, -50, -50 + }, + + { + 7, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 95, -51, -51, -51, -51, -51, -51, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -51, -51, -51, -51, -51 + }, + + { + 7, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -52, -52, -52, -52, -52, -52, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -52, -52, -52, -52, -52 + }, + + { + 7, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -53, -53, -53, -53, -53, -53, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -53, -53, -53, -53, -53 + }, + + { + 7, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -54, -54, -54, -54, -54, -54, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -54, -54, -54, -54, -54 + }, + + { + 7, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 96, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -55, -55, -55, -55, -55, -55, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -55, -55, -55, -55, -55 + }, + + { + 7, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 97, -56, -56, -56, -56, -56, -56, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -56, -56, -56, -56, -56 + }, + + { + 7, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -57, -57, -57, -57, -57, -57, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -57, -57, -57, -57, -57 + }, + + { + 7, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + + -58, -58, -58, -58, -58, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -58, -58, -58, -58, -58, -58, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 98, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -58, -58, -58, -58, -58 + }, + + { + 7, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 99, 43, 43, 43, 43, 43, + 43, -59, -59, -59, -59, -59, -59, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -59, -59, -59, -59, -59 + + }, + + { + 7, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 100, -60, -60, -60, -60, -60, -60, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -60, -60, -60, -60, -60 + }, + + { + 7, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 101, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -61, -61, -61, -61, -61, -61, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -61, -61, -61, -61, -61 + }, + + { + 7, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -62, -62, -62, -62, -62, -62, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 102, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -62, -62, -62, -62, -62 + }, + + { + 7, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 103, 43, 43, 43, 43, 43, 43, + 43, -63, -63, -63, -63, -63, -63, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -63, -63, -63, -63, -63 + }, + + { + 7, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 104, 43, + 43, -64, -64, -64, -64, -64, -64, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -64, -64, -64, -64, -64 + }, + + { + 7, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -65, -65, -65, -65, -65, -65, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 105, 43, 43, 43, 43, + 43, 43, 43, -65, -65, -65, -65, -65 + }, + + { + 7, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, 43, 43, 43, 106, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -66, -66, -66, -66, -66, -66, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -66, -66, -66, -66, -66 + }, + + { + 7, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, 43, 43, 107, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -67, -67, -67, -67, -67, -67, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -67, -67, -67, -67, -67 + }, + + { + 7, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + + -68, -68, -68, -68, -68, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 108, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -68, -68, -68, -68, -68, -68, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -68, -68, -68, -68, -68 + }, + + { + 7, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -69, -69, -69, -69, -69, -69, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 109, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -69, -69, -69, -69, -69 + + }, + + { + 7, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, 110, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -70, -70, -70, -70, -70, -70, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -70, -70, -70, -70, -70 + }, + + { + 7, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -71, -71, -71, -71, -71, -71, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -71, -71, -71, -71, -71 + }, + + { + 7, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -72, -72, -72, -72, -72, -72, 43, 43, 43, + 43, 43, 43, 111, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -72, -72, -72, -72, -72 + }, + + { + 7, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -73, -73, -73, -73, -73, -73, 43, 43, 112, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -73, -73, -73, -73, -73 + }, + + { + 7, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -74, -74, -74, -74, -74, -74, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 113, 43, -74, -74, -74, -74, -74 + }, + + { + 7, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -75, -75, -75, -75, -75, -75, 43, 43, 43, + 43, 43, 43, 114, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -75, -75, -75, -75, -75 + }, + + { + 7, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -76, -76, -76, -76, -76, -76, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 115, 43, 43, 43, + + 43, 43, 43, -76, -76, -76, -76, -76 + }, + + { + 7, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -77, -77, -77, -77, -77, -77, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 116, 43, 43, -77, -77, -77, -77, -77 + }, + + { + 7, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + + -78, -78, -78, -78, -78, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -78, -78, -78, -78, -78, -78, 43, 43, 43, + 117, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -78, -78, -78, -78, -78 + }, + + { + 7, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -79, -79, -79, -79, -79, -79, 43, 43, 118, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -79, -79, -79, -79, -79 + + }, + + { + 7, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -80, -80, -80, -80, -80, -80, 119, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -80, -80, -80, -80, -80 + }, + + { + 7, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, 81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, 82, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81 + }, + + { + 7, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 7, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83 + }, + + { + 7, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 84, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 83, 83, 83, 83, 83 + }, + + { + 7, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 7, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, -86, -86, -86, -86, -86, -86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + + 86, 86, 86, -86, -86, -86, -86, -86 + }, + + { + 7, 87, 87, 87, 87, 87, 87, 87, 87, 87, + -87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + }, + + { + 7, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + + -88, -88, -88, -88, -88, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 120, 43, 43, + 43, 43, 43, 121, 43, 43, 43, 43, 43, 43, + 43, -88, -88, -88, -88, -88, -88, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -88, -88, -88, -88, -88 + }, + + { + 7, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -89, -89, -89, -89, -89, -89, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 122, 43, 43, 43, 43, + 43, 43, 43, -89, -89, -89, -89, -89 + + }, + + { + 7, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 123, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -90, -90, -90, -90, -90, -90, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -90, -90, -90, -90, -90 + }, + + { + 7, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -91, -91, -91, -91, -91, -91, 43, 43, 43, + 43, 124, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -91, -91, -91, -91, -91 + }, + + { + 7, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 125, 43, 43, 43, 43, 43, 43, + 43, -92, -92, -92, -92, -92, -92, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -92, -92, -92, -92, -92 + }, + + { + 7, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 126, 43, 43, 43, 43, 43, 43, 43, + 43, -93, -93, -93, -93, -93, -93, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -93, -93, -93, -93, -93 + }, + + { + 7, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -94, -94, -94, -94, -94, -94, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 127, 43, 43, 43, 43, 43, + 43, 43, 43, -94, -94, -94, -94, -94 + }, + + { + 7, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -95, -95, -95, -95, -95, -95, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -95, -95, -95, -95, -95 + }, + + { + 7, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 128, 43, 43, 43, + 43, -96, -96, -96, -96, -96, -96, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -96, -96, -96, -96, -96 + }, + + { + 7, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -97, -97, -97, -97, -97, -97, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -97, -97, -97, -97, -97 + }, + + { + 7, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + + -98, -98, -98, -98, -98, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -98, -98, -98, -98, -98, -98, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 129, 43, + 43, 43, 43, -98, -98, -98, -98, -98 + }, + + { + 7, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, 43, 43, 43, 43, 130, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 131, 43, 43, 43, 43, 43, 43, 43, + 43, -99, -99, -99, -99, -99, -99, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -99, -99, -99, -99, -99 + + }, + + { + 7, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -100, -100, -100, -100, -100, -100, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -100, -100, -100, -100, -100 + }, + + { + 7, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -101, -101, -101, -101, -101, -101, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -101, -101, -101, -101, -101 + }, + + { + 7, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -102, -102, -102, -102, -102, -102, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -102, -102, -102, -102, -102 + }, + + { + 7, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, 43, 43, 132, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -103, -103, -103, -103, -103, -103, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -103, -103, -103, -103, -103 + }, + + { + 7, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, 43, 43, 43, 43, 133, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -104, -104, -104, -104, -104, -104, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -104, -104, -104, -104, -104 + }, + + { + 7, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -105, -105, -105, -105, -105, -105, 43, 43, 134, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -105, -105, -105, -105, -105 + }, + + { + 7, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, 43, 43, 43, 43, 43, + 43, 43, 43, 135, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -106, -106, -106, -106, -106, -106, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -106, -106, -106, -106, -106 + }, + + { + 7, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 136, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -107, -107, -107, -107, -107, -107, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -107, -107, -107, -107, -107 + }, + + { + 7, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + + -108, -108, -108, -108, -108, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 137, 43, 43, 43, 43, 43, + 43, -108, -108, -108, -108, -108, -108, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -108, -108, -108, -108, -108 + }, + + { + 7, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -109, -109, -109, -109, -109, -109, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 138, 43, 43, 43, + 43, 43, 43, -109, -109, -109, -109, -109 + + }, + + { + 7, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 139, 43, 43, 43, 43, 43, 43, 43, + 43, -110, -110, -110, -110, -110, -110, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -110, -110, -110, -110, -110 + }, + + { + 7, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -111, -111, -111, -111, -111, -111, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 140, 43, 43, 43, 43, + 43, 43, 43, -111, -111, -111, -111, -111 + }, + + { + 7, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -112, -112, -112, -112, -112, -112, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 141, + 43, 43, 43, 43, 43, 142, 43, 43, 43, 43, + 43, 43, 43, -112, -112, -112, -112, -112 + }, + + { + 7, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -113, -113, -113, -113, -113, -113, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 143, 43, 43, 43, 43, + 43, 43, 43, -113, -113, -113, -113, -113 + }, + + { + 7, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -114, -114, -114, -114, -114, -114, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 144, 43, 43, 43, 43, 43, + 43, 43, 43, -114, -114, -114, -114, -114 + }, + + { + 7, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -115, -115, -115, -115, -115, -115, 43, 43, 43, + 43, 145, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 146, 43, 43, 43, 43, 43, + 43, 43, 43, -115, -115, -115, -115, -115 + }, + + { + 7, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -116, -116, -116, -116, -116, -116, 43, 43, 43, + 43, 147, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -116, -116, -116, -116, -116 + }, + + { + 7, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -117, -117, -117, -117, -117, -117, 43, 43, 43, + 43, 43, 43, 43, 43, 148, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -117, -117, -117, -117, -117 + }, + + { + 7, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + + -118, -118, -118, -118, -118, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -118, -118, -118, -118, -118, -118, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 149, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -118, -118, -118, -118, -118 + }, + + { + 7, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -119, -119, -119, -119, -119, -119, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 150, 43, 43, 43, 43, 43, + 43, 43, 43, -119, -119, -119, -119, -119 + + }, + + { + 7, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, 43, 43, 43, 43, 43, + 43, 43, 43, 151, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -120, -120, -120, -120, -120, -120, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -120, -120, -120, -120, -120 + }, + + { + 7, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, 43, 43, 43, 43, 152, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -121, -121, -121, -121, -121, -121, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -121, -121, -121, -121, -121 + }, + + { + 7, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -122, -122, -122, -122, -122, -122, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 153, 43, 43, 43, + 43, 43, 43, -122, -122, -122, -122, -122 + }, + + { + 7, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -123, -123, -123, -123, -123, -123, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -123, -123, -123, -123, -123 + }, + + { + 7, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -124, -124, -124, -124, -124, -124, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -124, -124, -124, -124, -124 + }, + + { + 7, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -125, -125, -125, -125, -125, -125, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -125, -125, -125, -125, -125 + }, + + { + 7, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, 43, 43, 43, 43, 154, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -126, -126, -126, -126, -126, -126, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -126, -126, -126, -126, -126 + }, + + { + 7, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -127, -127, -127, -127, -127, -127, 43, 43, 43, + 43, 155, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -127, -127, -127, -127, -127 + }, + + { + 7, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + + -128, -128, -128, -128, -128, 43, 43, 43, 43, 43, + 43, 43, 43, 156, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -128, -128, -128, -128, -128, -128, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -128, -128, -128, -128, -128 + }, + + { + 7, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -129, -129, -129, -129, -129, -129, 43, 43, 43, + 43, 43, 43, 43, 43, 157, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -129, -129, -129, -129, -129 + + }, + + { + 7, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 158, 43, 43, 43, 43, 43, 43, 43, + 43, -130, -130, -130, -130, -130, -130, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -130, -130, -130, -130, -130 + }, + + { + 7, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, 43, 43, 43, 43, 159, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -131, -131, -131, -131, -131, -131, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -131, -131, -131, -131, -131 + }, + + { + 7, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, 160, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -132, -132, -132, -132, -132, -132, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -132, -132, -132, -132, -132 + }, + + { + 7, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 161, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -133, -133, -133, -133, -133, -133, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -133, -133, -133, -133, -133 + }, + + { + 7, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -134, -134, -134, -134, -134, -134, 162, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -134, -134, -134, -134, -134 + }, + + { + 7, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, 163, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -135, -135, -135, -135, -135, -135, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -135, -135, -135, -135, -135 + }, + + { + 7, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 164, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -136, -136, -136, -136, -136, -136, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -136, -136, -136, -136, -136 + }, + + { + 7, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 165, 43, 43, 43, 43, 43, 43, + + 43, -137, -137, -137, -137, -137, -137, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -137, -137, -137, -137, -137 + }, + + { + 7, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + + -138, -138, -138, -138, -138, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -138, -138, -138, -138, -138, -138, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 166, 43, 43, 43, 43, + 43, 43, 43, -138, -138, -138, -138, -138 + }, + + { + 7, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 167, 43, 43, 43, 43, 43, 43, + 43, -139, -139, -139, -139, -139, -139, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -139, -139, -139, -139, -139 + + }, + + { + 7, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -140, -140, -140, -140, -140, -140, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 168, 43, 43, 43, + 43, 43, 43, -140, -140, -140, -140, -140 + }, + + { + 7, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -141, -141, -141, -141, -141, -141, 43, 43, 43, + 43, 43, 43, 43, 43, 169, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -141, -141, -141, -141, -141 + }, + + { + 7, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -142, -142, -142, -142, -142, -142, 43, 43, 43, + 43, 170, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -142, -142, -142, -142, -142 + }, + + { + 7, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -143, -143, -143, -143, -143, -143, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -143, -143, -143, -143, -143 + }, + + { + 7, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -144, -144, -144, -144, -144, -144, 43, 43, 43, + 43, 171, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -144, -144, -144, -144, -144 + }, + + { + 7, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -145, -145, -145, -145, -145, -145, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 172, 43, 43, 43, 43, 43, + 43, 43, 43, -145, -145, -145, -145, -145 + }, + + { + 7, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -146, -146, -146, -146, -146, -146, 43, 43, 43, + 43, 173, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -146, -146, -146, -146, -146 + }, + + { + 7, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -147, -147, -147, -147, -147, -147, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 174, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -147, -147, -147, -147, -147 + }, + + { + 7, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + + -148, -148, -148, -148, -148, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -148, -148, -148, -148, -148, -148, 175, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -148, -148, -148, -148, -148 + }, + + { + 7, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -149, -149, -149, -149, -149, -149, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 176, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -149, -149, -149, -149, -149 + + }, + + { + 7, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -150, -150, -150, -150, -150, -150, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 71, 43, 43, 43, 43, + 43, 43, 43, -150, -150, -150, -150, -150 + }, + + { + 7, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 177, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -151, -151, -151, -151, -151, -151, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -151, -151, -151, -151, -151 + }, + + { + 7, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, 43, 43, 178, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -152, -152, -152, -152, -152, -152, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -152, -152, -152, -152, -152 + }, + + { + 7, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -153, -153, -153, -153, -153, -153, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 179, 43, 43, 43, 43, 43, + 43, 43, 43, -153, -153, -153, -153, -153 + }, + + { + 7, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, 43, 43, 43, 43, 180, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -154, -154, -154, -154, -154, -154, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -154, -154, -154, -154, -154 + }, + + { + 7, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -155, -155, -155, -155, -155, -155, 43, 43, 43, + 43, 181, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -155, -155, -155, -155, -155 + }, + + { + 7, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 182, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -156, -156, -156, -156, -156, -156, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -156, -156, -156, -156, -156 + }, + + { + 7, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -157, -157, -157, -157, -157, -157, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 183, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -157, -157, -157, -157, -157 + }, + + { + 7, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + + -158, -158, -158, -158, -158, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 184, 43, 43, 43, 43, 43, 43, + 43, -158, -158, -158, -158, -158, -158, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -158, -158, -158, -158, -158 + }, + + { + 7, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 185, 43, 43, 43, 43, 43, 43, + 43, -159, -159, -159, -159, -159, -159, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -159, -159, -159, -159, -159 + + }, + + { + 7, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 186, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -160, -160, -160, -160, -160, -160, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -160, -160, -160, -160, -160 + }, + + { + 7, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 187, 43, 43, 43, 43, 43, 43, + 43, -161, -161, -161, -161, -161, -161, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -161, -161, -161, -161, -161 + }, + + { + 7, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -162, -162, -162, -162, -162, -162, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 188, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -162, -162, -162, -162, -162 + }, + + { + 7, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 189, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -163, -163, -163, -163, -163, -163, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -163, -163, -163, -163, -163 + }, + + { + 7, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, 43, 43, 43, 190, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -164, -164, -164, -164, -164, -164, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -164, -164, -164, -164, -164 + }, + + { + 7, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -165, -165, -165, -165, -165, -165, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -165, -165, -165, -165, -165 + }, + + { + 7, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -166, -166, -166, -166, -166, -166, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -166, -166, -166, -166, -166 + }, + + { + 7, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -167, -167, -167, -167, -167, -167, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -167, -167, -167, -167, -167 + }, + + { + 7, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + + -168, -168, -168, -168, -168, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -168, -168, -168, -168, -168, -168, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 191, 43, 43, 43, 43, 43, + 43, 43, 43, -168, -168, -168, -168, -168 + }, + + { + 7, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -169, -169, -169, -169, -169, -169, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 192, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -169, -169, -169, -169, -169 + + }, + + { + 7, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -170, -170, -170, -170, -170, -170, 43, 43, 193, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -170, -170, -170, -170, -170 + }, + + { + 7, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -171, -171, -171, -171, -171, -171, 43, 43, 43, + 43, 194, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -171, -171, -171, -171, -171 + }, + + { + 7, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -172, -172, -172, -172, -172, -172, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 195, 43, 43, 43, 43, + 43, 43, 43, -172, -172, -172, -172, -172 + }, + + { + 7, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -173, -173, -173, -173, -173, -173, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 196, 43, 43, 43, 43, + 43, 43, 43, -173, -173, -173, -173, -173 + }, + + { + 7, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -174, -174, -174, -174, -174, -174, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 187, 43, 43, 43, 43, + 43, 43, 43, -174, -174, -174, -174, -174 + }, + + { + 7, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -175, -175, -175, -175, -175, -175, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 197, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -175, -175, -175, -175, -175 + }, + + { + 7, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -176, -176, -176, -176, -176, -176, 43, 43, 43, + 198, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -176, -176, -176, -176, -176 + }, + + { + 7, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 199, 43, 43, 43, 43, 43, 43, + + 43, -177, -177, -177, -177, -177, -177, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -177, -177, -177, -177, -177 + }, + + { + 7, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + + -178, -178, -178, -178, -178, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 200, 43, 43, 43, 43, 43, 43, + 43, -178, -178, -178, -178, -178, -178, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -178, -178, -178, -178, -178 + }, + + { + 7, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -179, -179, -179, -179, -179, -179, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 201, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -179, -179, -179, -179, -179 + + }, + + { + 7, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 202, 43, 43, 43, 43, 43, 43, + 43, -180, -180, -180, -180, -180, -180, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -180, -180, -180, -180, -180 + }, + + { + 7, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -181, -181, -181, -181, -181, -181, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 203, 43, 43, 43, 43, + 43, 43, 43, -181, -181, -181, -181, -181 + }, + + { + 7, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 204, 43, 43, 43, 43, 43, 43, + 43, -182, -182, -182, -182, -182, -182, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -182, -182, -182, -182, -182 + }, + + { + 7, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -183, -183, -183, -183, -183, -183, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 205, 43, 43, 43, 43, + 43, 43, 43, -183, -183, -183, -183, -183 + }, + + { + 7, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -184, -184, -184, -184, -184, -184, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -184, -184, -184, -184, -184 + }, + + { + 7, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -185, -185, -185, -185, -185, -185, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -185, -185, -185, -185, -185 + }, + + { + 7, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 206, 43, 43, 43, 43, 43, 43, + 43, -186, -186, -186, -186, -186, -186, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -186, -186, -186, -186, -186 + }, + + { + 7, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -187, -187, -187, -187, -187, -187, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -187, -187, -187, -187, -187 + }, + + { + 7, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + + -188, -188, -188, -188, -188, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -188, -188, -188, -188, -188, -188, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 207, 43, 43, 43, 43, + 43, 43, 43, -188, -188, -188, -188, -188 + }, + + { + 7, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 208, 43, 43, 43, 43, 43, 43, + 43, -189, -189, -189, -189, -189, -189, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -189, -189, -189, -189, -189 + + }, + + { + 7, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 209, 43, 43, 43, 43, 43, 43, + 43, -190, -190, -190, -190, -190, -190, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -190, -190, -190, -190, -190 + }, + + { + 7, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -191, -191, -191, -191, -191, -191, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 210, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -191, -191, -191, -191, -191 + }, + + { + 7, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -192, -192, -192, -192, -192, -192, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 199, 43, 43, 43, 43, + 43, 43, 43, -192, -192, -192, -192, -192 + }, + + { + 7, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -193, -193, -193, -193, -193, -193, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 200, 43, 43, 43, 43, + 43, 43, 43, -193, -193, -193, -193, -193 + }, + + { + 7, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -194, -194, -194, -194, -194, -194, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 211, 43, 43, 43, 43, + 43, 43, 43, -194, -194, -194, -194, -194 + }, + + { + 7, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -195, -195, -195, -195, -195, -195, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -195, -195, -195, -195, -195 + }, + + { + 7, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -196, -196, -196, -196, -196, -196, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -196, -196, -196, -196, -196 + }, + + { + 7, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -197, -197, -197, -197, -197, -197, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 212, 43, 43, 43, 43, + 43, 43, 43, -197, -197, -197, -197, -197 + }, + + { + 7, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + + -198, -198, -198, -198, -198, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -198, -198, -198, -198, -198, -198, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 213, 43, 43, 43, 43, + 43, 43, 43, -198, -198, -198, -198, -198 + }, + + { + 7, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -199, -199, -199, -199, -199, -199, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -199, -199, -199, -199, -199 + + }, + + { + 7, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -200, -200, -200, -200, -200, -200, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -200, -200, -200, -200, -200 + }, + + { + 7, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -201, -201, -201, -201, -201, -201, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 214, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -201, -201, -201, -201, -201 + }, + + { + 7, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -202, -202, -202, -202, -202, -202, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -202, -202, -202, -202, -202 + }, + + { + 7, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -203, -203, -203, -203, -203, -203, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -203, -203, -203, -203, -203 + }, + + { + 7, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -204, -204, -204, -204, -204, -204, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -204, -204, -204, -204, -204 + }, + + { + 7, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -205, -205, -205, -205, -205, -205, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -205, -205, -205, -205, -205 + }, + + { + 7, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -206, -206, -206, -206, -206, -206, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -206, -206, -206, -206, -206 + }, + + { + 7, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -207, -207, -207, -207, -207, -207, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -207, -207, -207, -207, -207 + }, + + { + 7, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + + -208, -208, -208, -208, -208, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -208, -208, -208, -208, -208, -208, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -208, -208, -208, -208, -208 + }, + + { + 7, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -209, -209, -209, -209, -209, -209, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -209, -209, -209, -209, -209 + + }, + + { + 7, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -210, -210, -210, -210, -210, -210, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 215, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -210, -210, -210, -210, -210 + }, + + { + 7, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -211, -211, -211, -211, -211, -211, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -211, -211, -211, -211, -211 + }, + + { + 7, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -212, -212, -212, -212, -212, -212, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -212, -212, -212, -212, -212 + }, + + { + 7, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -213, -213, -213, -213, -213, -213, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -213, -213, -213, -213, -213 + }, + + { + 7, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -214, -214, -214, -214, -214, -214, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 216, 43, 43, 43, 43, + 43, 43, 43, -214, -214, -214, -214, -214 + }, + + { + 7, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -215, -215, -215, -215, -215, -215, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 216, 43, 43, 43, 43, + 43, 43, 43, -215, -215, -215, -215, -215 + }, + + { + 7, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -216, -216, -216, -216, -216, -216, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -216, -216, -216, -216, -216 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 37 +#define YY_END_OF_BUFFER 38 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[217] = + { 0, + 0, 0, 0, 0, 36, 36, 38, 3, 2, 31, + 31, 31, 10, 31, 14, 31, 31, 20, 31, 31, + 31, 28, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 2, 1, 35, 37, 35, 32, + 36, 2, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 13, 15, 17, 31, 31, 19, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 2, 1, 33, 33, 34, 32, 36, 31, 31, 31, + 31, 9, 11, 11, 12, 31, 16, 31, 31, 22, + + 21, 23, 31, 31, 31, 26, 27, 31, 31, 31, + 31, 31, 9, 31, 31, 31, 31, 27, 31, 31, + 31, 31, 7, 8, 9, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 29, 29, 30, 31, + 31, 31, 9, 31, 31, 31, 31, 31, 31, 30, + 31, 31, 31, 31, 31, 31, 31, 20, 20, 31, + 25, 31, 31, 31, 29, 29, 30, 31, 31, 31, + 31, 20, 20, 31, 31, 31, 5, 6, 31, 11, + 11, 18, 18, 20, 20, 24, 25, 24, 26, 27, + 31, 31, 31, 11, 20, 20, 26, 27, 5, 6, + + 31, 11, 11, 18, 18, 24, 24, 26, 27, 31, + 11, 26, 27, 31, 4, 4 + } ; + +static const yy_state_type yy_NUL_trans[217] = + { 0, + 8, 8, 37, 37, 41, 41, 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, 83, 0, + 87, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, 0, 0, 87, 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, 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, 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, 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, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "wcsutrn.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsutrn.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* wcsutrn.l is a Flex description file containing the definition of a lexical +* scanner that translates non-standard FITS units specifications. +* +* It requires Flex v2.5.4 or later. +* +* Refer to wcsunits.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Exclusive start states. */ + +#line 49 "wcsutrn.l" +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsunits.h" + +// User data associated with yyscanner. +struct wcsutrn_extra { + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsutrne_scanner(int ctrl, char unitstr[], \ + struct wcserr **err, yyscan_t yyscanner) + +// Dummy definition to circumvent compiler warnings. +#define YY_INPUT(inbuff, count, bufsize) { count = YY_NULL; } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; + +#line 4449 "wcsutrn.c" +#line 4450 "wcsutrn.c" + +#define INITIAL 0 +#define NEXT 1 +#define FLUSH 2 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct wcsutrn_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + int yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 77 "wcsutrn.l" + +#line 79 "wcsutrn.l" + static const char *function = "wcsutrne_scanner"; + + if (err) *err = 0x0; + + char orig[80], subs[80]; + *orig = '\0'; + *subs = '\0'; + + int bracket = 0; + int unsafe = 0; + int status = -1; + + yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); + yy_scan_string(unitstr, yyscanner); + *unitstr = '\0'; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units translator error"); + } + + BEGIN(INITIAL); + +#ifdef DEBUG + fprintf(stderr, "\n%s ->\n", unitstr); +#endif + +#line 4728 "wcsutrn.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + ++yy_cp; + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ +case 1: +YY_RULE_SETUP +#line 107 "wcsutrn.l" +{ + // Looks like a keycomment. + strcat(unitstr, "["); + bracket = 1; + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 113 "wcsutrn.l" +// Discard leading whitespace. + YY_BREAK +case 3: +/* rule 3 can match eol */ +YY_RULE_SETUP +#line 115 "wcsutrn.l" +{ + // Non-alphabetic character. + strcat(unitstr, yytext); + if (bracket && *yytext == ']') { + BEGIN(FLUSH); + } + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 123 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Angstrom"); + BEGIN(NEXT); + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 129 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "arcmin"); + BEGIN(NEXT); + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 135 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "arcsec"); + BEGIN(NEXT); + } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 141 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "beam"); + BEGIN(NEXT); + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 147 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "byte"); + BEGIN(NEXT); + } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 153 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "d"); + BEGIN(NEXT); + } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 159 "wcsutrn.l" +{ + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 4) ? "d" : "D"); + BEGIN(NEXT); + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 166 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "deg"); + BEGIN(NEXT); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 172 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "GHz"); + BEGIN(NEXT); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 178 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "h"); + BEGIN(NEXT); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 184 "wcsutrn.l" +{ + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 2) ? "h" : "H"); + BEGIN(NEXT); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 191 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Hz"); + BEGIN(NEXT); + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 197 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "kHz"); + BEGIN(NEXT); + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 203 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Jy"); + BEGIN(NEXT); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 209 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "K"); + BEGIN(NEXT); + } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 215 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "km"); + BEGIN(NEXT); + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 221 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "m"); + BEGIN(NEXT); + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 227 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "min"); + BEGIN(NEXT); + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 233 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "MHz"); + BEGIN(NEXT); + } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 239 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "ohm"); + BEGIN(NEXT); + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 245 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Pa"); + BEGIN(NEXT); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 251 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "pixel"); + BEGIN(NEXT); + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 257 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "rad"); + BEGIN(NEXT); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 263 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "s"); + BEGIN(NEXT); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 269 "wcsutrn.l" +{ + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 1) ? "s" : "S"); + BEGIN(NEXT); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 276 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "V"); + BEGIN(NEXT); + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 282 "wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "yr"); + BEGIN(NEXT); + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 288 "wcsutrn.l" +{ + // Not a recognized alias. + strcpy(orig, yytext); + strcpy(subs, orig); + BEGIN(NEXT); + } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 295 "wcsutrn.l" +{ + // Reject the alias match. + strcat(orig, yytext); + strcpy(subs, orig); + } + YY_BREAK +case 33: +/* rule 33 can match eol */ +YY_RULE_SETUP +#line 301 "wcsutrn.l" +{ + // Discard separating whitespace. + unput(yytext[yyleng-1]); + } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 306 "wcsutrn.l" +{ + // Compress separating whitespace. + strcat(unitstr, subs); + strcat(unitstr, " "); + if (strcmp(orig, subs)) status = 0; + unput(yytext[yyleng-1]); + *subs = '\0'; + BEGIN(INITIAL); + } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 316 "wcsutrn.l" +{ + // Copy anything else unchanged. + strcat(unitstr, subs); + if (strcmp(orig, subs)) status = 0; + unput(*yytext); + *subs = '\0'; + BEGIN(INITIAL); + } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 325 "wcsutrn.l" +{ + // Copy out remaining input. + strcat(unitstr, yytext); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(NEXT): +case YY_STATE_EOF(FLUSH): +#line 330 "wcsutrn.l" +{ + // End-of-string. + if (*subs) { + strcat(unitstr, subs); + if (strcmp(orig, subs)) status = 0; + } + + if (unsafe) { + return wcserr_set(WCSERR_SET(UNITSERR_UNSAFE_TRANS), + "Unsafe unit translation in '%s'", unitstr); + } + return status; + } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 344 "wcsutrn.l" +ECHO; + YY_BREAK +#line 5115 "wcsutrn.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 344 "wcsutrn.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsutrne( + int ctrl, + char unitstr[], + struct wcserr **err) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsutrn_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsutrne_scanner(ctrl, unitstr, err, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + diff --git a/deps/wcslib/C/getwcstab.c b/deps/wcslib/C/getwcstab.c new file mode 100644 index 0000000..79cc52e --- /dev/null +++ b/deps/wcslib/C/getwcstab.c @@ -0,0 +1,151 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: getwcstab.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include + +#include "getwcstab.h" + +//---------------------------------------------------------------------------- + +int fits_read_wcstab( + fitsfile *fptr, + int nwtb, + wtbarr *wtb, + int *status) + +{ + int anynul, colnum, hdunum, iwtb, m, naxis, nostat; + long *naxes = 0, nelem; + wtbarr *wtbp; + + + if (*status) return *status; + + if (fptr == 0) { + return (*status = NULL_INPUT_PTR); + } + + if (nwtb == 0) return 0; + + // Zero the array pointers. + wtbp = wtb; + for (iwtb = 0; iwtb < nwtb; iwtb++, wtbp++) { + *wtbp->arrayp = 0x0; + } + + // Save HDU number so that we can move back to it later. + fits_get_hdu_num(fptr, &hdunum); + + wtbp = wtb; + for (iwtb = 0; iwtb < nwtb; iwtb++, wtbp++) { + // Move to the required binary table extension. + if (fits_movnam_hdu(fptr, BINARY_TBL, (char *)(wtbp->extnam), + wtbp->extver, status)) { + goto cleanup; + } + + // Locate the table column. + if (fits_get_colnum(fptr, CASEINSEN, (char *)(wtbp->ttype), &colnum, + status)) { + goto cleanup; + } + + // Get the array dimensions and check for consistency. + if (wtbp->ndim < 1) { + *status = NEG_AXIS; + goto cleanup; + } + + if (!(naxes = calloc(wtbp->ndim, sizeof(long)))) { + *status = MEMORY_ALLOCATION; + goto cleanup; + } + + if (fits_read_tdim(fptr, colnum, wtbp->ndim, &naxis, naxes, status)) { + goto cleanup; + } + + if (naxis != wtbp->ndim) { + if (wtbp->kind == 'c' && wtbp->ndim == 2) { + // Allow TDIMn to be omitted for degenerate coordinate arrays. + naxis = 2; + naxes[1] = naxes[0]; + naxes[0] = 1; + } else { + *status = BAD_TDIM; + goto cleanup; + } + } + + if (wtbp->kind == 'c') { + // Coordinate array; calculate the array size. + nelem = naxes[0]; + for (m = 0; m < naxis-1; m++) { + *(wtbp->dimlen + m) = naxes[m+1]; + nelem *= naxes[m+1]; + } + } else { + // Index vector; check length. + if ((nelem = naxes[0]) != *(wtbp->dimlen)) { + // N.B. coordinate array precedes the index vectors. + *status = BAD_TDIM; + goto cleanup; + } + } + + free(naxes); + naxes = 0; + + // Allocate memory for the array. + if (!(*wtbp->arrayp = calloc((size_t)nelem, sizeof(double)))) { + *status = MEMORY_ALLOCATION; + goto cleanup; + } + + // Read the array from the table. + if (fits_read_col_dbl(fptr, colnum, wtbp->row, 1L, nelem, 0.0, + *wtbp->arrayp, &anynul, status)) { + goto cleanup; + } + } + +cleanup: + // Move back to the starting HDU. + nostat = 0; + fits_movabs_hdu(fptr, hdunum, 0, &nostat); + + // Release allocated memory. + if (naxes) free(naxes); + if (*status) { + wtbp = wtb; + for (iwtb = 0; iwtb < nwtb; iwtb++, wtbp++) { + if (*wtbp->arrayp) free(*wtbp->arrayp); + } + } + + return *status; +} diff --git a/deps/wcslib/C/getwcstab.h b/deps/wcslib/C/getwcstab.h new file mode 100644 index 0000000..d8e6b32 --- /dev/null +++ b/deps/wcslib/C/getwcstab.h @@ -0,0 +1,190 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: getwcstab.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* Summary of the getwcstab routines +* --------------------------------- +* fits_read_wcstab(), an implementation of a FITS table reading routine for +* 'TAB' coordinates, is provided for CFITSIO programmers. It has been +* incorporated into CFITSIO as of v3.006 with the definitions in this file, +* getwcstab.h, moved into fitsio.h. +* +* fits_read_wcstab() is not included in the WCSLIB object library but the +* source code is presented here as it may be useful for programmers using an +* older version of CFITSIO than 3.006, or as a programming template for +* non-CFITSIO programmers. +* +* +* fits_read_wcstab() - FITS 'TAB' table reading routine +* ---------------------------------------------------- +* fits_read_wcstab() extracts arrays from a binary table required in +* constructing 'TAB' coordinates. +* +* Given: +* fptr fitsfile * +* Pointer to the file handle returned, for example, by +* the fits_open_file() routine in CFITSIO. +* +* nwtb int Number of arrays to be read from the binary table(s). +* +* Given and returned: +* wtb wtbarr * Address of the first element of an array of wtbarr +* typedefs. This wtbarr typedef is defined to match the +* wtbarr struct defined in WCSLIB. An array of such +* structs returned by the WCSLIB function wcstab() as +* discussed in the notes below. +* +* Returned: +* status int * CFITSIO status value. +* +* Function return value: +* int CFITSIO status value. +* +* Notes: +* 1: In order to maintain WCSLIB and CFITSIO as independent libraries it is +* not permissible for any CFITSIO library code to include WCSLIB header +* files, or vice versa. However, the CFITSIO function fits_read_wcstab() +* accepts an array of wtbarr structs defined in wcs.h within WCSLIB. +* +* The problem therefore is to define the wtbarr struct within fitsio.h +* without including wcs.h, especially noting that wcs.h will often (but +* not always) be included together with fitsio.h in an applications +* program that uses fits_read_wcstab(). +* +* The solution adopted is for WCSLIB to define "struct wtbarr" while +* fitsio.h defines "typedef wtbarr" as an untagged struct with identical +* members. This allows both wcs.h and fitsio.h to define a wtbarr data +* type without conflict by virtue of the fact that structure tags and +* typedef names share different name spaces in C; Appendix A, Sect. A11.1 +* (p227) of the K&R ANSI edition states that: +* += Identifiers fall into several name spaces that do not interfere with += one another; the same identifier may be used for different purposes, += even in the same scope, if the uses are in different name spaces. += These classes are: objects, functions, typedef names, and enum += constants; labels; tags of structures, unions, and enumerations; and += members of each structure or union individually. +* +* Therefore, declarations within WCSLIB look like +* += struct wtbarr *w; +* +* while within CFITSIO they are simply +* += wtbarr *w; +* +* As suggested by the commonality of the names, these are really the same +* aggregate data type. However, in passing a (struct wtbarr *) to +* fits_read_wcstab() a cast to (wtbarr *) is formally required. +* +* When using WCSLIB and CFITSIO together in C++ the situation is +* complicated by the fact that typedefs and structs share the same +* namespace; C++ Annotated Reference Manual, Sect. 7.1.3 (p105). In that +* case the wtbarr struct in wcs.h is renamed by preprocessor macro +* substitution to wtbarr_s to distinguish it from the typedef defined in +* fitsio.h. However, the scope of this macro substitution is limited to +* wcs.h itself and CFITSIO programmer code, whether in C++ or C, should +* always use the wtbarr typedef. +* +* +* wtbarr typedef +* -------------- +* The wtbarr typedef is defined as a struct containing the following members: +* +* int i +* Image axis number. +* +* int m +* Array axis number for index vectors. +* +* int kind +* Character identifying the array type: +* - c: coordinate array, +* - i: index vector. +* +* char extnam[72] +* EXTNAME identifying the binary table extension. +* +* int extver +* EXTVER identifying the binary table extension. +* +* int extlev +* EXTLEV identifying the binary table extension. +* +* char ttype[72] +* TTYPEn identifying the column of the binary table that contains the +* array. +* +* long row +* Table row number. +* +* int ndim +* Expected dimensionality of the array. +* +* int *dimlen +* Address of the first element of an array of int of length ndim into +* which the array axis lengths are to be written. +* +* double **arrayp +* Pointer to an array of double which is to be allocated by the user +* and into which the array is to be written. +* +*===========================================================================*/ + +#ifndef WCSLIB_GETWCSTAB +#define WCSLIB_GETWCSTAB + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct { + int i; // Image axis number. + int m; // Array axis number for index vectors. + int kind; // Array type, 'c' (coord) or 'i' (index). + char extnam[72]; // EXTNAME of binary table extension. + int extver; // EXTVER of binary table extension. + int extlev; // EXTLEV of binary table extension. + char ttype[72]; // TTYPEn of column containing the array. + long row; // Table row number. + int ndim; // Expected array dimensionality. + int *dimlen; // Where to write the array axis lengths. + double **arrayp; // Where to write the address of the array + // allocated to store the array. +} wtbarr; + + +int fits_read_wcstab(fitsfile *fptr, int nwtb, wtbarr *wtb, int *status); + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_GETWCSTAB diff --git a/deps/wcslib/C/lin.c b/deps/wcslib/C/lin.c new file mode 100644 index 0000000..dbb8992 --- /dev/null +++ b/deps/wcslib/C/lin.c @@ -0,0 +1,1390 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: lin.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsprintf.h" +#include "lin.h" +#include "dis.h" + +// Map status return value to message. +const char *lin_errmsg[] = { + "Success", + "Null linprm pointer passed", + "Memory allocation failed", + "PCi_ja matrix is singular", + "Failed to initialize distortion functions", + "Distort error", + "De-distort error"}; + +// Map error returns for lower-level routines. +const int lin_diserr[] = { + LINERR_SUCCESS, // 0: DISERR_SUCCESS + LINERR_NULL_POINTER, // 1: DISERR_NULL_POINTER + LINERR_MEMORY, // 2: DISERR_MEMORY + LINERR_DISTORT_INIT, // 3: DISERR_BAD_PARAM + LINERR_DISTORT, // 4: DISERR_DISTORT + LINERR_DEDISTORT // 5: DISERR_DEDISTORT +}; + +static const int LINSET = 137; + +// Convenience macro for invoking wcserr_set(). +#define LIN_ERRMSG(status) WCSERR_SET(status), lin_errmsg[status] + +//---------------------------------------------------------------------------- + +int linini(int alloc, int naxis, struct linprm *lin) + +{ + return lininit(alloc, naxis, lin, -1); +} + +//---------------------------------------------------------------------------- + +int lininit(int alloc, int naxis, struct linprm *lin, int ndpmax) + +{ + static const char *function = "lininit"; + + if (lin == 0x0) return LINERR_NULL_POINTER; + + // Initialize error message handling. + if (lin->flag == -1) { + lin->err = 0x0; + } + struct wcserr **err = &(lin->err); + wcserr_clear(err); + + + // Initialize memory management. + if (lin->flag == -1 || lin->m_flag != LINSET) { + if (lin->flag == -1) { + lin->dispre = 0x0; + lin->disseq = 0x0; + lin->dummy = 0x0; + } + + lin->m_flag = 0; + lin->m_naxis = 0; + lin->m_crpix = 0x0; + lin->m_pc = 0x0; + lin->m_cdelt = 0x0; + lin->m_dispre = 0x0; + lin->m_disseq = 0x0; + } + + if (naxis < 0) { + return wcserr_set(WCSERR_SET(LINERR_MEMORY), + "naxis must not be negative (got %d)", naxis); + } + + + // Allocate memory for arrays if required. + if (alloc || + lin->crpix == 0x0 || + lin->pc == 0x0 || + lin->cdelt == 0x0) { + + // Was sufficient allocated previously? + if (lin->m_flag == LINSET && lin->m_naxis < naxis) { + // No, free it. + linfree(lin); + } + + if (alloc || lin->crpix == 0x0) { + if (lin->m_crpix) { + // In case the caller fiddled with it. + lin->crpix = lin->m_crpix; + + } else { + if ((lin->crpix = calloc(naxis, sizeof(double))) == 0x0) { + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + lin->m_flag = LINSET; + lin->m_naxis = naxis; + lin->m_crpix = lin->crpix; + } + } + + if (alloc || lin->pc == 0x0) { + if (lin->m_pc) { + // In case the caller fiddled with it. + lin->pc = lin->m_pc; + + } else { + if ((lin->pc = calloc(naxis*naxis, sizeof(double))) == 0x0) { + linfree(lin); + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + lin->m_flag = LINSET; + lin->m_naxis = naxis; + lin->m_pc = lin->pc; + } + } + + if (alloc || lin->cdelt == 0x0) { + if (lin->m_cdelt) { + // In case the caller fiddled with it. + lin->cdelt = lin->m_cdelt; + + } else { + if ((lin->cdelt = calloc(naxis, sizeof(double))) == 0x0) { + linfree(lin); + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + lin->m_flag = LINSET; + lin->m_naxis = naxis; + lin->m_cdelt = lin->cdelt; + } + } + } + + + // Reinitialize disprm structs if we are managing them. + if (lin->m_dispre) { + disinit(1, naxis, lin->dispre, ndpmax); + } + + if (lin->m_disseq) { + disinit(1, naxis, lin->disseq, ndpmax); + } + + + // Free memory allocated by linset(). + if (abs(lin->flag) == LINSET) { + if (lin->piximg) free(lin->piximg); + if (lin->imgpix) free(lin->imgpix); + } + + lin->piximg = 0x0; + lin->imgpix = 0x0; + lin->i_naxis = 0; + lin->unity = 0; + lin->affine = 0; + lin->simple = 0; + + + lin->naxis = naxis; + + // CRPIXja defaults to 0.0. + for (int j = 0; j < naxis; j++) { + lin->crpix[j] = 0.0; + } + + // PCi_ja defaults to the unit matrix. + double *pc = lin->pc; + for (int i = 0; i < naxis; i++) { + for (int j = 0; j < naxis; j++) { + if (j == i) { + *pc = 1.0; + } else { + *pc = 0.0; + } + pc++; + } + } + + // CDELTia defaults to 1.0. + for (int i = 0; i < naxis; i++) { + lin->cdelt[i] = 1.0; + } + + lin->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int lindis(int sequence, struct linprm *lin, struct disprm *dis) + +{ + return lindist(sequence, lin, dis, -1); +} + +//---------------------------------------------------------------------------- + +int lindist(int sequence, struct linprm *lin, struct disprm *dis, int ndpmax) + +{ + static const char *function = "lindist"; + + if (lin == 0x0) return LINERR_NULL_POINTER; + struct wcserr **err = &(lin->err); + + if (sequence == 1) { + if (lin->m_dispre) { + disfree(lin->m_dispre); + free(lin->m_dispre); + } + + lin->dispre = dis; + lin->m_flag = LINSET; + lin->m_dispre = dis; + + } else if (sequence == 2) { + if (lin->m_disseq) { + disfree(lin->m_disseq); + free(lin->m_disseq); + } + + lin->disseq = dis; + lin->m_flag = LINSET; + lin->m_disseq = dis; + + } else { + return wcserr_set(WCSERR_SET(LINERR_DISTORT_INIT), + "Invalid sequence (%d)", sequence); + } + + if (dis) { + int status = disinit(1, lin->naxis, dis, ndpmax); + if (status) { + return wcserr_set(LIN_ERRMSG(lin_diserr[status])); + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int lincpy(int alloc, const struct linprm *linsrc, struct linprm *lindst) + +{ + static const char *function = "lincpy"; + + if (linsrc == 0x0) return LINERR_NULL_POINTER; + if (lindst == 0x0) return LINERR_NULL_POINTER; + struct wcserr **err = &(lindst->err); + + int naxis = linsrc->naxis; + if (naxis < 1) { + return wcserr_set(WCSERR_SET(LINERR_MEMORY), + "naxis must be positive (got %d)", naxis); + } + + int status = lininit(alloc, naxis, lindst, 0); + if (status) { + return status; + } + + const double *srcp = linsrc->crpix; + double *dstp = lindst->crpix; + for (int j = 0; j < naxis; j++) { + *(dstp++) = *(srcp++); + } + + srcp = linsrc->pc; + dstp = lindst->pc; + for (int i = 0; i < naxis; i++) { + for (int j = 0; j < naxis; j++) { + *(dstp++) = *(srcp++); + } + } + + srcp = linsrc->cdelt; + dstp = lindst->cdelt; + for (int i = 0; i < naxis; i++) { + *(dstp++) = *(srcp++); + } + + if (linsrc->dispre) { + if (!lindst->dispre) { + if ((lindst->dispre = calloc(1, sizeof(struct disprm))) == 0x0) { + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + lindst->m_dispre = lindst->dispre; + } + + if ((status = discpy(alloc, linsrc->dispre, lindst->dispre))) { + status = wcserr_set(LIN_ERRMSG(lin_diserr[status])); + goto cleanup; + } + } + + if (linsrc->disseq) { + if (!lindst->disseq) { + if ((lindst->disseq = calloc(1, sizeof(struct disprm))) == 0x0) { + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + lindst->m_disseq = lindst->disseq; + } + + if ((status = discpy(alloc, linsrc->disseq, lindst->disseq))) { + status = wcserr_set(LIN_ERRMSG(lin_diserr[status])); + goto cleanup; + } + } + +cleanup: + if (status) { + if (lindst->m_dispre) { + disfree(lindst->m_dispre); + free(lindst->m_dispre); + lindst->m_dispre = 0x0; + lindst->dispre = 0x0; + } + + if (lindst->m_disseq) { + disfree(lindst->m_disseq); + free(lindst->m_disseq); + lindst->m_disseq = 0x0; + lindst->disseq = 0x0; + } + } + + return status; +} + +//---------------------------------------------------------------------------- + +int linfree(struct linprm *lin) + +{ + if (lin == 0x0) return LINERR_NULL_POINTER; + + if (lin->flag != -1) { + // Optionally allocated by lininit() for given parameters. + if (lin->m_flag == LINSET) { + if (lin->crpix == lin->m_crpix) lin->crpix = 0x0; + if (lin->pc == lin->m_pc) lin->pc = 0x0; + if (lin->cdelt == lin->m_cdelt) lin->cdelt = 0x0; + if (lin->dispre == lin->m_dispre) lin->dispre = 0x0; + if (lin->disseq == lin->m_disseq) lin->disseq = 0x0; + + if (lin->m_crpix) free(lin->m_crpix); + if (lin->m_pc) free(lin->m_pc); + if (lin->m_cdelt) free(lin->m_cdelt); + + if (lin->m_dispre) { + disfree(lin->m_dispre); + free(lin->m_dispre); + } + + if (lin->m_disseq) { + disfree(lin->m_disseq); + free(lin->m_disseq); + } + } + + // Allocated unconditionally by linset(). + if (lin->piximg) free(lin->piximg); + if (lin->imgpix) free(lin->imgpix); + } + + + lin->m_flag = 0; + lin->m_naxis = 0; + lin->m_crpix = 0x0; + lin->m_pc = 0x0; + lin->m_cdelt = 0x0; + lin->m_dispre = 0x0; + lin->m_disseq = 0x0; + + lin->piximg = 0x0; + lin->imgpix = 0x0; + lin->i_naxis = 0; + + wcserr_clear(&(lin->err)); + + lin->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int linsize(const struct linprm *lin, int sizes[2]) + +{ + if (lin == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct linprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + int naxis = lin->naxis; + + // linprm::crpix[]. + sizes[1] += naxis * sizeof(double); + + // linprm::pc[]. + sizes[1] += naxis*naxis * sizeof(double); + + // linprm::cdelt[]. + sizes[1] += naxis * sizeof(double); + + // linprm::dispre[]. + int exsizes[2]; + dissize(lin->dispre, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + // linprm::disseq[]. + dissize(lin->disseq, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + // linprm::err[]. + wcserr_size(lin->err, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + // The remaining arrays are allocated unconditionally by linset(). + if (abs(lin->flag) != LINSET) { + return 0; + } + + // linprm::piximg[]. + sizes[1] += naxis*naxis * sizeof(double); + + // linprm::imgpix[]. + sizes[1] += naxis*naxis * sizeof(double); + + return 0; +} + +//---------------------------------------------------------------------------- + +int linenq(const struct linprm *lin, int enquiry) + +{ + // Initialize. + if (lin == 0x0) return LINERR_NULL_POINTER; + + int answer = 0; + + if (enquiry & LINENQ_MEM) { + if (lin->m_flag != LINSET) return 0; + answer = 1; + } + + if (enquiry & LINENQ_SET) { + if (abs(lin->flag) != LINSET) return 0; + answer = 1; + } + + if (enquiry & LINENQ_BYP) { + if (lin->flag != 1 && lin->flag != -LINSET) return 0; + answer = 1; + } + + return answer; +} + +//---------------------------------------------------------------------------- + +int linprt(const struct linprm *lin) + +{ + if (lin == 0x0) return LINERR_NULL_POINTER; + + if (abs(lin->flag) != LINSET) { + wcsprintf("The linprm struct is UNINITIALIZED.\n"); + return 0; + } + + // Parameters supplied. + wcsprintf(" flag: %d\n", lin->flag); + wcsprintf(" naxis: %d\n", lin->naxis); + + WCSPRINTF_PTR(" crpix: ", lin->crpix, "\n"); + wcsprintf(" "); + for (int j = 0; j < lin->naxis; j++) { + wcsprintf(" %#- 11.5g", lin->crpix[j]); + } + wcsprintf("\n"); + + int k = 0; + WCSPRINTF_PTR(" pc: ", lin->pc, "\n"); + for (int i = 0; i < lin->naxis; i++) { + wcsprintf(" pc[%d][]:", i); + for (int j = 0; j < lin->naxis; j++) { + wcsprintf(" %#- 11.5g", lin->pc[k++]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" cdelt: ", lin->cdelt, "\n"); + wcsprintf(" "); + for (int i = 0; i < lin->naxis; i++) { + wcsprintf(" %#- 11.5g", lin->cdelt[i]); + } + wcsprintf("\n"); + + WCSPRINTF_PTR(" dispre: ", lin->dispre, ""); + if (lin->dispre != 0x0) wcsprintf(" (see below)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" disseq: ", lin->disseq, ""); + if (lin->disseq != 0x0) wcsprintf(" (see below)"); + wcsprintf("\n"); + + // Derived values. + if (lin->piximg == 0x0) { + wcsprintf(" piximg: (nil)\n"); + } else { + int k = 0; + for (int i = 0; i < lin->naxis; i++) { + wcsprintf("piximg[%d][]:", i); + for (int j = 0; j < lin->naxis; j++) { + wcsprintf(" %#- 11.5g", lin->piximg[k++]); + } + wcsprintf("\n"); + } + } + + if (lin->imgpix == 0x0) { + wcsprintf(" imgpix: (nil)\n"); + } else { + int k = 0; + for (int i = 0; i < lin->naxis; i++) { + wcsprintf("imgpix[%d][]:", i); + for (int j = 0; j < lin->naxis; j++) { + wcsprintf(" %#- 11.5g", lin->imgpix[k++]); + } + wcsprintf("\n"); + } + } + + wcsprintf(" i_naxis: %d\n", lin->i_naxis); + wcsprintf(" unity: %d\n", lin->unity); + wcsprintf(" affine: %d\n", lin->affine); + wcsprintf(" simple: %d\n", lin->simple); + + // Error handling. + WCSPRINTF_PTR(" err: ", lin->err, "\n"); + if (lin->err) { + wcserr_prt(lin->err, " "); + } + + // Memory management. + wcsprintf(" m_flag: %d\n", lin->m_flag); + wcsprintf(" m_naxis: %d\n", lin->m_naxis); + WCSPRINTF_PTR(" m_crpix: ", lin->m_crpix, ""); + if (lin->m_crpix == lin->crpix) wcsprintf(" (= crpix)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_pc: ", lin->m_pc, ""); + if (lin->m_pc == lin->pc) wcsprintf(" (= pc)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_cdelt: ", lin->m_cdelt, ""); + if (lin->m_cdelt == lin->cdelt) wcsprintf(" (= cdelt)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_dispre: ", lin->m_dispre, ""); + if (lin->dispre && lin->m_dispre == lin->dispre) wcsprintf(" (= dispre)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_disseq: ", lin->m_disseq, ""); + if (lin->disseq && lin->m_disseq == lin->disseq) wcsprintf(" (= disseq)"); + wcsprintf("\n"); + + // Distortion parameters (from above). + if (lin->dispre) { + wcsprintf("\n"); + wcsprintf("dispre.*\n"); + disprt(lin->dispre); + } + + if (lin->disseq) { + wcsprintf("\n"); + wcsprintf("disseq.*\n"); + disprt(lin->disseq); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int linperr(const struct linprm *lin, const char *prefix) + +{ + if (lin == 0x0) return LINERR_NULL_POINTER; + + if (lin->err && wcserr_prt(lin->err, prefix) == 0) { + if (lin->dispre) wcserr_prt(lin->dispre->err, prefix); + if (lin->disseq) wcserr_prt(lin->disseq->err, prefix); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int linset(struct linprm *lin) + +{ + static const char *function = "linset"; + + if (lin == 0x0) return LINERR_NULL_POINTER; + if (lin->flag == -LINSET) return 0; + struct wcserr **err = &(lin->err); + + int naxis = lin->naxis; + + // Check for a unit matrix. + lin->unity = 1; + double *pc = lin->pc; + for (int i = 0; i < naxis; i++) { + for (int j = 0; j < naxis; j++) { + if (j == i) { + if (*(pc++) != 1.0) { + lin->unity = 0; + break; + } + } else { + if (*(pc++) != 0.0) { + lin->unity = 0; + break; + } + } + } + } + + + if (lin->unity) { + if (abs(lin->flag) == LINSET) { + // Free memory that may have been allocated previously. + if (lin->piximg) free(lin->piximg); + if (lin->imgpix) free(lin->imgpix); + } + + lin->piximg = 0x0; + lin->imgpix = 0x0; + lin->i_naxis = 0; + + // Check cdelt. + for (int i = 0; i < naxis; i++) { + if (lin->cdelt[i] == 0.0) { + return wcserr_set(LIN_ERRMSG(LINERR_SINGULAR_MTX)); + } + } + + } else { + if (abs(lin->flag) != LINSET || lin->i_naxis < naxis) { + if (abs(lin->flag) == LINSET) { + // Free memory that may have been allocated previously. + if (lin->piximg) free(lin->piximg); + if (lin->imgpix) free(lin->imgpix); + } + + // Allocate memory for internal arrays. + if ((lin->piximg = calloc(naxis*naxis, sizeof(double))) == 0x0) { + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + if ((lin->imgpix = calloc(naxis*naxis, sizeof(double))) == 0x0) { + free(lin->piximg); + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + lin->i_naxis = naxis; + } + + // Compute the pixel-to-image transformation matrix. + pc = lin->pc; + double *piximg = lin->piximg; + for (int i = 0; i < naxis; i++) { + if (lin->disseq == 0x0) { + // No sequent distortions. Incorporate cdelt into piximg. + for (int j = 0; j < naxis; j++) { + *(piximg++) = lin->cdelt[i] * (*(pc++)); + } + } else { + for (int j = 0; j < naxis; j++) { + *(piximg++) = *(pc++); + } + } + } + + // Compute the image-to-pixel transformation matrix. + int status = matinv(naxis, lin->piximg, lin->imgpix); + if (status) { + return wcserr_set(LIN_ERRMSG(status)); + } + } + + + // Set up the distortion functions. + lin->affine = 1; + if (lin->dispre) { + (lin->dispre)->flag = 0; + int status = disset(lin->dispre); + if (status) { + return wcserr_set(LIN_ERRMSG(lin_diserr[status])); + } + + lin->affine = 0; + } + + if (lin->disseq) { + (lin->disseq)->flag = 0; + int status = disset(lin->disseq); + if (status) { + return wcserr_set(LIN_ERRMSG(lin_diserr[status])); + } + + lin->affine = 0; + } + + lin->simple = lin->unity && lin->affine; + + lin->flag = (lin->flag == 1) ? -LINSET : LINSET; + + return 0; +} + +//---------------------------------------------------------------------------- + +int linp2x( + struct linprm *lin, + int ncoord, + int nelem, + const double pixcrd[], + double imgcrd[]) + +{ + static const char *function = "linp2x"; + + // Initialize. + if (lin == 0x0) return LINERR_NULL_POINTER; + struct wcserr **err = &(lin->err); + + if (abs(lin->flag) != LINSET) { + int status = linset(lin); + if (status) { + return status; + } + } + + int naxis = lin->naxis; + + + // Convert pixel coordinates to intermediate world coordinates. + const double *pix = pixcrd; + double *img = imgcrd; + + if (lin->simple) { + // Handle the simplest and most common case with maximum efficiency. + int nelemn = nelem - naxis; + for (int k = 0; k < ncoord; k++) { + for (int i = 0; i < naxis; i++) { + *(img++) = lin->cdelt[i] * (*(pix++) - lin->crpix[i]); + } + + pix += nelemn; + img += nelemn; + } + + } else if (lin->affine) { + // No distortions. + int ndbl = naxis * sizeof(double); + int nelemn = nelem - naxis; + for (int k = 0; k < ncoord; k++) { + memset(img, 0, ndbl); + + for (int j = 0; j < naxis; j++) { + // cdelt will have been incorporated into piximg. + double *piximg = lin->piximg + j; + + // Column-wise multiplication allows this to be cached. + double temp = *(pix++) - lin->crpix[j]; + for (int i = 0; i < naxis; i++, piximg += naxis) { + img[i] += *piximg * temp; + } + } + + pix += nelemn; + img += nelem; + } + + } else { + // Distortions are present. + int ndbl = naxis * sizeof(double); + double *tmp = calloc(naxis, sizeof(double)); + if (tmp == 0x0) { + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + for (int k = 0; k < ncoord; k++) { + if (lin->dispre) { + int status = disp2x(lin->dispre, pix, tmp); + if (status) { + return wcserr_set(LIN_ERRMSG(lin_diserr[status])); + } + } else { + memcpy(tmp, pix, ndbl); + } + + if (lin->unity) { + for (int i = 0; i < naxis; i++) { + img[i] = tmp[i] - lin->crpix[i]; + } + + } else { + for (int j = 0; j < naxis; j++) { + tmp[j] -= lin->crpix[j]; + } + + double *piximg = lin->piximg; + for (int i = 0; i < naxis; i++) { + img[i] = 0.0; + for (int j = 0; j < naxis; j++) { + img[i] += *(piximg++) * tmp[j]; + } + } + } + + if (lin->disseq) { + int status = disp2x(lin->disseq, img, tmp); + if (status) { + free(tmp); + return wcserr_set(LIN_ERRMSG(lin_diserr[status])); + } + + // With sequent distortions, cdelt is not incorporated into piximg... + for (int i = 0; i < naxis; i++) { + img[i] = lin->cdelt[i] * tmp[i]; + } + + } else if (lin->unity) { + // ...nor if the matrix is unity. + for (int i = 0; i < naxis; i++) { + img[i] *= lin->cdelt[i]; + } + } + + pix += nelem; + img += nelem; + } + + free(tmp); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int linx2p( + struct linprm *lin, + int ncoord, + int nelem, + const double imgcrd[], + double pixcrd[]) + +{ + static const char *function = "linx2p"; + + int status = 0; + + // Initialize. + if (lin == 0x0) return LINERR_NULL_POINTER; + struct wcserr **err = &(lin->err); + + if (abs(lin->flag) != LINSET) { + if ((status = linset(lin))) { + return status; + } + } + + int naxis = lin->naxis; + + + // Convert intermediate world coordinates to pixel coordinates. + const double *img = imgcrd; + double *pix = pixcrd; + + if (lin->simple) { + // Handle the simplest and most common case with maximum efficiency. + int nelemn = nelem - naxis; + for (int k = 0; k < ncoord; k++) { + for (int j = 0; j < naxis; j++) { + *(pix++) = (*(img++) / lin->cdelt[j]) + lin->crpix[j]; + } + + img += nelemn; + pix += nelemn; + } + + } else if (lin->affine) { + // No distortions. + int nelemn = nelem - naxis; + for (int k = 0; k < ncoord; k++) { + // cdelt will have been incorporated into imgpix. + double *imgpix = lin->imgpix; + + for (int j = 0; j < naxis; j++) { + *pix = 0.0; + for (int i = 0; i < naxis; i++) { + *pix += *imgpix * img[i]; + imgpix++; + } + + *(pix++) += lin->crpix[j]; + } + + img += nelem; + pix += nelemn; + } + + } else { + // Distortions are present. + int ndbl = naxis * sizeof(double); + double *tmp = calloc(naxis, sizeof(double)); + if (tmp == 0x0) { + return wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + } + + for (int k = 0; k < ncoord; k++) { + if (lin->disseq) { + // With sequent distortions, cdelt is not incorporated into imgpix... + for (int i = 0; i < naxis; i++) { + tmp[i] = img[i] / lin->cdelt[i]; + } + + if ((status = disx2p(lin->disseq, tmp, pix))) { + wcserr_set(LIN_ERRMSG(lin_diserr[status])); + goto cleanup; + } + + memcpy(tmp, pix, ndbl); + + } else if (lin->unity) { + // ...nor if the matrix is unity. + for (int i = 0; i < naxis; i++) { + tmp[i] = img[i] / lin->cdelt[i]; + } + + } else { + // cdelt will have been incorporated into imgpix. + memcpy(tmp, img, ndbl); + } + + if (lin->unity) { + for (int j = 0; j < naxis; j++) { + pix[j] = tmp[j] + lin->crpix[j]; + } + + } else { + double *imgpix = lin->imgpix; + for (int j = 0; j < naxis; j++) { + pix[j] = lin->crpix[j]; + for (int i = 0; i < naxis; i++) { + pix[j] += *(imgpix++) * tmp[i]; + } + } + } + + if (lin->dispre) { + memcpy(tmp, pix, ndbl); + + if ((status = disx2p(lin->dispre, tmp, pix))) { + wcserr_set(LIN_ERRMSG(lin_diserr[status])); + goto cleanup; + } + } + + img += nelem; + pix += nelem; + } + + cleanup: + free(tmp); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int linwarp( + struct linprm *lin, + const double pixblc[], + const double pixtrc[], + const double pixsamp[], + int *nsamp, + double maxdis[], + double *maxtot, + double avgdis[], + double *avgtot, + double rmsdis[], + double *rmstot) + +{ + static const char *function = "linwarp"; + + // Initialize. + if (lin == 0x0) return LINERR_NULL_POINTER; + struct wcserr **err = &(lin->err); + + int naxis = lin->naxis; + + if (nsamp) *nsamp = 0; + for (int j = 0; j < naxis; j++) { + if (maxdis) maxdis[j] = 0.0; + if (avgdis) avgdis[j] = 0.0; + if (rmsdis) rmsdis[j] = 0.0; + } + if (maxtot) *maxtot = 0.0; + if (avgtot) *avgtot = 0.0; + if (rmstot) *rmstot = 0.0; + + // Quick return if no distortions. + if (lin->affine) return 0; + + int status = 0; + + // It's easier if there are no sequent distortions! + if (lin->disseq == 0x0) { + status = diswarp(lin->dispre, pixblc, pixtrc, pixsamp, nsamp, maxdis, + maxtot, avgdis, avgtot, rmsdis, rmstot); + return wcserr_set(LIN_ERRMSG(lin_diserr[status])); + } + + // Make a reference copy of lin without distortions. + double *pixinc = 0x0; + double *pix0 = 0x0; + struct linprm affine; + affine.flag = -1; + + status = lincpy(1, lin, &affine) || + lindist(1, &affine, 0x0, 0) || + lindist(2, &affine, 0x0, 0) || + linset(&affine); + if (status) { + wcserr_set(LIN_ERRMSG(status)); + goto cleanup; + } + + // Work out increments on each axis. + int ncoord = 0; + if ((pixinc = calloc(naxis, sizeof(double))) == 0x0) { + wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + goto cleanup; + } + + for (int j = 0; j < naxis; j++) { + double pixspan = pixtrc[j] - (pixblc ? pixblc[j] : 1.0); + + if (pixsamp == 0x0) { + pixinc[j] = 1.0; + } else if (pixsamp[j] == 0.0) { + pixinc[j] = 1.0; + } else if (pixsamp[j] > 0.0) { + pixinc[j] = pixsamp[j]; + } else if (pixsamp[j] > -1.5) { + pixinc[j] = 2.0*pixspan; + } else { + pixinc[j] = pixspan / ((int)(-pixsamp[j] - 0.5)); + } + + if (j == 0) { + // Number of samples on axis 1. + ncoord = 1 + (int)((pixspan/pixinc[0]) + 0.5); + } + } + + // Allocate memory in bulk for processing the image row by row. + if ((pix0 = calloc((3*ncoord+3)*naxis, sizeof(double))) == 0x0) { + status = wcserr_set(LIN_ERRMSG(LINERR_MEMORY)); + goto cleanup; + } + + // Carve up the allocated memory. + double *img = pix0 + naxis*ncoord; + double *pix1 = img + naxis*ncoord; + double *pixend = pix1 + naxis*ncoord; + double *sumdis = pixend + naxis; + double *ssqdis = sumdis + naxis; + + + // Set up the array of pixel coordinates. + for (int j = 0; j < naxis; j++) { + pix0[j] = pixblc ? pixblc[j] : 1.0; + pixend[j] = pixtrc[j] + 0.5*pixinc[j]; + } + + double *pix0p = pix0 + naxis; + for (int i = 1; i < ncoord; i++) { + *(pix0p++) = pix0[0] + i*pixinc[0]; + + for (int j = 1; j < naxis; j++) { + *(pix0p++) = pix0[j]; + } + } + + // Initialize accumulators. + for (int j = 0; j < naxis; j++) { + sumdis[j] = 0.0; + ssqdis[j] = 0.0; + } + double sumtot = 0.0; + double ssqtot = 0.0; + + + // Loop over N dimensions. + int carry = 0; + while (carry == 0) { + if ((status = linp2x(lin, ncoord, naxis, pix0, img))) { + // (Preserve the error message set by linp2x().) + goto cleanup; + } + + if ((status = linx2p(&affine, ncoord, naxis, img, pix1))) { + // (Preserve the error message set by linx2p().) + goto cleanup; + } + + // Accumulate statistics. + double *pix0p = pix0; + double *pix1p = pix1; + for (int i = 0; i < ncoord; i++) { + (*nsamp)++; + + double dssq = 0.0; + for (int j = 0; j < naxis; j++) { + double dpix = *(pix1p++) - *(pix0p++); + double dpx2 = dpix*dpix; + + sumdis[j] += dpix; + ssqdis[j] += dpx2; + + if (maxdis && (dpix = fabs(dpix)) > maxdis[j]) maxdis[j] = dpix; + + dssq += dpx2; + } + + double totdis = sqrt(dssq); + sumtot += totdis; + ssqtot += totdis*totdis; + + if (maxtot && *maxtot < totdis) *maxtot = totdis; + } + + // Next array of pixel coordinates. + for (int j = 1; j < naxis; j++) { + pix0[j] += pixinc[j]; + if ((carry = (pix0[j] > pixend[j]))) { + pix0[j] = pixblc ? pixblc[j] : 1.0; + } + + pix0p = pix0 + naxis + j; + for (int i = 1; i < ncoord; i++) { + *pix0p = pix0[j]; + pix0p += naxis; + } + + if (carry == 0) break; + } + } + + + // Compute the means and RMSs. + for (int j = 0; j < naxis; j++) { + ssqdis[j] /= *nsamp; + sumdis[j] /= *nsamp; + if (avgdis) avgdis[j] = sumdis[j]; + if (rmsdis) rmsdis[j] = sqrt(ssqdis[j] - sumdis[j]*sumdis[j]); + } + + ssqtot /= *nsamp; + sumtot /= *nsamp; + if (avgtot) *avgtot = sumtot; + if (rmstot) *rmstot = sqrt(ssqtot - sumtot*sumtot); + + +cleanup: + linfree(&affine); + if (pixinc) free(pixinc); + if (pix0) free(pix0); + + return status; +} + +//---------------------------------------------------------------------------- + +int matinv(int n, const double mat[], double inv[]) + +{ + // Allocate memory for internal arrays. + int *mxl = calloc(n, sizeof(int)); + if (mxl == 0x0) { + return LINERR_MEMORY; + } + + int *lxm = calloc(n, sizeof(int)); + if (lxm == 0x0) { + free(mxl); + return LINERR_MEMORY; + } + + double *rowmax = calloc(n, sizeof(double)); + if (rowmax == 0x0) { + free(mxl); + free(lxm); + return LINERR_MEMORY; + } + + double *lu = calloc(n*n, sizeof(double)); + if (lu == 0x0) { + free(mxl); + free(lxm); + free(rowmax); + return LINERR_MEMORY; + } + + + // Initialize arrays. + int ij = 0; + for (int i = 0; i < n; i++) { + // Vector that records row interchanges. + mxl[i] = i; + + rowmax[i] = 0.0; + + for (int j = 0; j < n; j++, ij++) { + double dtemp = fabs(mat[ij]); + if (dtemp > rowmax[i]) rowmax[i] = dtemp; + + lu[ij] = mat[ij]; + } + + // A row of zeroes indicates a singular matrix. + if (rowmax[i] == 0.0) { + free(mxl); + free(lxm); + free(rowmax); + free(lu); + return LINERR_SINGULAR_MTX; + } + } + + + // Form the LU triangular factorization using scaled partial pivoting. + for (int k = 0; k < n; k++) { + // Decide whether to pivot. + int pivot = k; + double colmax = fabs(lu[k*n+k]) / rowmax[k]; + + for (int i = k+1; i < n; i++) { + int ik = i*n + k; + double dtemp = fabs(lu[ik]) / rowmax[i]; + if (dtemp > colmax) { + colmax = dtemp; + pivot = i; + } + } + + if (pivot > k) { + // We must pivot, interchange the rows of the design matrix. + int kj = k*n; + int pj = pivot*n; + for (int j = 0; j < n; j++, pj++, kj++) { + double dtemp = lu[pj]; + lu[pj] = lu[kj]; + lu[kj] = dtemp; + } + + // Amend the vector of row maxima. + double dtemp = rowmax[pivot]; + rowmax[pivot] = rowmax[k]; + rowmax[k] = dtemp; + + // Record the interchange for later use. + int itemp = mxl[pivot]; + mxl[pivot] = mxl[k]; + mxl[k] = itemp; + } + + // Gaussian elimination. + for (int i = k+1; i < n; i++) { + int ik = i*n + k; + + // Nothing to do if lu[ik] is zero. + if (lu[ik] != 0.0) { + // Save the scaling factor. + lu[ik] /= lu[k*n+k]; + + // Subtract rows. + for (int j = k+1; j < n; j++) { + lu[i*n+j] -= lu[ik]*lu[k*n+j]; + } + } + } + } + + + // mxl[i] records which row of mat corresponds to row i of lu. + // lxm[i] records which row of lu corresponds to row i of mat. + for (int i = 0; i < n; i++) { + lxm[mxl[i]] = i; + } + + + // Determine the inverse matrix. + ij = 0; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++, ij++) { + inv[ij] = 0.0; + } + } + + for (int k = 0; k < n; k++) { + inv[lxm[k]*n+k] = 1.0; + + // Forward substitution. + for (int i = lxm[k]+1; i < n; i++) { + for (int j = lxm[k]; j < i; j++) { + inv[i*n+k] -= lu[i*n+j]*inv[j*n+k]; + } + } + + // Backward substitution. + for (int i = n-1; i >= 0; i--) { + for (int j = i+1; j < n; j++) { + inv[i*n+k] -= lu[i*n+j]*inv[j*n+k]; + } + inv[i*n+k] /= lu[i*n+i]; + } + } + + free(mxl); + free(lxm); + free(rowmax); + free(lu); + + return 0; +} diff --git a/deps/wcslib/C/lin.h b/deps/wcslib/C/lin.h new file mode 100644 index 0000000..bfae6ff --- /dev/null +++ b/deps/wcslib/C/lin.h @@ -0,0 +1,810 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: lin.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the lin routines +* --------------------------- +* Routines in this suite apply the linear transformation defined by the FITS +* World Coordinate System (WCS) standard, as described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) +* +* These routines are based on the linprm struct which contains all information +* needed for the computations. The struct contains some members that must be +* set by the user, and others that are maintained by these routines, somewhat +* like a C++ class but with no encapsulation. +* +* Six routines, linini(), lininit(), lindis(), lindist() lincpy(), and +* linfree() are provided to manage the linprm struct, linsize() computes its +* total size including allocated memory, linenq() returns information about +* the state of the struct, and linprt() prints its contents. +* +* linperr() prints the error message(s) (if any) stored in a linprm struct, +* and the disprm structs that it may contain. +* +* A setup routine, linset(), computes intermediate values in the linprm struct +* from parameters in it that were supplied by the user. The struct always +* needs to be set up by linset() but need not be called explicitly - refer to +* the explanation of linprm::flag. +* +* linp2x() and linx2p() implement the WCS linear transformations. +* +* An auxiliary routine, linwarp(), computes various measures of the distortion +* over a specified range of pixel coordinates. +* +* An auxiliary matrix inversion routine, matinv(), is included. It uses +* LU-triangular factorization with scaled partial pivoting. +* +* +* linini() - Default constructor for the linprm struct +* ---------------------------------------------------- +* linini() is a thin wrapper on lininit(). It invokes it with ndpmax set +* to -1 which causes it to use the value of the global variable NDPMAX. It +* is thereby potentially thread-unsafe if NDPMAX is altered dynamically via +* disndp(). Use lininit() for a thread-safe alternative in this case. +* +* +* lininit() - Default constructor for the linprm struct +* ----------------------------------------------------- +* lininit() allocates memory for arrays in a linprm struct and sets all +* members of the struct to default values. +* +* PLEASE NOTE: every linprm struct must be initialized by lininit(), possibly +* repeatedly. On the first invokation, and only the first invokation, +* linprm::flag must be set to -1 to initialize memory management, regardless +* of whether lininit() will actually be used to allocate memory. +* +* Given: +* alloc int If true, allocate memory unconditionally for arrays in +* the linprm struct. +* +* If false, it is assumed that pointers to these arrays +* have been set by the user except if they are null +* pointers in which case memory will be allocated for +* them regardless. (In other words, setting alloc true +* saves having to initalize these pointers to zero.) +* +* naxis int The number of world coordinate axes, used to determine +* array sizes. +* +* Given and returned: +* lin struct linprm* +* Linear transformation parameters. Note that, in order +* to initialize memory management linprm::flag should be +* set to -1 when lin is initialized for the first time +* (memory leaks may result if it had already been +* initialized). +* +* Given: +* ndpmax int The number of DPja or DQia keywords to allocate space +* for. If set to -1, the value of the global variable +* NDPMAX will be used. This is potentially +* thread-unsafe if disndp() is being used dynamically to +* alter its value. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* 2: Memory allocation failed. +* +* For returns > 1, a detailed error message is set in +* linprm::err if enabled, see wcserr_enable(). +* +* +* lindis() - Assign a distortion to a linprm struct +* ------------------------------------------------- +* lindis() is a thin wrapper on lindist(). It invokes it with ndpmax set +* to -1 which causes the value of the global variable NDPMAX to be used (by +* disinit()). It is thereby potentially thread-unsafe if NDPMAX is altered +* dynamically via disndp(). Use lindist() for a thread-safe alternative in +* this case. +* +* +* lindist() - Assign a distortion to a linprm struct +* -------------------------------------------------- +* lindist() may be used to assign the address of a disprm struct to +* linprm::dispre or linprm::disseq. The linprm struct must already have been +* initialized by lininit(). +* +* The disprm struct must have been allocated from the heap (e.g. using +* malloc(), calloc(), etc.). lindist() will immediately initialize it via a +* call to disini() using the value of linprm::naxis. Subsequently, it will be +* reinitialized by calls to lininit(), and freed by linfree(), neither of +* which would happen if the disprm struct was assigned directly. +* +* If the disprm struct had previously been assigned via lindist(), it will be +* freed before reassignment. It is also permissable for a null disprm pointer +* to be assigned to disable the distortion correction. +* +* Given: +* sequence int Is it a prior or sequent distortion? +* 1: Prior, the assignment is to linprm::dispre. +* 2: Sequent, the assignment is to linprm::disseq. +* +* Anything else is an error. +* +* Given and returned: +* lin struct linprm* +* Linear transformation parameters. +* +* dis struct disprm* +* Distortion function parameters. +* +* Given: +* ndpmax int The number of DPja or DQia keywords to allocate space +* for. If set to -1, the value of the global variable +* NDPMAX will be used. This is potentially +* thread-unsafe if disndp() is being used dynamically to +* alter its value. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* 4: Invalid sequence. +* +* +* lincpy() - Copy routine for the linprm struct +* --------------------------------------------- +* lincpy() does a deep copy of one linprm struct to another, using lininit() +* to allocate memory for its arrays if required. Only the "information to be +* provided" part of the struct is copied; a call to linset() is required to +* initialize the remainder. +* +* Given: +* alloc int If true, allocate memory for the crpix, pc, and cdelt +* arrays in the destination. Otherwise, it is assumed +* that pointers to these arrays have been set by the +* user except if they are null pointers in which case +* memory will be allocated for them regardless. +* +* linsrc const struct linprm* +* Struct to copy from. +* +* Given and returned: +* lindst struct linprm* +* Struct to copy to. linprm::flag should be set to -1 +* if lindst was not previously initialized (memory leaks +* may result if it was previously initialized). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* 2: Memory allocation failed. +* +* For returns > 1, a detailed error message is set in +* linprm::err if enabled, see wcserr_enable(). +* +* +* linfree() - Destructor for the linprm struct +* -------------------------------------------- +* linfree() frees memory allocated for the linprm arrays by lininit() and/or +* linset(). lininit() keeps a record of the memory it allocates and linfree() +* will only attempt to free this. +* +* PLEASE NOTE: linfree() must not be invoked on a linprm struct that was not +* initialized by lininit(). +* +* Given: +* lin struct linprm* +* Linear transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* +* +* linsize() - Compute the size of a linprm struct +* ----------------------------------------------- +* linsize() computes the full size of a linprm struct, including allocated +* memory. +* +* Given: +* lin const struct linprm* +* Linear transformation parameters. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct linprm). +* +* The second element is the total size of memory +* allocated in the struct, in bytes, assuming that the +* allocation was done by lininit(). This figure +* includes memory allocated for members of constituent +* structs, * such as linprm::dispre. +* +* It is not an error for the struct not to have been set +* up via linset(), which normally results in additional +* memory allocation. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* linenq() - enquire about the state of a linprm struct +* ----------------------------------------------------- +* linenq() may be used to obtain information about the state of a linprm +* struct. The function returns a true/false answer for the enquiry asked. +* +* Given: +* lin const struct linprm* +* Linear transformation parameters. +* +* enquiry int Enquiry according to the following parameters: +* LINENQ_MEM: memory in the struct is being managed by +* WCSLIB (see lininit()). +* LINENQ_SET: the struct has been set up by linset(). +* LINENQ_BYP: the struct is in bypass mode (see +* linset()). +* These may be combined by logical OR, e.g. +* LINENQ_MEM | LINENQ_SET. The enquiry result will be +* the logical AND of the individual results. +* +* Function return value: +* int Enquiry result: +* 0: No. +* 1: Yes. +* +* +* linprt() - Print routine for the linprm struct +* ---------------------------------------------- +* linprt() prints the contents of a linprm struct using wcsprintf(). Mainly +* intended for diagnostic purposes. +* +* Given: +* lin const struct linprm* +* Linear transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* +* +* linperr() - Print error messages from a linprm struct +* ----------------------------------------------------- +* linperr() prints the error message(s) (if any) stored in a linprm struct, +* and the disprm structs that it may contain. If there are no errors then +* nothing is printed. It uses wcserr_prt(), q.v. +* +* Given: +* lin const struct linprm* +* Coordinate transformation parameters. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* +* +* linset() - Setup routine for the linprm struct +* ---------------------------------------------- +* linset(), if necessary, allocates memory for the linprm::piximg and +* linprm::imgpix arrays and sets up the linprm struct according to information +* supplied within it - refer to the explanation of linprm::flag. +* +* Note that this routine need not be called directly; it will be invoked by +* linp2x() and linx2p() if the linprm::flag is anything other than a +* predefined magic value. +* +* linset() normally operates regardless of the value of linprm::flag; i.e. +* even if a struct was previously set up it will be reset unconditionally. +* However, a linprm struct may be put into "bypass" mode by invoking linset() +* initially with linprm::flag == 1 (rather than 0). linset() will return +* immediately if invoked on a struct in that state. To take a struct out of +* bypass mode, simply reset linprm::flag to zero. See also linenq(). +* +* Given and returned: +* lin struct linprm* +* Linear transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* 2: Memory allocation failed. +* 3: PCi_ja matrix is singular. +* 4: Failed to initialise distortions. +* +* For returns > 1, a detailed error message is set in +* linprm::err if enabled, see wcserr_enable(). +* +* +* linp2x() - Pixel-to-world linear transformation +* ----------------------------------------------- +* linp2x() transforms pixel coordinates to intermediate world coordinates. +* +* Given and returned: +* lin struct linprm* +* Linear transformation parameters. +* +* Given: +* ncoord, +* nelem int The number of coordinates, each of vector length nelem +* but containing lin.naxis coordinate elements. +* +* pixcrd const double[ncoord][nelem] +* Array of pixel coordinates. +* +* Returned: +* imgcrd double[ncoord][nelem] +* Array of intermediate world coordinates. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* 2: Memory allocation failed. +* 3: PCi_ja matrix is singular. +* 4: Failed to initialise distortions. +* 5: Distort error. +* +* For returns > 1, a detailed error message is set in +* linprm::err if enabled, see wcserr_enable(). +* +* Notes: +* 1. Historically, the API to linp2x() did not have a stat[] vector because +* a valid linear transformation should always succeed. However, now that +* it invokes disp2x() if distortions are present, it does have the +* potential to fail. Consequently, when distortions are present and a +* status return (stat[]) is required for each coordinate, then linp2x() +* should be invoked separately for each of them. +* +* +* linx2p() - World-to-pixel linear transformation +* ----------------------------------------------- +* linx2p() transforms intermediate world coordinates to pixel coordinates. +* +* Given and returned: +* lin struct linprm* +* Linear transformation parameters. +* +* Given: +* ncoord, +* nelem int The number of coordinates, each of vector length nelem +* but containing lin.naxis coordinate elements. +* +* imgcrd const double[ncoord][nelem] +* Array of intermediate world coordinates. +* +* Returned: +* pixcrd double[ncoord][nelem] +* Array of pixel coordinates. +* +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* 2: Memory allocation failed. +* 3: PCi_ja matrix is singular. +* 4: Failed to initialise distortions. +* 6: De-distort error. +* +* For returns > 1, a detailed error message is set in +* linprm::err if enabled, see wcserr_enable(). +* +* Notes: +* 1. Historically, the API to linx2p() did not have a stat[] vector because +* a valid linear transformation should always succeed. However, now that +* it invokes disx2p() if distortions are present, it does have the +* potential to fail. Consequently, when distortions are present and a +* status return (stat[]) is required for each coordinate, then linx2p() +* should be invoked separately for each of them. +* +* +* linwarp() - Compute measures of distortion +* ------------------------------------------ +* linwarp() computes various measures of the distortion over a specified range +* of pixel coordinates. +* +* All distortion measures are specified as an offset in pixel coordinates, +* as given directly by prior distortions. The offset in intermediate pixel +* coordinates given by sequent distortions is translated back to pixel +* coordinates by applying the inverse of the linear transformation matrix +* (PCi_ja or CDi_ja). The difference may be significant if the matrix +* introduced a scaling. +* +* If all distortions are prior, then linwarp() uses diswarp(), q.v. +* +* Given and returned: +* lin struct linprm* +* Linear transformation parameters plus distortions. +* +* Given: +* pixblc const double[naxis] +* Start of the range of pixel coordinates (i.e. "bottom +* left-hand corner" in the conventional FITS image +* display orientation). May be specified as a NULL +* pointer which is interpreted as (1,1,...). +* +* pixtrc const double[naxis] +* End of the range of pixel coordinates (i.e. "top +* right-hand corner" in the conventional FITS image +* display orientation). +* +* pixsamp const double[naxis] +* If positive or zero, the increment on the particular +* axis, starting at pixblc[]. Zero is interpreted as a +* unit increment. pixsamp may also be specified as a +* NULL pointer which is interpreted as all zeroes, i.e. +* unit increments on all axes. +* +* If negative, the grid size on the particular axis (the +* absolute value being rounded to the nearest integer). +* For example, if pixsamp is (-128.0,-128.0,...) then +* each axis will be sampled at 128 points between +* pixblc[] and pixtrc[] inclusive. Use caution when +* using this option on non-square images. +* +* Returned: +* nsamp int* The number of pixel coordinates sampled. +* +* Can be specified as a NULL pointer if not required. +* +* maxdis double[naxis] +* For each individual distortion function, the +* maximum absolute value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* maxtot double* For the combination of all distortion functions, the +* maximum absolute value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* avgdis double[naxis] +* For each individual distortion function, the +* mean value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* avgtot double* For the combination of all distortion functions, the +* mean value of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* rmsdis double[naxis] +* For each individual distortion function, the +* root mean square deviation of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* rmstot double* For the combination of all distortion functions, the +* root mean square deviation of the distortion. +* +* Can be specified as a NULL pointer if not required. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null linprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid parameter. +* 4: Distort error. +* +* +* linprm struct - Linear transformation parameters +* ------------------------------------------------ +* The linprm struct contains all of the information required to perform a +* linear transformation. It consists of certain members that must be set by +* the user ("given") and others that are set by the WCSLIB routines +* ("returned"). +* +* int flag +* (Given and returned) This flag must be set to zero (or 1, see linset()) +* whenever any of the following linprm members are set or changed: +* +* - linprm::naxis (q.v., not normally set by the user), +* - linprm::pc, +* - linprm::cdelt, +* - linprm::dispre. +* - linprm::disseq. +* +* This signals the initialization routine, linset(), to recompute the +* returned members of the linprm struct. linset() will reset flag to +* indicate that this has been done. +* +* PLEASE NOTE: flag should be set to -1 when lininit() is called for the +* first time for a particular linprm struct in order to initialize memory +* management. It must ONLY be used on the first initialization otherwise +* memory leaks may result. +* +* int naxis +* (Given or returned) Number of pixel and world coordinate elements. +* +* If lininit() is used to initialize the linprm struct (as would normally +* be the case) then it will set naxis from the value passed to it as a +* function argument. The user should not subsequently modify it. +* +* double *crpix +* (Given) Pointer to the first element of an array of double containing +* the coordinate reference pixel, CRPIXja. +* +* It is not necessary to reset the linprm struct (via linset()) when +* linprm::crpix is changed. +* +* double *pc +* (Given) Pointer to the first element of the PCi_ja (pixel coordinate) +* transformation matrix. The expected order is +* += struct linprm lin; += lin.pc = {PC1_1, PC1_2, PC2_1, PC2_2}; +* +* This may be constructed conveniently from a 2-D array via +* += double m[2][2] = {{PC1_1, PC1_2}, += {PC2_1, PC2_2}}; +* +* which is equivalent to +* += double m[2][2]; += m[0][0] = PC1_1; += m[0][1] = PC1_2; += m[1][0] = PC2_1; += m[1][1] = PC2_2; +* +* The storage order for this 2-D array is the same as for the 1-D array, +* whence +* += lin.pc = *m; +* +* would be legitimate. +* +* double *cdelt +* (Given) Pointer to the first element of an array of double containing +* the coordinate increments, CDELTia. +* +* struct disprm *dispre +* (Given) Pointer to a disprm struct holding parameters for prior +* distortion functions, or a null (0x0) pointer if there are none. +* +* Function lindist() may be used to assign a disprm pointer to a linprm +* struct, allowing it to take control of any memory allocated for it, as +* in the following example: +* += void add_distortion(struct linprm *lin) += { += struct disprm *dispre; += += dispre = malloc(sizeof(struct disprm)); += dispre->flag = -1; += lindist(1, lin, dispre, ndpmax); += : += (Set up dispre.) += : += += return; += } +* +* Here, after the distortion function parameters etc. are copied into +* dispre, dispre is assigned using lindist() which takes control of the +* allocated memory. It will be freed later when linfree() is invoked on +* the linprm struct. +* +* Consider also the following erroneous code: +* += void bad_code(struct linprm *lin) += { += struct disprm dispre; += += dispre.flag = -1; += lindist(1, lin, &dispre, ndpmax); // WRONG. += : += += return; += } +* +* Here, dispre is declared as a struct, rather than a pointer. When the +* function returns, dispre will go out of scope and its memory will most +* likely be reused, thereby trashing its contents. Later, a segfault will +* occur when linfree() tries to free dispre's stale address. +* +* struct disprm *disseq +* (Given) Pointer to a disprm struct holding parameters for sequent +* distortion functions, or a null (0x0) pointer if there are none. +* +* Refer to the comments and examples given for disprm::dispre. +* +* double *piximg +* (Returned) Pointer to the first element of the matrix containing the +* product of the CDELTia diagonal matrix and the PCi_ja matrix. +* +* double *imgpix +* (Returned) Pointer to the first element of the inverse of the +* linprm::piximg matrix. +* +* int i_naxis +* (Returned) The dimension of linprm::piximg and linprm::imgpix (normally +* equal to naxis). +* +* int unity +* (Returned) True if the linear transformation matrix is unity. +* +* int affine +* (Returned) True if there are no distortions. +* +* int simple +* (Returned) True if unity and no distortions. +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* double *dummy +* (For internal use only.) +* int m_flag +* (For internal use only.) +* int m_naxis +* (For internal use only.) +* double *m_crpix +* (For internal use only.) +* double *m_pc +* (For internal use only.) +* double *m_cdelt +* (For internal use only.) +* struct disprm *m_dispre +* (For internal use only.) +* struct disprm *m_disseq +* (For internal use only.) +* +* +* Global variable: const char *lin_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_LIN +#define WCSLIB_LIN + +#ifdef __cplusplus +extern "C" { +#endif + +enum linenq_enum { + LINENQ_MEM = 1, // linprm struct memory is managed by WCSLIB. + LINENQ_SET = 2, // linprm struct has been set up. + LINENQ_BYP = 4, // linprm struct is in bypass mode. +}; + +extern const char *lin_errmsg[]; + +enum lin_errmsg_enum { + LINERR_SUCCESS = 0, // Success. + LINERR_NULL_POINTER = 1, // Null linprm pointer passed. + LINERR_MEMORY = 2, // Memory allocation failed. + LINERR_SINGULAR_MTX = 3, // PCi_ja matrix is singular. + LINERR_DISTORT_INIT = 4, // Failed to initialise distortions. + LINERR_DISTORT = 5, // Distort error. + LINERR_DEDISTORT = 6 // De-distort error. +}; + +struct linprm { + // Initialization flag (see the prologue above). + //-------------------------------------------------------------------------- + int flag; // Set to zero to force initialization. + + // Parameters to be provided (see the prologue above). + //-------------------------------------------------------------------------- + int naxis; // The number of axes, given by NAXIS. + double *crpix; // CRPIXja keywords for each pixel axis. + double *pc; // PCi_ja linear transformation matrix. + double *cdelt; // CDELTia keywords for each coord axis. + struct disprm *dispre; // Prior distortion parameters, if any. + struct disprm *disseq; // Sequent distortion parameters, if any. + + // Information derived from the parameters supplied. + //-------------------------------------------------------------------------- + double *piximg; // Product of CDELTia and PCi_ja matrices. + double *imgpix; // Inverse of the piximg matrix. + int i_naxis; // Dimension of piximg and imgpix. + int unity; // True if the PCi_ja matrix is unity. + int affine; // True if there are no distortions. + int simple; // True if unity and no distortions. + + // Error messaging, if enabled. + //-------------------------------------------------------------------------- + struct wcserr *err; + + //-------------------------------------------------------------------------- + // Private - the remainder are for internal use. + //-------------------------------------------------------------------------- + double *dummy; + + // The remainder are for memory management. + int m_flag, m_naxis; + double *m_crpix, *m_pc, *m_cdelt; + struct disprm *m_dispre, *m_disseq; +}; + +// Size of the linprm struct in int units, used by the Fortran wrappers. +#define LINLEN (sizeof(struct linprm)/sizeof(int)) + + +int linini(int alloc, int naxis, struct linprm *lin); + +int lininit(int alloc, int naxis, struct linprm *lin, int ndpmax); + +int lindis(int sequence, struct linprm *lin, struct disprm *dis); + +int lindist(int sequence, struct linprm *lin, struct disprm *dis, int ndpmax); + +int lincpy(int alloc, const struct linprm *linsrc, struct linprm *lindst); + +int linfree(struct linprm *lin); + +int linsize(const struct linprm *lin, int sizes[2]); + +int linenq(const struct linprm *lin, int enquiry); + +int linprt(const struct linprm *lin); + +int linperr(const struct linprm *lin, const char *prefix); + +int linset(struct linprm *lin); + +int linp2x(struct linprm *lin, int ncoord, int nelem, const double pixcrd[], + double imgcrd[]); + +int linx2p(struct linprm *lin, int ncoord, int nelem, const double imgcrd[], + double pixcrd[]); + +int linwarp(struct linprm *lin, const double pixblc[], const double pixtrc[], + const double pixsamp[], int *nsamp, + double maxdis[], double *maxtot, + double avgdis[], double *avgtot, + double rmsdis[], double *rmstot); + +int matinv(int n, const double mat[], double inv[]); + + +// Deprecated. +#define linini_errmsg lin_errmsg +#define lincpy_errmsg lin_errmsg +#define linfree_errmsg lin_errmsg +#define linprt_errmsg lin_errmsg +#define linset_errmsg lin_errmsg +#define linp2x_errmsg lin_errmsg +#define linx2p_errmsg lin_errmsg + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_LIN diff --git a/deps/wcslib/C/log.c b/deps/wcslib/C/log.c new file mode 100644 index 0000000..94a7c10 --- /dev/null +++ b/deps/wcslib/C/log.c @@ -0,0 +1,97 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: log.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include + +#include "log.h" + +// Map status return value to message. +const char *log_errmsg[] = { + "Success", + "", + "Invalid log-coordinate reference value", + "One or more of the x coordinates were invalid", + "One or more of the world coordinates were invalid"}; + + +//---------------------------------------------------------------------------- + +int logx2s( + double crval, + int nx, + int sx, + int slogc, + const double x[], + double logc[], + int stat[]) + +{ + if (crval <= 0.0) { + return LOGERR_BAD_LOG_REF_VAL; + } + + const double *xp = x; + double *logcp = logc; + int *statp = stat; + for (int ix = 0; ix < nx; ix++, xp += sx, logcp += slogc, statp++) { + *logcp = crval * exp((*xp) / crval); + *statp = 0; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int logs2x( + double crval, + int nlogc, + int slogc, + int sx, + const double logc[], + double x[], + int stat[]) + +{ + if (crval <= 0.0) { + return LOGERR_BAD_LOG_REF_VAL; + } + + double *xp = x; + const double *logcp = logc; + int *statp = stat; + int status = 0; + for (int ilogc = 0; ilogc < nlogc; ilogc++, logcp += slogc, xp += sx, + statp++) { + if (*logcp > 0.0) { + *xp = crval * log(*logcp / crval); + *statp = 0; + } else { + status = LOGERR_BAD_WORLD; + *statp = 1; + } + } + + return status; +} diff --git a/deps/wcslib/C/log.h b/deps/wcslib/C/log.h new file mode 100644 index 0000000..632abd4 --- /dev/null +++ b/deps/wcslib/C/log.h @@ -0,0 +1,164 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: log.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the log routines +* --------------------------- +* Routines in this suite implement the part of the FITS World Coordinate +* System (WCS) standard that deals with logarithmic coordinates, as described +* in +* +* "Representations of world coordinates in FITS", +* Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) +* +* "Representations of spectral coordinates in FITS", +* Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. +* 2006, A&A, 446, 747 (WCS Paper III) +* +* These routines define methods to be used for computing logarithmic world +* coordinates from intermediate world coordinates (a linear transformation of +* image pixel coordinates), and vice versa. +* +* logx2s() and logs2x() implement the WCS logarithmic coordinate +* transformations. +* +* Argument checking: +* ------------------ +* The input log-coordinate values are only checked for values that would +* result in floating point exceptions and the same is true for the +* log-coordinate reference value. +* +* Accuracy: +* --------- +* No warranty is given for the accuracy of these routines (refer to the +* copyright notice); intending users must satisfy for themselves their +* adequacy for the intended purpose. However, closure effectively to within +* double precision rounding error was demonstrated by test routine tlog.c +* which accompanies this software. +* +* +* logx2s() - Transform to logarithmic coordinates +* ----------------------------------------------- +* logx2s() transforms intermediate world coordinates to logarithmic +* coordinates. +* +* Given and returned: +* crval double Log-coordinate reference value (CRVALia). +* +* Given: +* nx int Vector length. +* +* sx int Vector stride. +* +* slogc int Vector stride. +* +* x const double[] +* Intermediate world coordinates, in SI units. +* +* Returned: +* logc double[] Logarithmic coordinates, in SI units. +* +* stat int[] Status return value status for each vector element: +* 0: Success. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid log-coordinate reference value. +* +* +* logs2x() - Transform logarithmic coordinates +* -------------------------------------------- +* logs2x() transforms logarithmic world coordinates to intermediate world +* coordinates. +* +* Given and returned: +* crval double Log-coordinate reference value (CRVALia). +* +* Given: +* nlogc int Vector length. +* +* slogc int Vector stride. +* +* sx int Vector stride. +* +* logc const double[] +* Logarithmic coordinates, in SI units. +* +* Returned: +* x double[] Intermediate world coordinates, in SI units. +* +* stat int[] Status return value status for each vector element: +* 0: Success. +* 1: Invalid value of logc. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid log-coordinate reference value. +* 4: One or more of the world-coordinate values +* are incorrect, as indicated by the stat vector. +* +* +* Global variable: const char *log_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_LOG +#define WCSLIB_LOG + +#ifdef __cplusplus +extern "C" { +#endif + +extern const char *log_errmsg[]; + +enum log_errmsg_enum { + LOGERR_SUCCESS = 0, // Success. + LOGERR_NULL_POINTER = 1, // Null pointer passed. + LOGERR_BAD_LOG_REF_VAL = 2, // Invalid log-coordinate reference value. + LOGERR_BAD_X = 3, // One or more of the x coordinates were + // invalid. + LOGERR_BAD_WORLD = 4 // One or more of the world coordinates were + // invalid. +}; + +int logx2s(double crval, int nx, int sx, int slogc, const double x[], + double logc[], int stat[]); + +int logs2x(double crval, int nlogc, int slogc, int sx, const double logc[], + double x[], int stat[]); + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_LOG diff --git a/deps/wcslib/C/prj.c b/deps/wcslib/C/prj.c new file mode 100644 index 0000000..349913e --- /dev/null +++ b/deps/wcslib/C/prj.c @@ -0,0 +1,8647 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: prj.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcstrig.h" +#include "wcsutil.h" +#include "prj.h" + + +// Projection categories. +const int ZENITHAL = 1; +const int CYLINDRICAL = 2; +const int PSEUDOCYLINDRICAL = 3; +const int CONVENTIONAL = 4; +const int CONIC = 5; +const int POLYCONIC = 6; +const int QUADCUBE = 7; +const int HEALPIX = 8; + +const char prj_categories[9][32] = + {"undefined", "zenithal", "cylindrical", "pseudocylindrical", + "conventional", "conic", "polyconic", "quadcube", "HEALPix"}; + + +// Projection codes. +const int prj_ncode = 28; +const char prj_codes[28][4] = + {"AZP", "SZP", "TAN", "STG", "SIN", "ARC", "ZPN", "ZEA", "AIR", "CYP", + "CEA", "CAR", "MER", "COP", "COE", "COD", "COO", "SFL", "PAR", "MOL", + "AIT", "BON", "PCO", "TSC", "CSC", "QSC", "HPX", "XPH"}; + +// Map status return value to message. +const char *prj_errmsg[] = { + "Success", + "Null prjprm pointer passed", + "Invalid projection parameters", + "One or more of the (x,y) coordinates were invalid", + "One or more of the (phi,theta) coordinates were invalid"}; + +static const int AZP = 101; +static const int SZP = 102; +static const int TAN = 103; +static const int STG = 104; +static const int SIN = 105; +static const int ARC = 106; +static const int ZPN = 107; +static const int ZEA = 108; +static const int AIR = 109; +static const int CYP = 201; +static const int CEA = 202; +static const int CAR = 203; +static const int MER = 204; +static const int SFL = 301; +static const int PAR = 302; +static const int MOL = 303; +static const int AIT = 401; +static const int COP = 501; +static const int COE = 502; +static const int COD = 503; +static const int COO = 504; +static const int BON = 601; +static const int PCO = 602; +static const int TSC = 701; +static const int CSC = 702; +static const int QSC = 703; +static const int HPX = 801; +static const int XPH = 802; + +// Convenience macros for generating common error messages. +#define PRJERR_BAD_PARAM_SET(function) \ + wcserr_set(&(prj->err), PRJERR_BAD_PARAM, function, __FILE__, __LINE__, \ + "Invalid parameters for %s projection", prj->name); + +#define PRJERR_BAD_PIX_SET(function) \ + wcserr_set(&(prj->err), PRJERR_BAD_PIX, function, __FILE__, __LINE__, \ + "One or more of the (x, y) coordinates were invalid for %s projection", \ + prj->name); + +#define PRJERR_BAD_WORLD_SET(function) \ + wcserr_set(&(prj->err), PRJERR_BAD_WORLD, function, __FILE__, __LINE__, \ + "One or more of the (lat, lng) coordinates were invalid for " \ + "%s projection", prj->name); + +#define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X)) + + +/*============================================================================ +* Generic routines: +* +* prjini initializes a prjprm struct to default values. +* +* prjfree frees any memory that may have been allocated to store an error +* message in the prjprm struct. +* +* prjsize computes the size of a prjprm struct. +* +* prjprt prints the contents of a prjprm struct. +* +* prjbchk performs bounds checking on the native coordinates returned by the +* *x2s() routines. +* +* prjset invokes the specific initialization routine based on the projection +* code in the prjprm struct. +* +* prjx2s invokes the specific deprojection routine based on the pointer-to- +* function stored in the prjprm struct. +* +* prjs2x invokes the specific projection routine based on the pointer-to- +* function stored in the prjprm struct. +* +*---------------------------------------------------------------------------*/ + +int prjini(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + + strcpy(prj->code, " "); + prj->pv[0] = 0.0; + prj->pv[1] = UNDEFINED; + prj->pv[2] = UNDEFINED; + prj->pv[3] = UNDEFINED; + for (int k = 4; k < PVN; prj->pv[k++] = 0.0); + prj->r0 = 0.0; + prj->phi0 = UNDEFINED; + prj->theta0 = UNDEFINED; + prj->bounds = 7; + + strcpy(prj->name, "undefined"); + for (int k = 9; k < 40; prj->name[k++] = '\0'); + prj->category = 0; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = 0; + prj->x0 = 0.0; + prj->y0 = 0.0; + + prj->err = 0x0; + + prj->padding = 0x0; + for (int k = 0; k < 10; prj->w[k++] = 0.0); + prj->m = 0; + prj->n = 0; + prj->prjx2s = 0x0; + prj->prjs2x = 0x0; + + prj->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int prjfree(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + + wcserr_clear(&(prj->err)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int prjsize(const struct prjprm *prj, int sizes[2]) + +{ + if (prj == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct prjprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + // prjprm::err. + int exsizes[2]; + wcserr_size(prj->err, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + return 0; +} + +//---------------------------------------------------------------------------- + +int prjenq(const struct prjprm *prj, int enquiry) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int answer = 0; + int absflag = abs(prj->flag); + + if (enquiry & PRJENQ_SET) { + if (absflag < 100 || 1000 < absflag) return 0; + answer = 1; + } + + if (enquiry & PRJENQ_BYP) { + if (prj->flag != 1 && !(-1000 < prj->flag && prj->flag < -100)) return 0; + answer = 1; + } + + return answer; +} + +//---------------------------------------------------------------------------- + +int prjprt(const struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + + // Parameters supplied. + wcsprintf(" flag: %d\n", prj->flag); + wcsprintf(" code: \"%s\"\n", prj->code); + wcsprintf(" r0: %9f\n", prj->r0); + wcsprintf(" pv:"); + if (prj->pvrange) { + int n = (prj->pvrange)%100; + + if (prj->pvrange/100) { + wcsprintf(" (0)"); + } else { + wcsprintf(" %#- 11.5g", prj->pv[0]); + n--; + } + + for (int i = 1; i <= n; i++) { + if (i%5 == 1) { + wcsprintf("\n "); + } + + if (undefined(prj->pv[i])) { + wcsprintf(" UNDEFINED "); + } else { + wcsprintf(" %#- 11.5g", prj->pv[i]); + } + } + wcsprintf("\n"); + } else { + wcsprintf(" (not used)\n"); + } + if (undefined(prj->phi0)) { + wcsprintf(" phi0: UNDEFINED\n"); + } else { + wcsprintf(" phi0: %9f\n", prj->phi0); + } + if (undefined(prj->theta0)) { + wcsprintf(" theta0: UNDEFINED\n"); + } else { + wcsprintf(" theta0: %9f\n", prj->theta0); + } + wcsprintf(" bounds: %d\n", prj->bounds); + + // Derived values. + wcsprintf("\n"); + wcsprintf(" name: \"%s\"\n", prj->name); + wcsprintf(" category: %d (%s)\n", prj->category, + prj_categories[prj->category]); + wcsprintf(" pvrange: %d\n", prj->pvrange); + wcsprintf(" simplezen: %d\n", prj->simplezen); + wcsprintf(" equiareal: %d\n", prj->equiareal); + wcsprintf(" conformal: %d\n", prj->conformal); + wcsprintf(" global: %d\n", prj->global); + wcsprintf(" divergent: %d\n", prj->divergent); + wcsprintf(" x0: %f\n", prj->x0); + wcsprintf(" y0: %f\n", prj->y0); + + // Error handling. + WCSPRINTF_PTR(" err: ", prj->err, "\n"); + if (prj->err) { + wcserr_prt(prj->err, " "); + } + + // Intermediate values set by prjset(). + wcsprintf(" w[]:"); + for (int i = 0; i < 5; i++) { + wcsprintf(" %#- 11.5g", prj->w[i]); + } + wcsprintf("\n "); + for (int i = 5; i < 10; i++) { + wcsprintf(" %#- 11.5g", prj->w[i]); + } + wcsprintf("\n"); + wcsprintf(" m: %d\n", prj->m); + wcsprintf(" n: %d\n", prj->n); + + // Pointers to projection and deprojection functions. + char hext[32]; + wcsprintf(" prjx2s: %s\n", + wcsutil_fptr2str((void (*)(void))prj->prjx2s, hext)); + wcsprintf(" prjs2x: %s\n", + wcsutil_fptr2str((void (*)(void))prj->prjs2x, hext)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int prjperr(const struct prjprm *prj, const char *prefix) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + + if (prj->err) { + wcserr_prt(prj->err, prefix); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int prjbchk( + double tol, + int nphi, + int ntheta, + int spt, + double phi[], + double theta[], + int stat[]) + +{ + double *phip = phi; + double *thetap = theta; + int *statp = stat; + int status = 0; + for (int itheta = 0; itheta < ntheta; itheta++) { + for (int iphi = 0; iphi < nphi; iphi++, phip += spt, thetap += spt, + statp++) { + // Skip values already marked as illegal. + if (*statp == 0) { + if (*phip < -180.0) { + if (*phip < -180.0-tol) { + *statp = 1; + status = 1; + } else { + *phip = -180.0; + } + } else if (180.0 < *phip) { + if (180.0+tol < *phip) { + *statp = 1; + status = 1; + } else { + *phip = 180.0; + } + } + + if (*thetap < -90.0) { + if (*thetap < -90.0-tol) { + *statp = 1; + status = 1; + } else { + *thetap = -90.0; + } + } else if (90.0 < *thetap) { + if (90.0+tol < *thetap) { + *statp = 1; + status = 1; + } else { + *thetap = 90.0; + } + } + } + } + } + + return status; +} + +//---------------------------------------------------------------------------- + +int prjset(struct prjprm *prj) + +{ + static const char *function = "prjset"; + + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag < 0) return 0; + struct wcserr **err = &(prj->err); + + // Invoke the relevant initialization routine. + prj->code[3] = '\0'; + + int status; + if (strcmp(prj->code, "AZP") == 0) { + status = azpset(prj); + } else if (strcmp(prj->code, "SZP") == 0) { + status = szpset(prj); + } else if (strcmp(prj->code, "TAN") == 0) { + status = tanset(prj); + } else if (strcmp(prj->code, "STG") == 0) { + status = stgset(prj); + } else if (strcmp(prj->code, "SIN") == 0) { + status = sinset(prj); + } else if (strcmp(prj->code, "ARC") == 0) { + status = arcset(prj); + } else if (strcmp(prj->code, "ZPN") == 0) { + status = zpnset(prj); + } else if (strcmp(prj->code, "ZEA") == 0) { + status = zeaset(prj); + } else if (strcmp(prj->code, "AIR") == 0) { + status = airset(prj); + } else if (strcmp(prj->code, "CYP") == 0) { + status = cypset(prj); + } else if (strcmp(prj->code, "CEA") == 0) { + status = ceaset(prj); + } else if (strcmp(prj->code, "CAR") == 0) { + status = carset(prj); + } else if (strcmp(prj->code, "MER") == 0) { + status = merset(prj); + } else if (strcmp(prj->code, "SFL") == 0) { + status = sflset(prj); + } else if (strcmp(prj->code, "PAR") == 0) { + status = parset(prj); + } else if (strcmp(prj->code, "MOL") == 0) { + status = molset(prj); + } else if (strcmp(prj->code, "AIT") == 0) { + status = aitset(prj); + } else if (strcmp(prj->code, "COP") == 0) { + status = copset(prj); + } else if (strcmp(prj->code, "COE") == 0) { + status = coeset(prj); + } else if (strcmp(prj->code, "COD") == 0) { + status = codset(prj); + } else if (strcmp(prj->code, "COO") == 0) { + status = cooset(prj); + } else if (strcmp(prj->code, "BON") == 0) { + status = bonset(prj); + } else if (strcmp(prj->code, "PCO") == 0) { + status = pcoset(prj); + } else if (strcmp(prj->code, "TSC") == 0) { + status = tscset(prj); + } else if (strcmp(prj->code, "CSC") == 0) { + status = cscset(prj); + } else if (strcmp(prj->code, "QSC") == 0) { + status = qscset(prj); + } else if (strcmp(prj->code, "HPX") == 0) { + status = hpxset(prj); + } else if (strcmp(prj->code, "XPH") == 0) { + status = xphset(prj); + } else { + // Unrecognized projection code. + status = wcserr_set(WCSERR_SET(PRJERR_BAD_PARAM), + "Unrecognized projection code '%s'", prj->code); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int prjx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) < 100) { + if ((status = prjset(prj))) return status; + } + + return prj->prjx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat); +} + +//---------------------------------------------------------------------------- + +int prjs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) < 100) { + if ((status = prjset(prj))) return status; + } + + return prj->prjs2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat); +} + +/*============================================================================ +* Internal helper routine used by the *set() routines - not intended for +* outside use. It forces (x,y) = (0,0) at (phi0,theta0). +*---------------------------------------------------------------------------*/ + +static int prjoff( + struct prjprm *prj, + const double phi0, + const double theta0) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + + prj->x0 = 0.0; + prj->y0 = 0.0; + + if (undefined(prj->phi0) || undefined(prj->theta0)) { + // Set both to the projection-specific default if either undefined. + prj->phi0 = phi0; + prj->theta0 = theta0; + + } else { + double x0, y0; + int stat; + if (prj->prjs2x(prj, 1, 1, 1, 1, &(prj->phi0), &(prj->theta0), &x0, &y0, + &stat)) { + return PRJERR_BAD_PARAM_SET("prjoff"); + } + + prj->x0 = x0; + prj->y0 = y0; + } + + return 0; +} + +/*============================================================================ +* AZP: zenithal/azimuthal perspective projection. +* +* Given: +* prj->pv[1] Distance parameter, mu in units of r0. +* prj->pv[2] Tilt angle, gamma in degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag AZP +* prj->code "AZP" +* prj->x0 Offset in x. +* prj->y0 Offset in y. +* prj->w[0] r0*(mu+1) +* prj->w[1] tan(gamma) +* prj->w[2] sec(gamma) +* prj->w[3] cos(gamma) +* prj->w[4] sin(gamma) +* prj->w[5] asin(-1/mu) for |mu| >= 1, -90 otherwise +* prj->w[6] mu*cos(gamma) +* prj->w[7] 1 if |mu*cos(gamma)| < 1, 0 otherwise +* prj->prjx2s Pointer to azpx2s(). +* prj->prjs2x Pointer to azps2x(). +*===========================================================================*/ + +int azpset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -AZP) return 0; + + strcpy(prj->code, "AZP"); + + if (undefined(prj->pv[1])) prj->pv[1] = 0.0; + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "zenithal/azimuthal perspective"); + prj->category = ZENITHAL; + prj->pvrange = 102; + prj->simplezen = prj->pv[2] == 0.0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = prj->pv[1] <= 1.0; + + prj->w[0] = prj->r0*(prj->pv[1] + 1.0); + if (prj->w[0] == 0.0) { + return PRJERR_BAD_PARAM_SET("azpset"); + } + + prj->w[3] = cosd(prj->pv[2]); + if (prj->w[3] == 0.0) { + return PRJERR_BAD_PARAM_SET("azpset"); + } + + prj->w[2] = 1.0/prj->w[3]; + prj->w[4] = sind(prj->pv[2]); + prj->w[1] = prj->w[4] / prj->w[3]; + + if (fabs(prj->pv[1]) > 1.0) { + prj->w[5] = asind(-1.0/prj->pv[1]); + } else { + prj->w[5] = -90.0; + } + + prj->w[6] = prj->pv[1] * prj->w[3]; + prj->w[7] = (fabs(prj->w[6]) < 1.0) ? 1.0 : 0.0; + + prj->prjx2s = azpx2s; + prj->prjs2x = azps2x; + + prj->flag = (prj->flag == 1) ? -AZP : AZP; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int azpx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != AZP) { + if ((status = azpset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + double *phip, *thetap; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + int *statp = stat; + + phip = phi; + thetap = theta; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + + double yc = yj*prj->w[3]; + double yc2 = yc*yc; + + double q = prj->w[0] + yj*prj->w[4]; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + yc2); + if (r == 0.0) { + *phip = 0.0; + *thetap = 90.0; + *statp = 0; + + } else { + *phip = atan2d(xj, -yc); + + double s = r / q; + double t = s*prj->pv[1]/sqrt(s*s + 1.0); + + s = atan2d(1.0, s); + + if (fabs(t) > 1.0) { + if (fabs(t) > 1.0+tol) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("azpx2s"); + continue; + } + t = copysign(90.0, t); + } else { + t = asind(t); + } + + double a = s - t; + double b = s + t + 180.0; + + if (a > 90.0) a -= 360.0; + if (b > 90.0) b -= 360.0; + + *thetap = (a > b) ? a : b; + *statp = 0; + } + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("azpx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int azps2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != AZP) { + if ((status = azpset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe, costhe; + sincosd(*thetap, &sinthe, &costhe); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + double s = prj->w[1]*(*yp); + double t = (prj->pv[1] + sinthe) + costhe*s; + + if (t == 0.0) { + *xp = 0.0; + *yp = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("azps2x"); + + } else { + double r = prj->w[0]*costhe/t; + + // Bounds checking. + int istat = 0; + if (prj->bounds&1) { + if (*thetap < prj->w[5]) { + // Overlap. + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("azps2x"); + + } else if (prj->w[7] > 0.0) { + // Divergence. + t = prj->pv[1] / sqrt(1.0 + s*s); + + if (fabs(t) <= 1.0) { + s = atand(-s); + t = asind(t); + + double a = s - t; + double b = s + t + 180.0; + + if (a > 90.0) a -= 360.0; + if (b > 90.0) b -= 360.0; + + if (*thetap < ((a > b) ? a : b)) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("azps2x"); + } + } + } + } + + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp)*prj->w[2] - prj->y0; + *statp = istat; + } + } + } + + return status; +} + +/*============================================================================ +* SZP: slant zenithal perspective projection. +* +* Given: +* prj->pv[1] Distance of the point of projection from the centre of the +* generating sphere, mu in units of r0. +* prj->pv[2] Native longitude, phi_c, and ... +* prj->pv[3] Native latitude, theta_c, on the planewards side of the +* intersection of the line through the point of projection +* and the centre of the generating sphere, phi_c in degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag SZP +* prj->code "SZP" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] 1/r0 +* prj->w[1] xp = -mu*cos(theta_c)*sin(phi_c) +* prj->w[2] yp = mu*cos(theta_c)*cos(phi_c) +* prj->w[3] zp = mu*sin(theta_c) + 1 +* prj->w[4] r0*xp +* prj->w[5] r0*yp +* prj->w[6] r0*zp +* prj->w[7] (zp - 1)^2 +* prj->w[8] asin(1-zp) if |1 - zp| < 1, -90 otherwise +* prj->prjx2s Pointer to szpx2s(). +* prj->prjs2x Pointer to szps2x(). +*===========================================================================*/ + +int szpset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -SZP) return 0; + + strcpy(prj->code, "SZP"); + + if (undefined(prj->pv[1])) prj->pv[1] = 0.0; + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (undefined(prj->pv[3])) prj->pv[3] = 90.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "slant zenithal perspective"); + prj->category = ZENITHAL; + prj->pvrange = 103; + prj->simplezen = prj->pv[3] == 90.0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = prj->pv[1] <= 1.0; + + prj->w[0] = 1.0/prj->r0; + + prj->w[3] = prj->pv[1] * sind(prj->pv[3]) + 1.0; + if (prj->w[3] == 0.0) { + return PRJERR_BAD_PARAM_SET("szpset"); + } + + prj->w[1] = -prj->pv[1] * cosd(prj->pv[3]) * sind(prj->pv[2]); + prj->w[2] = prj->pv[1] * cosd(prj->pv[3]) * cosd(prj->pv[2]); + prj->w[4] = prj->r0 * prj->w[1]; + prj->w[5] = prj->r0 * prj->w[2]; + prj->w[6] = prj->r0 * prj->w[3]; + prj->w[7] = (prj->w[3] - 1.0) * prj->w[3] - 1.0; + + if (fabs(prj->w[3] - 1.0) < 1.0) { + prj->w[8] = asind(1.0 - prj->w[3]); + } else { + prj->w[8] = -90.0; + } + + prj->prjx2s = szpx2s; + prj->prjs2x = szps2x; + + prj->flag = (prj->flag == 1) ? -SZP : SZP; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int szpx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != SZP) { + if ((status = szpset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xr = (*xp + prj->x0)*prj->w[0]; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xr; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yr = (*yp + prj->y0)*prj->w[0]; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xr = *phip; + double r2 = xr*xr + yr*yr; + + double x1 = (xr - prj->w[1])/prj->w[3]; + double y1 = (yr - prj->w[2])/prj->w[3]; + double xy = xr*x1 + yr*y1; + + double z; + if (r2 < 1.0e-10) { + // Use small angle formula. + z = r2/2.0; + *thetap = 90.0 - R2D*sqrt(r2/(1.0 + xy)); + + } else { + double t = x1*x1 + y1*y1; + double a = t + 1.0; + double b = xy - t; + double c = r2 - xy - xy + t - 1.0; + double d = b*b - a*c; + + // Check for a solution. + if (d < 0.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("szpx2s"); + continue; + } + d = sqrt(d); + + // Choose solution closest to pole. + double sinth1 = (-b + d)/a; + double sinth2 = (-b - d)/a; + double sinthe = (sinth1 > sinth2) ? sinth1 : sinth2; + if (sinthe > 1.0) { + if (sinthe-1.0 < tol) { + sinthe = 1.0; + } else { + sinthe = (sinth1 < sinth2) ? sinth1 : sinth2; + } + } + + if (sinthe < -1.0) { + if (sinthe+1.0 > -tol) { + sinthe = -1.0; + } + } + + if (sinthe > 1.0 || sinthe < -1.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("szpx2s"); + continue; + } + + *thetap = asind(sinthe); + + z = 1.0 - sinthe; + } + + *phip = atan2d(xr - x1*z, -(yr - y1*z)); + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("szpx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int szps2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != SZP) { + if ((status = szpset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double s = 1.0 - sind(*thetap); + double t = prj->w[3] - s; + + if (t == 0.0) { + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = 0.0; + *yp = 0.0; + *statp = 1; + } + + if (!status) status = PRJERR_BAD_WORLD_SET("szps2x"); + + } else { + double r = prj->w[6]*cosd(*thetap)/t; + double u = prj->w[4]*s/t + prj->x0; + double v = prj->w[5]*s/t + prj->y0; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + // Bounds checking. + int istat = 0; + if (prj->bounds&1) { + if (*thetap < prj->w[8]) { + // Divergence. + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("szps2x"); + + } else if (fabs(prj->pv[1]) > 1.0) { + // Overlap. + s = prj->w[1]*(*xp) - prj->w[2]*(*yp); + t = 1.0/sqrt(prj->w[7] + s*s); + + if (fabs(t) <= 1.0) { + s = atan2d(s, prj->w[3] - 1.0); + t = asind(t); + + double a = s - t; + double b = s + t + 180.0; + + if (a > 90.0) a -= 360.0; + if (b > 90.0) b -= 360.0; + + if (*thetap < ((a > b) ? a : b)) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("szps2x"); + } + } + } + } + + *xp = r*(*xp) - u; + *yp = -r*(*yp) - v; + *statp = istat; + } + } + } + + return status; +} + + +/*============================================================================ +* TAN: gnomonic projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag TAN +* prj->code "TAN" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->prjx2s Pointer to tanx2s(). +* prj->prjs2x Pointer to tans2x(). +*===========================================================================*/ + +int tanset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -TAN) return 0; + + strcpy(prj->code, "TAN"); + + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "gnomonic"); + prj->category = ZENITHAL; + prj->pvrange = 0; + prj->simplezen = 1; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = 1; + + prj->prjx2s = tanx2s; + prj->prjs2x = tans2x; + + prj->flag = (prj->flag == 1) ? -TAN : TAN; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int tanx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != TAN) { + if ((status = tanset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double yj2 = yj*yj; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + yj2); + if (r == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(xj, -yj); + } + + *thetap = atan2d(prj->r0, r); + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("tanx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int tans2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != TAN) { + if ((status = tanset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double s = sind(*thetap); + if (s == 0.0) { + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = 0.0; + *yp = 0.0; + *statp = 1; + } + if (!status) status = PRJERR_BAD_WORLD_SET("tans2x"); + + } else { + double r = prj->r0*cosd(*thetap)/s; + + // Bounds checking. + int istat = 0; + if (prj->bounds&1) { + if (s < 0.0) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("tans2x"); + } + } + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - prj->y0; + *statp = istat; + } + } + } + + return status; +} + +/*============================================================================ +* STG: stereographic projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag STG +* prj->code "STG" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] 2*r0 +* prj->w[1] 1/(2*r0) +* prj->prjx2s Pointer to stgx2s(). +* prj->prjs2x Pointer to stgs2x(). +*===========================================================================*/ + +int stgset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -STG) return 0; + + strcpy(prj->code, "STG"); + + strcpy(prj->name, "stereographic"); + prj->category = ZENITHAL; + prj->pvrange = 0; + prj->simplezen = 1; + prj->equiareal = 0; + prj->conformal = 1; + prj->global = 0; + prj->divergent = 1; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 360.0/PI; + prj->w[1] = PI/360.0; + } else { + prj->w[0] = 2.0*prj->r0; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = stgx2s; + prj->prjs2x = stgs2x; + + prj->flag = (prj->flag == 1) ? -STG : STG; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int stgx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != STG) { + if ((status = stgset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double yj2 = yj*yj; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + yj2); + if (r == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(xj, -yj); + } + + *thetap = 90.0 - 2.0*atand(r*prj->w[1]); + *statp = 0; + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int stgs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != STG) { + if ((status = stgset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double s = 1.0 + sind(*thetap); + if (s == 0.0) { + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = 0.0; + *yp = 0.0; + *statp = 1; + } + if (!status) status = PRJERR_BAD_WORLD_SET("stgs2x"); + + } else { + double r = prj->w[0]*cosd(*thetap)/s; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - prj->y0; + *statp = 0; + } + } + } + + return status; +} + +/*============================================================================ +* SIN: orthographic/synthesis projection. +* +* Given: +* prj->pv[1:2] Obliqueness parameters, xi and eta. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag SIN +* prj->code "SIN" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] 1/r0 +* prj->w[1] xi**2 + eta**2 +* prj->w[2] xi**2 + eta**2 + 1 +* prj->w[3] xi**2 + eta**2 - 1 +* prj->prjx2s Pointer to sinx2s(). +* prj->prjs2x Pointer to sins2x(). +*===========================================================================*/ + +int sinset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -SIN) return 0; + + strcpy(prj->code, "SIN"); + + if (undefined(prj->pv[1])) prj->pv[1] = 0.0; + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "orthographic/synthesis"); + prj->category = ZENITHAL; + prj->pvrange = 102; + prj->simplezen = (prj->pv[1] == 0.0 && prj->pv[2] == 0.0); + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = 0; + + prj->w[0] = 1.0/prj->r0; + prj->w[1] = prj->pv[1]*prj->pv[1] + prj->pv[2]*prj->pv[2]; + prj->w[2] = prj->w[1] + 1.0; + prj->w[3] = prj->w[1] - 1.0; + + prj->prjx2s = sinx2s; + prj->prjs2x = sins2x; + + prj->flag = (prj->flag == 1) ? -SIN : SIN; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int sinx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != SIN) { + if ((status = sinset(prj))) return status; + } + + double xi = prj->pv[1]; + double eta = prj->pv[2]; + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double x0 = (*xp + prj->x0)*prj->w[0]; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = x0; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double y0 = (*yp + prj->y0)*prj->w[0]; + double y02 = y0*y0; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + // Compute intermediaries. + double x0 = *phip; + double r2 = x0*x0 + y02; + + if (prj->w[1] == 0.0) { + // Orthographic projection. + if (r2 != 0.0) { + *phip = atan2d(x0, -y0); + } else { + *phip = 0.0; + } + + if (r2 < 0.5) { + *thetap = acosd(sqrt(r2)); + } else if (r2 <= 1.0) { + *thetap = asind(sqrt(1.0 - r2)); + } else { + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("sinx2s") + continue; + } + + } else { + // "Synthesis" projection. + double xy = x0*xi + y0*eta; + + double z; + if (r2 < 1.0e-10) { + // Use small angle formula. + z = r2/2.0; + *thetap = 90.0 - R2D*sqrt(r2/(1.0 + xy)); + + } else { + double a = prj->w[2]; + double b = xy - prj->w[1]; + double c = r2 - xy - xy + prj->w[3]; + double d = b*b - a*c; + + // Check for a solution. + if (d < 0.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("sinx2s") + continue; + } + d = sqrt(d); + + // Choose solution closest to pole. + double sinth1 = (-b + d)/a; + double sinth2 = (-b - d)/a; + double sinthe = (sinth1 > sinth2) ? sinth1 : sinth2; + if (sinthe > 1.0) { + if (sinthe-1.0 < tol) { + sinthe = 1.0; + } else { + sinthe = (sinth1 < sinth2) ? sinth1 : sinth2; + } + } + + if (sinthe < -1.0) { + if (sinthe+1.0 > -tol) { + sinthe = -1.0; + } + } + + if (sinthe > 1.0 || sinthe < -1.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("sinx2s") + continue; + } + + *thetap = asind(sinthe); + z = 1.0 - sinthe; + } + + double x1 = -y0 + eta*z; + double y1 = x0 - xi*z; + if (x1 == 0.0 && y1 == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(y1,x1); + } + } + + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("sinx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int sins2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != SIN) { + if ((status = sinset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double costhe, z; + + double t = (90.0 - fabs(*thetap))*D2R; + if (t < 1.0e-5) { + if (*thetap > 0.0) { + z = t*t/2.0; + } else { + z = 2.0 - t*t/2.0; + } + costhe = t; + } else { + z = 1.0 - sind(*thetap); + costhe = cosd(*thetap); + } + double r = prj->r0*costhe; + + if (prj->w[1] == 0.0) { + // Orthographic projection. + int istat = 0; + if (prj->bounds&1) { + if (*thetap < 0.0) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("sins2x"); + } + } + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - prj->y0; + *statp = istat; + } + + } else { + // "Synthesis" projection. + z *= prj->r0; + double z1 = prj->pv[1]*z - prj->x0; + double z2 = prj->pv[2]*z - prj->y0; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + int istat = 0; + if (prj->bounds&1) { + t = -atand(prj->pv[1]*(*xp) - prj->pv[2]*(*yp)); + if (*thetap < t) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("sins2x"); + } + } + + *xp = r*(*xp) + z1; + *yp = -r*(*yp) + z2; + *statp = istat; + } + } + } + + return status; +} + +/*============================================================================ +* ARC: zenithal/azimuthal equidistant projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag ARC +* prj->code "ARC" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->prjx2s Pointer to arcx2s(). +* prj->prjs2x Pointer to arcs2x(). +*===========================================================================*/ + +int arcset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -ARC) return 0; + + strcpy(prj->code, "ARC"); + + strcpy(prj->name, "zenithal/azimuthal equidistant"); + prj->category = ZENITHAL; + prj->pvrange = 0; + prj->simplezen = 1; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = arcx2s; + prj->prjs2x = arcs2x; + + prj->flag = (prj->flag == 1) ? -ARC : ARC; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int arcx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != ARC) { + if ((status = arcset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double yj2 = yj*yj; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + yj2); + if (r == 0.0) { + *phip = 0.0; + *thetap = 90.0; + } else { + *phip = atan2d(xj, -yj); + *thetap = 90.0 - r*prj->w[1]; + } + + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("arcx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int arcs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != ARC) { + if ((status = arcset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double r = prj->w[0]*(90.0 - *thetap); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - prj->y0; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* ZPN: zenithal/azimuthal polynomial projection. +* +* Given: +* prj->pv[] Polynomial coefficients. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag ZPN +* prj->code "ZPN" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->n Degree of the polynomial, N. +* prj->w[0] Co-latitude of the first point of inflection, radian. +* prj->w[1] Radius of the first point of inflection (N > 1), radian. +* prj->prjx2s Pointer to zpnx2s(). +* prj->prjs2x Pointer to zpns2x(). +*===========================================================================*/ + +int zpnset(struct prjprm *prj) + +{ + const double tol = 1.0e-13; + + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -ZPN) return 0; + + strcpy(prj->code, "ZPN"); + + if (undefined(prj->pv[1])) prj->pv[1] = 0.0; + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (undefined(prj->pv[3])) prj->pv[3] = 0.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "zenithal/azimuthal polynomial"); + prj->category = ZENITHAL; + prj->pvrange = 30; + prj->simplezen = 1; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = 0; + + // Find the highest non-zero coefficient. + int k; + for (k = PVN-1; k >= 0 && prj->pv[k] == 0.0; k--); + if (k < 0) { + return PRJERR_BAD_PARAM_SET("zpnset"); + } + + prj->n = k; + + if (k < 2) { + // No point of inflection. + prj->w[0] = PI; + + } else { + // Find the point of inflection closest to the pole. + double d, d1, d2; + + d1 = prj->pv[1]; + if (d1 <= 0.0) { + return PRJERR_BAD_PARAM_SET("zpnset"); + } + + // Find the point where the derivative first goes negative. + int j; + double zd, zd1, zd2; + + zd1 = 0.0; + for (j = 0; j < 180; j++) { + zd2 = j*D2R; + d2 = 0.0; + for (int m = k; m > 0; m--) { + d2 = d2*zd2 + m*prj->pv[m]; + } + + if (d2 <= 0.0) break; + zd1 = zd2; + d1 = d2; + } + + if (j == 180) { + // No negative derivative -> no point of inflection. + zd = PI; + prj->global = 1; + } else { + // Find where the derivative is zero. + for (j = 1; j <= 10; j++) { + zd = zd1 - d1*(zd2-zd1)/(d2-d1); + + d = 0.0; + for (int m = k; m > 0; m--) { + d = d*zd + m*prj->pv[m]; + } + + if (fabs(d) < tol) break; + + if (d < 0.0) { + zd2 = zd; + d2 = d; + } else { + zd1 = zd; + d1 = d; + } + } + } + + double r = 0.0; + for (int m = k; m >= 0; m--) { + r = r*zd + prj->pv[m]; + } + prj->w[0] = zd; + prj->w[1] = r; + } + + prj->prjx2s = zpnx2s; + prj->prjs2x = zpns2x; + + prj->flag = (prj->flag == 1) ? -ZPN : ZPN; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int zpnx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != ZPN) { + if ((status = zpnset(prj))) return status; + } + + int k = prj->n; + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double yj2 = yj*yj; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + yj2)/prj->r0; + if (r == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(xj, -yj); + } + + double zd; + if (k < 1) { + // Constant - no solution. + return PRJERR_BAD_PARAM_SET("zpnx2s"); + + } else if (k == 1) { + // Linear. + zd = (r - prj->pv[0])/prj->pv[1]; + + } else if (k == 2) { + // Quadratic. + double a = prj->pv[2]; + double b = prj->pv[1]; + double c = prj->pv[0] - r; + + double d = b*b - 4.0*a*c; + if (d < 0.0) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); + continue; + } + d = sqrt(d); + + // Choose solution closest to pole. + double zd1 = (-b + d)/(2.0*a); + double zd2 = (-b - d)/(2.0*a); + + zd = (zd1zd2) ? zd1 : zd2; + if (zd < 0.0) { + if (zd < -tol) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); + continue; + } + zd = 0.0; + } else if (zd > PI) { + if (zd > PI+tol) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); + continue; + } + zd = PI; + } + } else { + // Higher order - solve iteratively. + double zd1 = 0.0; + double r1 = prj->pv[0]; + double zd2 = prj->w[0]; + double r2 = prj->w[1]; + + if (r < r1) { + if (r < r1-tol) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); + continue; + } + zd = zd1; + } else if (r > r2) { + if (r > r2+tol) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); + continue; + } + zd = zd2; + } else { + // Dissect the interval. + for (int j = 0; j < 100; j++) { + double lambda = (r2 - r)/(r2 - r1); + if (lambda < 0.1) { + lambda = 0.1; + } else if (lambda > 0.9) { + lambda = 0.9; + } + + zd = zd2 - lambda*(zd2 - zd1); + + double rt = 0.0; + for (int m = k; m >= 0; m--) { + rt = (rt * zd) + prj->pv[m]; + } + + if (rt < r) { + if (r-rt < tol) break; + r1 = rt; + zd1 = zd; + } else { + if (rt-r < tol) break; + r2 = rt; + zd2 = zd; + } + + if (fabs(zd2-zd1) < tol) break; + } + } + } + + *thetap = 90.0 - zd*R2D; + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("zpnx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int zpns2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != ZPN) { + if ((status = zpnset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double s = (90.0 - *thetap)*D2R; + + double r = 0.0; + for (int m = prj->n; m >= 0; m--) { + r = r*s + prj->pv[m]; + } + r *= prj->r0; + + // Bounds checking. + int istat = 0; + if (prj->bounds&1) { + if (s > prj->w[0]) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("zpns2x"); + } + } + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - prj->y0; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* ZEA: zenithal/azimuthal equal area projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag ZEA +* prj->code "ZEA" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] 2*r0 +* prj->w[1] 1/(2*r0) +* prj->prjx2s Pointer to zeax2s(). +* prj->prjs2x Pointer to zeas2x(). +*===========================================================================*/ + +int zeaset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -ZEA) return 0; + + strcpy(prj->code, "ZEA"); + + strcpy(prj->name, "zenithal/azimuthal equal area"); + prj->category = ZENITHAL; + prj->pvrange = 0; + prj->simplezen = 1; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 360.0/PI; + prj->w[1] = PI/360.0; + } else { + prj->w[0] = 2.0*prj->r0; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = zeax2s; + prj->prjs2x = zeas2x; + + prj->flag = (prj->flag == 1) ? -ZEA : ZEA; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int zeax2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != ZEA) { + if ((status = zeaset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double yj2 = yj*yj; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + yj2); + if (r == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(xj, -yj); + } + + double s = r*prj->w[1]; + if (fabs(s) > 1.0) { + if (fabs(r - prj->w[0]) < tol) { + *thetap = -90.0; + } else { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("zeax2s"); + continue; + } + } else { + *thetap = 90.0 - 2.0*asind(s); + } + + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("zeax2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int zeas2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != ZEA) { + if ((status = zeaset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double r = prj->w[0]*sind((90.0 - *thetap)/2.0); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - prj->y0; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* AIR: Airy's projection. +* +* Given: +* prj->pv[1] Latitude theta_b within which the error is minimized, in +* degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 90.0 if undefined. +* +* Returned: +* prj->flag AIR +* prj->code "AIR" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] 2*r0 +* prj->w[1] ln(cos(xi_b))/tan(xi_b)**2, where xi_b = (90-theta_b)/2 +* prj->w[2] 1/2 - prj->w[1] +* prj->w[3] 2*r0*prj->w[2] +* prj->w[4] tol, cutoff for using small angle approximation, in +* radians. +* prj->w[5] prj->w[2]*tol +* prj->w[6] (180/pi)/prj->w[2] +* prj->prjx2s Pointer to airx2s(). +* prj->prjs2x Pointer to airs2x(). +*===========================================================================*/ + +int airset(struct prjprm *prj) + +{ + const double tol = 1.0e-4; + + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -AIR) return 0; + + strcpy(prj->code, "AIR"); + + if (undefined(prj->pv[1])) prj->pv[1] = 90.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "Airy's zenithal"); + prj->category = ZENITHAL; + prj->pvrange = 101; + prj->simplezen = 1; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = 1; + + prj->w[0] = 2.0*prj->r0; + if (prj->pv[1] == 90.0) { + prj->w[1] = -0.5; + prj->w[2] = 1.0; + } else if (prj->pv[1] > -90.0) { + double cosxi = cosd((90.0 - prj->pv[1])/2.0); + prj->w[1] = log(cosxi)*(cosxi*cosxi)/(1.0-cosxi*cosxi); + prj->w[2] = 0.5 - prj->w[1]; + } else { + return PRJERR_BAD_PARAM_SET("airset"); + } + + prj->w[3] = prj->w[0] * prj->w[2]; + prj->w[4] = tol; + prj->w[5] = prj->w[2]*tol; + prj->w[6] = R2D/prj->w[2]; + + prj->prjx2s = airx2s; + prj->prjs2x = airs2x; + + prj->flag = (prj->flag == 1) ? -AIR : AIR; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int airx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != AIR) { + if ((status = airset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double yj2 = yj*yj; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + yj2)/prj->w[0]; + if (r == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(xj, -yj); + } + + double xi; + if (r == 0.0) { + xi = 0.0; + } else if (r < prj->w[5]) { + xi = r*prj->w[6]; + } else { + // Find a solution interval. + double x1 = 1.0; + double x2 = 1.0; + double r1 = 0.0; + double r2 = 0.0; + + int k; + for (k = 0; k < 30; k++) { + x2 = x1/2.0; + double tanxi = sqrt(1.0-x2*x2)/x2; + r2 = -(log(x2)/tanxi + prj->w[1]*tanxi); + + if (r2 >= r) break; + x1 = x2; + r1 = r2; + } + if (k == 30) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("airx2s"); + continue; + } + + double cosxi; + for (k = 0; k < 100; k++) { + // Weighted division of the interval. + double lambda = (r2-r)/(r2-r1); + if (lambda < 0.1) { + lambda = 0.1; + } else if (lambda > 0.9) { + lambda = 0.9; + } + cosxi = x2 - lambda*(x2-x1); + + double tanxi = sqrt(1.0-cosxi*cosxi)/cosxi; + double rt = -(log(cosxi)/tanxi + prj->w[1]*tanxi); + + if (rt < r) { + if (r-rt < tol) break; + r1 = rt; + x1 = cosxi; + } else { + if (rt-r < tol) break; + r2 = rt; + x2 = cosxi; + } + } + if (k == 100) { + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("airx2s"); + continue; + } + + xi = acosd(cosxi); + } + + *thetap = 90.0 - 2.0*xi; + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("airx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int airs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != AIR) { + if ((status = airset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + int istat = 0; + + double r; + if (*thetap == 90.0) { + r = 0.0; + } else if (*thetap > -90.0) { + double xi = D2R*(90.0 - *thetap)/2.0; + if (xi < prj->w[4]) { + r = xi*prj->w[3]; + } else { + double cosxi = cosd((90.0 - *thetap)/2.0); + double tanxi = sqrt(1.0 - cosxi*cosxi)/cosxi; + r = -prj->w[0]*(log(cosxi)/tanxi + prj->w[1]*tanxi); + } + } else { + r = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("airs2x"); + } + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - prj->y0; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* CYP: cylindrical perspective projection. +* +* Given: +* prj->pv[1] Distance of point of projection from the centre of the +* generating sphere, mu, in units of r0. +* prj->pv[2] Radius of the cylinder of projection, lambda, in units of +* r0. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag CYP +* prj->code "CYP" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*lambda*(pi/180) +* prj->w[1] (180/pi)/(r0*lambda) +* prj->w[2] r0*(mu + lambda) +* prj->w[3] 1/(r0*(mu + lambda)) +* prj->prjx2s Pointer to cypx2s(). +* prj->prjs2x Pointer to cyps2x(). +*===========================================================================*/ + +int cypset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -CYP) return 0; + + strcpy(prj->code, "CYP"); + + if (undefined(prj->pv[1])) prj->pv[1] = 1.0; + if (undefined(prj->pv[2])) prj->pv[2] = 1.0; + + strcpy(prj->name, "cylindrical perspective"); + prj->category = CYLINDRICAL; + prj->pvrange = 102; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = prj->pv[1] < -1.0 || 0.0 < prj->pv[1]; + prj->divergent = !prj->global; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + + prj->w[0] = prj->pv[2]; + if (prj->w[0] == 0.0) { + return PRJERR_BAD_PARAM_SET("cypset"); + } + + prj->w[1] = 1.0/prj->w[0]; + + prj->w[2] = R2D*(prj->pv[1] + prj->pv[2]); + if (prj->w[2] == 0.0) { + return PRJERR_BAD_PARAM_SET("cypset"); + } + + prj->w[3] = 1.0/prj->w[2]; + } else { + prj->w[0] = prj->r0*prj->pv[2]*D2R; + if (prj->w[0] == 0.0) { + return PRJERR_BAD_PARAM_SET("cypset"); + } + + prj->w[1] = 1.0/prj->w[0]; + + prj->w[2] = prj->r0*(prj->pv[1] + prj->pv[2]); + if (prj->w[2] == 0.0) { + return PRJERR_BAD_PARAM_SET("cypset"); + } + + prj->w[3] = 1.0/prj->w[2]; + } + + prj->prjx2s = cypx2s; + prj->prjs2x = cyps2x; + + prj->flag = (prj->flag == 1) ? -CYP : CYP; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int cypx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CYP) { + if ((status = cypset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double s = prj->w[1]*(*xp + prj->x0); + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double eta = prj->w[3]*(*yp + prj->y0); + double t = atan2d(eta,1.0) + asind(eta*prj->pv[1]/sqrt(eta*eta+1.0)); + + for (int ix = 0; ix < mx; ix++, thetap += spt, statp++) { + *thetap = t; + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("cypx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int cyps2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CYP) { + if ((status = cypset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[0]*(*phip) - prj->x0; + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = xi; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double eta = prj->pv[1] + cosd(*thetap); + + int istat = 0; + if (eta == 0.0) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("cyps2x"); + + } else { + eta = prj->w[2]*sind(*thetap)/eta; + } + + eta -= prj->y0; + for (int iphi = 0; iphi < mphi; iphi++, yp += sxy, statp++) { + *yp = eta; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* CEA: cylindrical equal area projection. +* +* Given: +* prj->pv[1] Square of the cosine of the latitude at which the +* projection is conformal, lambda. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag CEA +* prj->code "CEA" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->w[2] r0/lambda +* prj->w[3] lambda/r0 +* prj->prjx2s Pointer to ceax2s(). +* prj->prjs2x Pointer to ceas2x(). +*===========================================================================*/ + +int ceaset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -CEA) return 0; + + strcpy(prj->code, "CEA"); + + if (undefined(prj->pv[1])) prj->pv[1] = 1.0; + + strcpy(prj->name, "cylindrical equal area"); + prj->category = CYLINDRICAL; + prj->pvrange = 101; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + if (prj->pv[1] <= 0.0 || prj->pv[1] > 1.0) { + return PRJERR_BAD_PARAM_SET("ceaset"); + } + prj->w[2] = prj->r0/prj->pv[1]; + prj->w[3] = prj->pv[1]/prj->r0; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = R2D/prj->r0; + if (prj->pv[1] <= 0.0 || prj->pv[1] > 1.0) { + return PRJERR_BAD_PARAM_SET("ceaset"); + } + prj->w[2] = prj->r0/prj->pv[1]; + prj->w[3] = prj->pv[1]/prj->r0; + } + + prj->prjx2s = ceax2s; + prj->prjs2x = ceas2x; + + prj->flag = (prj->flag == 1) ? -CEA : CEA; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int ceax2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CEA) { + if ((status = ceaset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double s = prj->w[1]*(*xp + prj->x0); + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double s = prj->w[3]*(*yp + prj->y0); + + int istat = 0; + if (fabs(s) > 1.0) { + if (fabs(s) > 1.0+tol) { + s = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("ceax2s"); + } else { + s = copysign(90.0, s); + } + } else { + s = asind(s); + } + + for (int ix = 0; ix < mx; ix++, thetap += spt, statp++) { + *thetap = s; + *statp = istat; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("ceax2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int ceas2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CEA) { + if ((status = ceaset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[0]*(*phip) - prj->x0; + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = xi; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double eta = prj->w[2]*sind(*thetap) - prj->y0; + + for (int iphi = 0; iphi < mphi; iphi++, yp += sxy, statp++) { + *yp = eta; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* CAR: Plate carree projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag CAR +* prj->code "CAR" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->prjx2s Pointer to carx2s(). +* prj->prjs2x Pointer to cars2x(). +*===========================================================================*/ + +int carset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -CAR) return 0; + + strcpy(prj->code, "CAR"); + + strcpy(prj->name, "plate caree"); + prj->category = CYLINDRICAL; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = carx2s; + prj->prjs2x = cars2x; + + prj->flag = (prj->flag == 1) ? -CAR : CAR; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int carx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CAR) { + if ((status = carset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double s = prj->w[1]*(*xp + prj->x0); + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double t = prj->w[1]*(*yp + prj->y0); + + for (int ix = 0; ix < mx; ix++, thetap += spt, statp++) { + *thetap = t; + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("carx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int cars2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CAR) { + if ((status = carset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[0]*(*phip) - prj->x0; + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = xi; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double eta = prj->w[0]*(*thetap) - prj->y0; + + for (int iphi = 0; iphi < mphi; iphi++, yp += sxy, statp++) { + *yp = eta; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* MER: Mercator's projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag MER +* prj->code "MER" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->prjx2s Pointer to merx2s(). +* prj->prjs2x Pointer to mers2x(). +*===========================================================================*/ + +int merset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -MER) return 0; + + strcpy(prj->code, "MER"); + + strcpy(prj->name, "Mercator's"); + prj->category = CYLINDRICAL; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 1; + prj->global = 0; + prj->divergent = 1; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = merx2s; + prj->prjs2x = mers2x; + + prj->flag = (prj->flag == 1) ? -MER : MER; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int merx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != MER) { + if ((status = merset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double s = prj->w[1]*(*xp + prj->x0); + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double t = 2.0*atand(exp((*yp + prj->y0)/prj->r0)) - 90.0; + + for (int ix = 0; ix < mx; ix++, thetap += spt, statp++) { + *thetap = t; + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("merx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int mers2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != MER) { + if ((status = merset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[0]*(*phip) - prj->x0; + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = xi; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + int istat = 0; + + double eta; + if (*thetap <= -90.0 || *thetap >= 90.0) { + eta = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("mers2x"); + } else { + eta = prj->r0*log(tand((*thetap+90.0)/2.0)) - prj->y0; + } + + for (int iphi = 0; iphi < mphi; iphi++, yp += sxy, statp++) { + *yp = eta; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* SFL: Sanson-Flamsteed ("global sinusoid") projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag SFL +* prj->code "SFL" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->prjx2s Pointer to sflx2s(). +* prj->prjs2x Pointer to sfls2x(). +*===========================================================================*/ + +int sflset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -SFL) return 0; + + strcpy(prj->code, "SFL"); + + strcpy(prj->name, "Sanson-Flamsteed"); + prj->category = PSEUDOCYLINDRICAL; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = sflx2s; + prj->prjs2x = sfls2x; + + prj->flag = (prj->flag == 1) ? -SFL : SFL; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int sflx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != SFL) { + if ((status = sflset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double s = prj->w[1]*(*xp + prj->x0); + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double s = cos(yj/prj->r0); + + int istat = 0; + if (s == 0.0) { + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("sflx2s"); + } else { + s = 1.0/s; + } + + double t = prj->w[1]*yj; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + *phip *= s; + *thetap = t; + *statp = istat; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-12, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("sflx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int sfls2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != SFL) { + if ((status = sflset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[0]*(*phip); + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = xi; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double xi = cosd(*thetap); + double eta = prj->w[0]*(*thetap) - prj->y0; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = xi*(*xp) - prj->x0; + *yp = eta; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* PAR: parabolic projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag PAR +* prj->code "PAR" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->w[2] pi*r0 +* prj->w[3] 1/(pi*r0) +* prj->prjx2s Pointer to parx2s(). +* prj->prjs2x Pointer to pars2x(). +*===========================================================================*/ + +int parset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -PAR) return 0; + + strcpy(prj->code, "PAR"); + + strcpy(prj->name, "parabolic"); + prj->category = PSEUDOCYLINDRICAL; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + prj->w[2] = 180.0; + prj->w[3] = 1.0/prj->w[2]; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = 1.0/prj->w[0]; + prj->w[2] = PI*prj->r0; + prj->w[3] = 1.0/prj->w[2]; + } + + prj->prjx2s = parx2s; + prj->prjs2x = pars2x; + + prj->flag = (prj->flag == 1) ? -PAR : PAR; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int parx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != PAR) { + if ((status = parset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + double s = prj->w[1]*xj; + double t = fabs(xj) - tol; + + double *phip = phi + rowoff; + double *thetap = theta + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + *thetap = t; + phip += rowlen; + thetap += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double r = prj->w[3]*(*yp + prj->y0); + + int istat = 0; + double s, t; + if (r > 1.0 || r < -1.0) { + s = 0.0; + t = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("parx2s"); + + } else { + s = 1.0 - 4.0*r*r; + if (s == 0.0) { + // Deferred test. + istat = -1; + } else { + s = 1.0/s; + } + + t = 3.0*asind(r); + } + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + if (istat < 0) { + if (*thetap < 0.0) { + *statp = 0; + } else { + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("parx2s"); + } + } else { + *statp = istat; + } + + *phip *= s; + *thetap = t; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-12, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("parx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int pars2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != PAR) { + if ((status = parset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[0]*(*phip); + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = xi; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double s = sind((*thetap)/3.0); + double xi = (1.0 - 4.0*s*s); + double eta = prj->w[2]*s - prj->y0; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = xi*(*xp) - prj->x0; + *yp = eta; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* MOL: Mollweide's projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag MOL +* prj->code "MOL" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] sqrt(2)*r0 +* prj->w[1] sqrt(2)*r0/90 +* prj->w[2] 1/(sqrt(2)*r0) +* prj->w[3] 90/r0 +* prj->prjx2s Pointer to molx2s(). +* prj->prjs2x Pointer to mols2x(). +*===========================================================================*/ + +int molset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -MOL) return 0; + + strcpy(prj->code, "MOL"); + + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "Mollweide's"); + prj->category = PSEUDOCYLINDRICAL; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + prj->w[0] = SQRT2*prj->r0; + prj->w[1] = prj->w[0]/90.0; + prj->w[2] = 1.0/prj->w[0]; + prj->w[3] = 90.0/prj->r0; + prj->w[4] = 2.0/PI; + + prj->prjx2s = molx2s; + prj->prjs2x = mols2x; + + prj->flag = (prj->flag == 1) ? -MOL : MOL; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int molx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != MOL) { + if ((status = molset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + double s = prj->w[3]*xj; + double t = fabs(xj) - tol; + + double *phip = phi + rowoff; + double *thetap = theta + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + *thetap = t; + phip += rowlen; + thetap += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double y0 = yj/prj->r0; + double r = 2.0 - y0*y0; + + int istat = 0; + double s; + if (r <= tol) { + if (r < -tol) { + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); + } else { + // OK if fabs(x) < tol whence phi = 0.0. + istat = -1; + } + + r = 0.0; + s = 0.0; + + } else { + r = sqrt(r); + s = 1.0/r; + } + + double z = yj*prj->w[2]; + if (fabs(z) > 1.0) { + if (fabs(z) > 1.0+tol) { + z = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); + } else { + z = copysign(1.0, z) + y0*r/PI; + } + } else { + z = asin(z)*prj->w[4] + y0*r/PI; + } + + if (fabs(z) > 1.0) { + if (fabs(z) > 1.0+tol) { + z = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); + } else { + z = copysign(1.0, z); + } + } + + double t = asind(z); + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + if (istat < 0) { + if (*thetap < 0.0) { + *statp = 0; + } else { + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); + } + } else { + *statp = istat; + } + + *phip *= s; + *thetap = t; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-11, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("molx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int mols2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != MOL) { + if ((status = molset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[1]*(*phip); + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = xi; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double xi, eta; + + if (fabs(*thetap) == 90.0) { + xi = 0.0; + eta = copysign(prj->w[0], *thetap); + + } else if (*thetap == 0.0) { + xi = 1.0; + eta = 0.0; + + } else { + double u = PI*sind(*thetap); + double v0 = -PI; + double v1 = PI; + double v = u; + for (int k = 0; k < 100; k++) { + double resid = (v - u) + sin(v); + if (resid < 0.0) { + if (resid > -tol) break; + v0 = v; + } else { + if (resid < tol) break; + v1 = v; + } + v = (v0 + v1)/2.0; + } + + double gamma = v/2.0; + xi = cos(gamma); + eta = prj->w[0]*sin(gamma); + } + + eta -= prj->y0; + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = xi*(*xp) - prj->x0; + *yp = eta; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* AIT: Hammer-Aitoff projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag AIT +* prj->code "AIT" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] 2*r0**2 +* prj->w[1] 1/(2*r0)**2 +* prj->w[2] 1/(4*r0)**2 +* prj->w[3] 1/(2*r0) +* prj->prjx2s Pointer to aitx2s(). +* prj->prjs2x Pointer to aits2x(). +*===========================================================================*/ + +int aitset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -AIT) return 0; + + strcpy(prj->code, "AIT"); + + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "Hammer-Aitoff"); + prj->category = CONVENTIONAL; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + prj->w[0] = 2.0*prj->r0*prj->r0; + prj->w[1] = 1.0/(2.0*prj->w[0]); + prj->w[2] = prj->w[1]/4.0; + prj->w[3] = 1.0/(2.0*prj->r0); + + prj->prjx2s = aitx2s; + prj->prjs2x = aits2x; + + prj->flag = (prj->flag == 1) ? -AIT : AIT; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int aitx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-13; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != AIT) { + if ((status = aitset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + double s = 1.0 - xj*xj*prj->w[2]; + double t = xj*prj->w[3]; + + double *phip = phi + rowoff; + double *thetap = theta + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = s; + *thetap = t; + phip += rowlen; + thetap += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double yj2 = yj*yj*prj->w[1]; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double s = *phip - yj2; + + int istat = 0; + if (s < 0.5) { + if (s < 0.5-tol) { + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("aitx2s"); + } + + s = 0.5; + } + + double z = sqrt(s); + double x0 = 2.0*z*z - 1.0; + double y0 = z*(*thetap); + if (x0 == 0.0 && y0 == 0.0) { + *phip = 0.0; + } else { + *phip = 2.0*atan2d(y0, x0); + } + + double t = z*yj/prj->r0; + if (fabs(t) > 1.0) { + if (fabs(t) > 1.0+tol) { + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("aitx2s"); + } + t = copysign(90.0, t); + + } else { + t = asind(t); + } + + *thetap = t; + *statp = istat; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("aitx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int aits2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != AIT) { + if ((status = aitset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double w = (*phip)/2.0; + double sinphi, cosphi; + sincosd(w, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinphi; + *yp = cosphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe, costhe; + sincosd(*thetap, &sinthe, &costhe); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + double w = sqrt(prj->w[0]/(1.0 + costhe*(*yp))); + *xp = 2.0*w*costhe*(*xp) - prj->x0; + *yp = w*sinthe - prj->y0; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* COP: conic perspective projection. +* +* Given: +* prj->pv[1] sigma = (theta2+theta1)/2 +* prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the +* latitudes of the standard parallels, in degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to sigma if undefined. +* prj->theta0 Reset to sigma if undefined. +* +* Returned: +* prj->flag COP +* prj->code "COP" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] C = sin(sigma) +* prj->w[1] 1/C +* prj->w[2] Y0 = r0*cos(delta)*cot(sigma) +* prj->w[3] r0*cos(delta) +* prj->w[4] 1/(r0*cos(delta) +* prj->w[5] cot(sigma) +* prj->prjx2s Pointer to copx2s(). +* prj->prjs2x Pointer to cops2x(). +*===========================================================================*/ + +int copset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -COP) return 0; + + strcpy(prj->code, "COP"); + + if (undefined(prj->pv[1])) { + return PRJERR_BAD_PARAM_SET("copset"); + } + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "conic perspective"); + prj->category = CONIC; + prj->pvrange = 102; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 0; + prj->divergent = 1; + + prj->w[0] = sind(prj->pv[1]); + if (prj->w[0] == 0.0) { + return PRJERR_BAD_PARAM_SET("copset"); + } + + prj->w[1] = 1.0/prj->w[0]; + + prj->w[3] = prj->r0*cosd(prj->pv[2]); + if (prj->w[3] == 0.0) { + return PRJERR_BAD_PARAM_SET("copset"); + } + + prj->w[4] = 1.0/prj->w[3]; + prj->w[5] = 1.0/tand(prj->pv[1]); + + prj->w[2] = prj->w[3]*prj->w[5]; + + prj->prjx2s = copx2s; + prj->prjs2x = cops2x; + + prj->flag = (prj->flag == 1) ? -COP : COP; + + return prjoff(prj, 0.0, prj->pv[1]); +} + +//---------------------------------------------------------------------------- + +int copx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COP) { + if ((status = copset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double dy = prj->w[2] - (*yp + prj->y0); + double dy2 = dy*dy; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + dy2); + if (prj->pv[1] < 0.0) r = -r; + + double alpha; + if (r == 0.0) { + alpha = 0.0; + } else { + alpha = atan2d(xj/r, dy/r); + } + + *phip = alpha*prj->w[1]; + *thetap = prj->pv[1] + atand(prj->w[5] - r*prj->w[4]); + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("copx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int cops2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COP) { + if ((status = copset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double alpha = prj->w[0]*(*phip); + double sinalpha, cosalpha; + sincosd(alpha, &sinalpha, &cosalpha); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinalpha; + *yp = cosalpha; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + double y0 = prj->y0 - prj->w[2]; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double t = *thetap - prj->pv[1]; + double s = cosd(t); + + int istat = 0; + double r; + if (s == 0.0) { + // Latitude of divergence. + r = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("cops2x"); + + } else if (fabs(*thetap) == 90.0) { + // Return an exact value at the poles. + r = 0.0; + + // Bounds checking. + if (prj->bounds&1) { + if ((*thetap < 0.0) != (prj->pv[1] < 0.0)) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("cops2x"); + } + } + + } else { + r = prj->w[2] - prj->w[3]*sind(t)/s; + + // Bounds checking. + if (prj->bounds&1) { + if (r*prj->w[0] < 0.0) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("cops2x"); + } + } + } + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - y0; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* COE: conic equal area projection. +* +* Given: +* prj->pv[1] sigma = (theta2+theta1)/2 +* prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the +* latitudes of the standard parallels, in degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to sigma if undefined. +* prj->theta0 Reset to sigma if undefined. +* +* Returned: +* prj->flag COE +* prj->code "COE" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] C = (sin(theta1) + sin(theta2))/2 +* prj->w[1] 1/C +* prj->w[2] Y0 = chi*sqrt(psi - 2C*sind(sigma)) +* prj->w[3] chi = r0/C +* prj->w[4] psi = 1 + sin(theta1)*sin(theta2) +* prj->w[5] 2C +* prj->w[6] (1 + sin(theta1)*sin(theta2))*(r0/C)**2 +* prj->w[7] C/(2*r0**2) +* prj->w[8] chi*sqrt(psi + 2C) +* prj->prjx2s Pointer to coex2s(). +* prj->prjs2x Pointer to coes2x(). +*===========================================================================*/ + +int coeset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -COE) return 0; + + strcpy(prj->code, "COE"); + + if (undefined(prj->pv[1])) { + return PRJERR_BAD_PARAM_SET("coeset"); + } + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "conic equal area"); + prj->category = CONIC; + prj->pvrange = 102; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + double theta1 = prj->pv[1] - prj->pv[2]; + double theta2 = prj->pv[1] + prj->pv[2]; + + prj->w[0] = (sind(theta1) + sind(theta2))/2.0; + if (prj->w[0] == 0.0) { + return PRJERR_BAD_PARAM_SET("coeset"); + } + + prj->w[1] = 1.0/prj->w[0]; + + prj->w[3] = prj->r0/prj->w[0]; + prj->w[4] = 1.0 + sind(theta1)*sind(theta2); + prj->w[5] = 2.0*prj->w[0]; + prj->w[6] = prj->w[3]*prj->w[3]*prj->w[4]; + prj->w[7] = 1.0/(2.0*prj->r0*prj->w[3]); + prj->w[8] = prj->w[3]*sqrt(prj->w[4] + prj->w[5]); + + prj->w[2] = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*sind(prj->pv[1])); + + prj->prjx2s = coex2s; + prj->prjs2x = coes2x; + + prj->flag = (prj->flag == 1) ? -COE : COE; + + return prjoff(prj, 0.0, prj->pv[1]); +} + +//---------------------------------------------------------------------------- + +int coex2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COE) { + if ((status = coeset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double dy = prj->w[2] - (*yp + prj->y0); + double dy2 = dy*dy; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + dy2); + if (prj->pv[1] < 0.0) r = -r; + + double alpha; + if (r == 0.0) { + alpha = 0.0; + } else { + alpha = atan2d(xj/r, dy/r); + } + + int istat = 0; + double t; + if (fabs(r - prj->w[8]) < tol) { + t = -90.0; + } else { + double w = (prj->w[6] - r*r)*prj->w[7]; + if (fabs(w) > 1.0) { + if (fabs(w-1.0) < tol) { + t = 90.0; + } else if (fabs(w+1.0) < tol) { + t = -90.0; + } else { + t = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("coex2s"); + } + } else { + t = asind(w); + } + } + + *phip = alpha*prj->w[1]; + *thetap = t; + *statp = istat; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("coex2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int coes2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COE) { + if ((status = coeset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double alpha = prj->w[0]*(*phip); + double sinalpha, cosalpha; + sincosd(alpha, &sinalpha, &cosalpha); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinalpha; + *yp = cosalpha; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + double y0 = prj->y0 - prj->w[2]; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double r; + if (*thetap == -90.0) { + r = prj->w[8]; + } else { + r = prj->w[3]*sqrt(prj->w[4] - prj->w[5]*sind(*thetap)); + } + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - y0; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* COD: conic equidistant projection. +* +* Given: +* prj->pv[1] sigma = (theta2+theta1)/2 +* prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the +* latitudes of the standard parallels, in degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to sigma if undefined. +* prj->theta0 Reset to sigma if undefined. +* +* Returned: +* prj->flag COD +* prj->code "COD" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] C = r0*sin(sigma)*sin(delta)/delta +* prj->w[1] 1/C +* prj->w[2] Y0 = delta*cot(delta)*cot(sigma) +* prj->w[3] Y0 + sigma +* prj->prjx2s Pointer to codx2s(). +* prj->prjs2x Pointer to cods2x(). +*===========================================================================*/ + +int codset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -COD) return 0; + + strcpy(prj->code, "COD"); + + if (undefined(prj->pv[1])) { + return PRJERR_BAD_PARAM_SET("codset"); + } + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "conic equidistant"); + prj->category = CONIC; + prj->pvrange = 102; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->pv[2] == 0.0) { + prj->w[0] = prj->r0*sind(prj->pv[1])*D2R; + } else { + prj->w[0] = prj->r0*sind(prj->pv[1])*sind(prj->pv[2])/prj->pv[2]; + } + + if (prj->w[0] == 0.0) { + return PRJERR_BAD_PARAM_SET("codset"); + } + + prj->w[1] = 1.0/prj->w[0]; + prj->w[2] = prj->r0*cosd(prj->pv[2])*cosd(prj->pv[1])/prj->w[0]; + prj->w[3] = prj->w[2] + prj->pv[1]; + + prj->prjx2s = codx2s; + prj->prjs2x = cods2x; + + prj->flag = (prj->flag == 1) ? -COD : COD; + + return prjoff(prj, 0.0, prj->pv[1]); +} + +//---------------------------------------------------------------------------- + +int codx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COD) { + if ((status = codset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double dy = prj->w[2] - (*yp + prj->y0); + double dy2 = dy*dy; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + dy2); + if (prj->pv[1] < 0.0) r = -r; + + double alpha; + if (r == 0.0) { + alpha = 0.0; + } else { + alpha = atan2d(xj/r, dy/r); + } + + *phip = alpha*prj->w[1]; + *thetap = prj->w[3] - r; + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("codx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int cods2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COD) { + if ((status = codset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double alpha = prj->w[0]*(*phip); + double sinalpha, cosalpha; + sincosd(alpha, &sinalpha, &cosalpha); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinalpha; + *yp = cosalpha; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + double y0 = prj->y0 - prj->w[2]; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double r = prj->w[3] - *thetap; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - y0; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* COO: conic orthomorphic projection. +* +* Given: +* prj->pv[1] sigma = (theta2+theta1)/2 +* prj->pv[2] delta = (theta2-theta1)/2, where theta1 and theta2 are the +* latitudes of the standard parallels, in degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to sigma if undefined. +* prj->theta0 Reset to sigma if undefined. +* +* Returned: +* prj->flag COO +* prj->code "COO" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] C = ln(cos(theta2)/cos(theta1))/ln(tan(tau2)/tan(tau1)) +* where tau1 = (90 - theta1)/2 +* tau2 = (90 - theta2)/2 +* prj->w[1] 1/C +* prj->w[2] Y0 = psi*tan((90-sigma)/2)**C +* prj->w[3] psi = (r0*cos(theta1)/C)/tan(tau1)**C +* prj->w[4] 1/psi +* prj->prjx2s Pointer to coox2s(). +* prj->prjs2x Pointer to coos2x(). +*===========================================================================*/ + +int cooset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -COO) return 0; + + strcpy(prj->code, "COO"); + + if (undefined(prj->pv[1])) { + return PRJERR_BAD_PARAM_SET("cooset"); + } + if (undefined(prj->pv[2])) prj->pv[2] = 0.0; + if (prj->r0 == 0.0) prj->r0 = R2D; + + strcpy(prj->name, "conic orthomorphic"); + prj->category = CONIC; + prj->pvrange = 102; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 1; + prj->global = 0; + prj->divergent = 1; + + double theta1 = prj->pv[1] - prj->pv[2]; + double theta2 = prj->pv[1] + prj->pv[2]; + + double tan1 = tand((90.0 - theta1)/2.0); + double cos1 = cosd(theta1); + + if (theta1 == theta2) { + prj->w[0] = sind(theta1); + } else { + double tan2 = tand((90.0 - theta2)/2.0); + double cos2 = cosd(theta2); + prj->w[0] = log(cos2/cos1)/log(tan2/tan1); + } + if (prj->w[0] == 0.0) { + return PRJERR_BAD_PARAM_SET("cooset"); + } + + prj->w[1] = 1.0/prj->w[0]; + + prj->w[3] = prj->r0*(cos1/prj->w[0])/pow(tan1,prj->w[0]); + if (prj->w[3] == 0.0) { + return PRJERR_BAD_PARAM_SET("cooset"); + } + prj->w[2] = prj->w[3]*pow(tand((90.0 - prj->pv[1])/2.0),prj->w[0]); + prj->w[4] = 1.0/prj->w[3]; + + prj->prjx2s = coox2s; + prj->prjs2x = coos2x; + + prj->flag = (prj->flag == 1) ? -COO : COO; + + return prjoff(prj, 0.0, prj->pv[1]); +} + +//---------------------------------------------------------------------------- + +int coox2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COO) { + if ((status = cooset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double dy = prj->w[2] - (*yp + prj->y0); + double dy2 = dy*dy; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + dy2); + if (prj->pv[1] < 0.0) r = -r; + + double alpha; + if (r == 0.0) { + alpha = 0.0; + } else { + alpha = atan2d(xj/r, dy/r); + } + + int istat = 0; + double t; + if (r == 0.0) { + if (prj->w[0] < 0.0) { + t = -90.0; + } else { + t = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("coox2s"); + } + } else { + t = 90.0 - 2.0*atand(pow(r*prj->w[4],prj->w[1])); + } + + *phip = alpha*prj->w[1]; + *thetap = t; + *statp = istat; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("coox2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int coos2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != COO) { + if ((status = cooset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double alpha = prj->w[0]*(*phip); + double sinalpha, cosalpha; + sincosd(alpha, &sinalpha, &cosalpha); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = sinalpha; + *yp = cosalpha; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + double y0 = prj->y0 - prj->w[2]; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + int istat = 0; + + double r; + if (*thetap == -90.0) { + r = 0.0; + if (prj->w[0] >= 0.0) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("coos2x"); + } + } else { + r = prj->w[3]*pow(tand((90.0 - *thetap)/2.0),prj->w[0]); + } + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = r*(*xp) - prj->x0; + *yp = -r*(*yp) - y0; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* BON: Bonne's projection. +* +* Given: +* prj->pv[1] Bonne conformal latitude, theta1, in degrees. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag BON +* prj->code "BON" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[1] r0*pi/180 +* prj->w[2] Y0 = r0*(cot(theta1) + theta1*pi/180) +* prj->prjx2s Pointer to bonx2s(). +* prj->prjs2x Pointer to bons2x(). +*===========================================================================*/ + +int bonset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -BON) return 0; + + strcpy(prj->code, "BON"); + + if (undefined(prj->pv[1])) { + return PRJERR_BAD_PARAM_SET("bonset"); + } + + if (prj->pv[1] == 0.0) { + // Sanson-Flamsteed. + return sflset(prj); + } + + strcpy(prj->name, "Bonne's"); + prj->category = POLYCONIC; + prj->pvrange = 101; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[1] = 1.0; + prj->w[2] = prj->r0*cosd(prj->pv[1])/sind(prj->pv[1]) + prj->pv[1]; + } else { + prj->w[1] = prj->r0*D2R; + prj->w[2] = prj->r0*(cosd(prj->pv[1])/sind(prj->pv[1]) + prj->pv[1]*D2R); + } + + prj->prjx2s = bonx2s; + prj->prjs2x = bons2x; + + prj->flag = (prj->flag == 1) ? -BON : BON; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int bonx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->pv[1] == 0.0) { + // Sanson-Flamsteed. + return sflx2s(prj, nx, ny, sxy, spt, x, y, phi, theta, stat); + } + + int status; + if (abs(prj->flag) != BON) { + if ((status = bonset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double dy = prj->w[2] - (*yp + prj->y0); + double dy2 = dy*dy; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + double r = sqrt(xj*xj + dy2); + if (prj->pv[1] < 0.0) r = -r; + + double alpha; + if (r == 0.0) { + alpha = 0.0; + } else { + alpha = atan2d(xj/r, dy/r); + } + + double s; + double t = (prj->w[2] - r)/prj->w[1]; + double costhe = cosd(t); + if (costhe == 0.0) { + s = 0.0; + } else { + s = alpha*(r/prj->r0)/costhe; + } + + *phip = s; + *thetap = t; + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-11, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("bonx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int bons2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->pv[1] == 0.0) { + // Sanson-Flamsteed. + return sfls2x(prj, nphi, ntheta, spt, sxy, phi, theta, x, y, stat); + } + + int status; + if (abs(prj->flag) != BON) { + if ((status = bonset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double s = prj->r0*(*phip); + + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = s; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + double y0 = prj->y0 - prj->w[2]; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double r = prj->w[2] - prj->w[1]*(*thetap); + double s = cosd(*thetap)/r; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + double alpha = s*(*xp); + double sinalpha, cosalpha; + sincosd(alpha, &sinalpha, &cosalpha); + *xp = r*sinalpha - prj->x0; + *yp = -r*cosalpha - y0; + *statp = 0; + } + } + + return 0; +} + +/*============================================================================ +* PCO: polyconic projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag PCO +* prj->code "PCO" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->w[2] 2*r0 +* prj->w[3] (pi/180)/(2*r0) +* prj->prjx2s Pointer to pcox2s(). +* prj->prjs2x Pointer to pcos2x(). +*===========================================================================*/ + +int pcoset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -PCO) return 0; + + strcpy(prj->code, "PCO"); + + strcpy(prj->name, "polyconic"); + prj->category = POLYCONIC; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + prj->w[2] = 360.0/PI; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = 1.0/prj->w[0]; + prj->w[2] = 2.0*prj->r0; + } + prj->w[3] = D2R/prj->w[2]; + + prj->prjx2s = pcox2s; + prj->prjs2x = pcos2x; + + prj->flag = (prj->flag == 1) ? -PCO : PCO; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int pcox2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != PCO) { + if ((status = pcoset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xj = *xp + prj->x0; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xj; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yj = *yp + prj->y0; + double w = fabs(yj*prj->w[1]); + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xj = *phip; + + if (w < tol) { + *phip = xj*prj->w[1]; + *thetap = 0.0; + + } else if (fabs(w-90.0) < tol) { + *phip = 0.0; + *thetap = copysign(90.0, yj); + + } else { + double the, ymthe, tanthe; + if (w < 1.0e-4) { + // To avoid cot(theta) blowing up near theta == 0. + the = yj / (prj->w[0] + prj->w[3]*xj*xj); + ymthe = yj - prj->w[0]*the; + tanthe = tand(the); + + } else { + // Iterative solution using weighted division of the interval. + double thepos = yj / prj->w[0]; + double theneg = 0.0; + + // Setting fneg = -fpos halves the interval in the first iter. + double xx = xj*xj; + double fpos = xx; + double fneg = -xx; + + for (int k = 0; k < 64; k++) { + // Weighted division of the interval. + double lambda = fpos/(fpos-fneg); + if (lambda < 0.1) { + lambda = 0.1; + } else if (lambda > 0.9) { + lambda = 0.9; + } + the = thepos - lambda*(thepos-theneg); + + // Compute the residue. + ymthe = yj - prj->w[0]*the; + tanthe = tand(the); + double f = xx + ymthe*(ymthe - prj->w[2]/tanthe); + + // Check for convergence. + if (fabs(f) < tol) break; + if (fabs(thepos-theneg) < tol) break; + + // Redefine the interval. + if (f > 0.0) { + thepos = the; + fpos = f; + } else { + theneg = the; + fneg = f; + } + } + } + + double x1 = prj->r0 - ymthe*tanthe; + double y1 = xj*tanthe; + if (x1 == 0.0 && y1 == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(y1, x1)/sind(the); + } + + *thetap = the; + } + + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-12, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("pcox2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int pcos2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != PCO) { + if ((status = pcoset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double *xp = x + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = *phip; + xp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + if (*thetap == 0.0) { + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = prj->w[0]*(*xp) - prj->x0; + *yp = -prj->y0; + *statp = 0; + } + + } else if (fabs(*thetap) < 1.0e-4) { + // To avoid cot(theta) blowing up near theta == 0. + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *xp = prj->w[0]*(*xp)*cosd(*thetap) - prj->x0; + *yp = (prj->w[0] + prj->w[3]*(*xp)*(*xp))*(*thetap) - prj->y0; + *statp = 0; + } + + } else { + double therad = (*thetap)*D2R; + double sinthe, costhe; + sincosd(*thetap, &sinthe, &costhe); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + double sinpsi, cospsi; + sincosd((*xp)*sinthe, &sinpsi, &cospsi); + double cotthe = costhe/sinthe; + *xp = prj->r0*cotthe*sinpsi - prj->x0; + *yp = prj->r0*(cotthe*(1.0 - cospsi) + therad) - prj->y0; + *statp = 0; + } + } + } + + return 0; +} + +/*============================================================================ +* TSC: tangential spherical cube projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag TSC +* prj->code "TSC" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/4) +* prj->w[1] (4/pi)/r0 +* prj->prjx2s Pointer to tscx2s(). +* prj->prjs2x Pointer to tscs2x(). +*===========================================================================*/ + +int tscset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -TSC) return 0; + + strcpy(prj->code, "TSC"); + + strcpy(prj->name, "tangential spherical cube"); + prj->category = QUADCUBE; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 45.0; + prj->w[1] = 1.0/45.0; + } else { + prj->w[0] = prj->r0*PI/4.0; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = tscx2s; + prj->prjs2x = tscs2x; + + prj->flag = (prj->flag == 1) ? -TSC : TSC; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int tscx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != TSC) { + if ((status = tscset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xf = (*xp + prj->x0)*prj->w[1]; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xf; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yf = (*yp + prj->y0)*prj->w[1]; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xf = *phip; + + // Bounds checking. + if (fabs(xf) <= 1.0) { + if (fabs(yf) > 3.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("tscx2s"); + continue; + } + } else { + if (fabs(xf) > 7.0 || fabs(yf) > 1.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("tscx2s"); + continue; + } + } + + // Map negative faces to the other side. + if (xf < -1.0) xf += 8.0; + + // Determine the face. + double l, m, n; + if (xf > 5.0) { + // face = 4 + xf = xf - 6.0; + m = -1.0/sqrt(1.0 + xf*xf + yf*yf); + l = -m*xf; + n = -m*yf; + } else if (xf > 3.0) { + // face = 3 + xf = xf - 4.0; + l = -1.0/sqrt(1.0 + xf*xf + yf*yf); + m = l*xf; + n = -l*yf; + } else if (xf > 1.0) { + // face = 2 + xf = xf - 2.0; + m = 1.0/sqrt(1.0 + xf*xf + yf*yf); + l = -m*xf; + n = m*yf; + } else if (yf > 1.0) { + // face = 0 + yf = yf - 2.0; + n = 1.0/sqrt(1.0 + xf*xf + yf*yf); + l = -n*yf; + m = n*xf; + } else if (yf < -1.0) { + // face = 5 + yf = yf + 2.0; + n = -1.0/sqrt(1.0 + xf*xf + yf*yf); + l = -n*yf; + m = -n*xf; + } else { + // face = 1 + l = 1.0/sqrt(1.0 + xf*xf + yf*yf); + m = l*xf; + n = l*yf; + } + + if (l == 0.0 && m == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(m, l); + } + + *thetap = asind(n); + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("tscx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int tscs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != TSC) { + if ((status = tscset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = cosphi; + *yp = sinphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe, costhe; + sincosd(*thetap, &sinthe, &costhe); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + double l = costhe*(*xp); + double m = costhe*(*yp); + double n = sinthe; + + int face = 0; + double zeta = n; + if (l > zeta) { + face = 1; + zeta = l; + } + if (m > zeta) { + face = 2; + zeta = m; + } + if (-l > zeta) { + face = 3; + zeta = -l; + } + if (-m > zeta) { + face = 4; + zeta = -m; + } + if (-n > zeta) { + face = 5; + zeta = -n; + } + + double xf, yf, x0, y0; + switch (face) { + case 1: + xf = m/zeta; + yf = n/zeta; + x0 = 0.0; + y0 = 0.0; + break; + case 2: + xf = -l/zeta; + yf = n/zeta; + x0 = 2.0; + y0 = 0.0; + break; + case 3: + xf = -m/zeta; + yf = n/zeta; + x0 = 4.0; + y0 = 0.0; + break; + case 4: + xf = l/zeta; + yf = n/zeta; + x0 = 6.0; + y0 = 0.0; + break; + case 5: + xf = m/zeta; + yf = l/zeta; + x0 = 0.0; + y0 = -2.0; + break; + default: + // face == 0 + xf = m/zeta; + yf = -l/zeta; + x0 = 0.0; + y0 = 2.0; + break; + } + + int istat = 0; + if (fabs(xf) > 1.0) { + if (fabs(xf) > 1.0+tol) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("tscs2x"); + } + xf = copysign(1.0, xf); + } + if (fabs(yf) > 1.0) { + if (fabs(yf) > 1.0+tol) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("tscs2x"); + } + yf = copysign(1.0, yf); + } + + *xp = prj->w[0]*(xf + x0) - prj->x0; + *yp = prj->w[0]*(yf + y0) - prj->y0; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* CSC: COBE quadrilateralized spherical cube projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag CSC +* prj->code "CSC" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/4) +* prj->w[1] (4/pi)/r0 +* prj->prjx2s Pointer to cscx2s(). +* prj->prjs2x Pointer to cscs2x(). +*===========================================================================*/ + +int cscset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -CSC) return 0; + + strcpy(prj->code, "CSC"); + + strcpy(prj->name, "COBE quadrilateralized spherical cube"); + prj->category = QUADCUBE; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 0; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 45.0; + prj->w[1] = 1.0/45.0; + } else { + prj->w[0] = prj->r0*PI/4.0; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = cscx2s; + prj->prjs2x = cscs2x; + + prj->flag = (prj->flag == 1) ? -CSC : CSC; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int cscx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const float p00 = -0.27292696f; + const float p10 = -0.07629969f; + const float p20 = -0.22797056f; + const float p30 = 0.54852384f; + const float p40 = -0.62930065f; + const float p50 = 0.25795794f; + const float p60 = 0.02584375f; + const float p01 = -0.02819452f; + const float p11 = -0.01471565f; + const float p21 = 0.48051509f; + const float p31 = -1.74114454f; + const float p41 = 1.71547508f; + const float p51 = -0.53022337f; + const float p02 = 0.27058160f; + const float p12 = -0.56800938f; + const float p22 = 0.30803317f; + const float p32 = 0.98938102f; + const float p42 = -0.83180469f; + const float p03 = -0.60441560f; + const float p13 = 1.50880086f; + const float p23 = -0.93678576f; + const float p33 = 0.08693841f; + const float p04 = 0.93412077f; + const float p14 = -1.41601920f; + const float p24 = 0.33887446f; + const float p05 = -0.63915306f; + const float p15 = 0.52032238f; + const float p06 = 0.14381585f; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CSC) { + if ((status = cscset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + float xf = (float)((*xp + prj->x0)*prj->w[1]); + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xf; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + float yf = (float)((*yp + prj->y0)*prj->w[1]); + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + float xf = (float)(*phip); + + // Bounds checking. + if (fabs((double)xf) <= 1.0) { + if (fabs((double)yf) > 3.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("cscx2s"); + continue; + } + } else { + if (fabs((double)xf) > 7.0 || fabs((double)yf) > 1.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("cscx2s"); + continue; + } + } + + // Map negative faces to the other side. + if (xf < -1.0f) xf += 8.0f; + + // Determine the face. + int face = 0; + if (xf > 5.0f) { + face = 4; + xf = xf - 6.0f; + } else if (xf > 3.0f) { + face = 3; + xf = xf - 4.0f; + } else if (xf > 1.0f) { + face = 2; + xf = xf - 2.0f; + } else if (yf > 1.0f) { + face = 0; + yf = yf - 2.0f; + } else if (yf < -1.0f) { + face = 5; + yf = yf + 2.0f; + } else { + face = 1; + } + + float xx = xf*xf; + float yy = yf*yf; + + float z0, z1, z2, z3, z4, z5, z6; + z0 = p00 + xx*(p10 + xx*(p20 + xx*(p30 + xx*(p40 + xx*(p50 + + xx*(p60)))))); + z1 = p01 + xx*(p11 + xx*(p21 + xx*(p31 + xx*(p41 + xx*(p51))))); + z2 = p02 + xx*(p12 + xx*(p22 + xx*(p32 + xx*(p42)))); + z3 = p03 + xx*(p13 + xx*(p23 + xx*(p33))); + z4 = p04 + xx*(p14 + xx*(p24)); + z5 = p05 + xx*(p15); + z6 = p06; + + float chi; + chi = z0 + yy*(z1 + yy*(z2 + yy*(z3 + yy*(z4 + yy*(z5 + yy*z6))))); + chi = xf + xf*(1.0f - xx)*chi; + + z0 = p00 + yy*(p10 + yy*(p20 + yy*(p30 + yy*(p40 + yy*(p50 + + yy*(p60)))))); + z1 = p01 + yy*(p11 + yy*(p21 + yy*(p31 + yy*(p41 + yy*(p51))))); + z2 = p02 + yy*(p12 + yy*(p22 + yy*(p32 + yy*(p42)))); + z3 = p03 + yy*(p13 + yy*(p23 + yy*(p33))); + z4 = p04 + yy*(p14 + yy*(p24)); + z5 = p05 + yy*(p15); + z6 = p06; + + float psi; + psi = z0 + xx*(z1 + xx*(z2 + xx*(z3 + xx*(z4 + xx*(z5 + xx*z6))))); + psi = yf + yf*(1.0f - yy)*psi; + + double l, m, n; + double t = 1.0/sqrt((double)(chi*chi + psi*psi) + 1.0); + switch (face) { + case 1: + l = t; + m = chi*l; + n = psi*l; + break; + case 2: + m = t; + l = -chi*m; + n = psi*m; + break; + case 3: + l = -t; + m = chi*l; + n = -psi*l; + break; + case 4: + m = -t; + l = -chi*m; + n = -psi*m; + break; + case 5: + n = -t; + l = -psi*n; + m = -chi*n; + break; + default: + // face == 0 + n = t; + l = -psi*n; + m = chi*n; + break; + } + + if (l == 0.0 && m == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(m, l); + } + + *thetap = asind(n); + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("cscx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int cscs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + const double tol = 1.0e-7; + + const float gstar = 1.37484847732f; + const float mm = 0.004869491981f; + const float gamma = -0.13161671474f; + const float omega1 = -0.159596235474f; + const float d0 = 0.0759196200467f; + const float d1 = -0.0217762490699f; + const float c00 = 0.141189631152f; + const float c10 = 0.0809701286525f; + const float c01 = -0.281528535557f; + const float c11 = 0.15384112876f; + const float c20 = -0.178251207466f; + const float c02 = 0.106959469314f; + + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != CSC) { + if ((status = cscset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = cosphi; + *yp = sinphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe, costhe; + sincosd(*thetap, &sinthe, &costhe); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + double l = costhe*(*xp); + double m = costhe*(*yp); + double n = sinthe; + + int face = 0; + double zeta = n; + if (l > zeta) { + face = 1; + zeta = l; + } + if (m > zeta) { + face = 2; + zeta = m; + } + if (-l > zeta) { + face = 3; + zeta = -l; + } + if (-m > zeta) { + face = 4; + zeta = -m; + } + if (-n > zeta) { + face = 5; + zeta = -n; + } + + double eta, xi; + float x0, y0; + switch (face) { + case 1: + xi = m; + eta = n; + x0 = 0.0; + y0 = 0.0; + break; + case 2: + xi = -l; + eta = n; + x0 = 2.0; + y0 = 0.0; + break; + case 3: + xi = -m; + eta = n; + x0 = 4.0; + y0 = 0.0; + break; + case 4: + xi = l; + eta = n; + x0 = 6.0; + y0 = 0.0; + break; + case 5: + xi = m; + eta = l; + x0 = 0.0; + y0 = -2.0; + break; + default: + // face == 0 + xi = m; + eta = -l; + x0 = 0.0; + y0 = 2.0; + break; + } + + float chi = (float)( xi/zeta); + float psi = (float)(eta/zeta); + + float chi2 = chi*chi; + float psi2 = psi*psi; + float chi2co = 1.0f - chi2; + float psi2co = 1.0f - psi2; + + // Avoid floating underflows. + float chipsi = (float)fabs((double)(chi*psi)); + float chi4 = (chi2 > 1.0e-16f) ? chi2*chi2 : 0.0f; + float psi4 = (psi2 > 1.0e-16f) ? psi2*psi2 : 0.0f; + float chi2psi2 = (chipsi > 1.0e-16f) ? chi2*psi2 : 0.0f; + + float xf, yf; + xf = chi*(chi2 + chi2co*(gstar + psi2*(gamma*chi2co + mm*chi2 + + psi2co*(c00 + c10*chi2 + c01*psi2 + c11*chi2psi2 + c20*chi4 + + c02*psi4)) + chi2*(omega1 - chi2co*(d0 + d1*chi2)))); + yf = psi*(psi2 + psi2co*(gstar + chi2*(gamma*psi2co + mm*psi2 + + chi2co*(c00 + c10*psi2 + c01*chi2 + c11*chi2psi2 + c20*psi4 + + c02*chi4)) + psi2*(omega1 - psi2co*(d0 + d1*psi2)))); + + int istat = 0; + if (fabs((double)xf) > 1.0) { + if (fabs((double)xf) > 1.0+tol) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("cscs2x"); + } + xf = (float)copysign(1.0, (double)xf); + } + if (fabs((double)yf) > 1.0) { + if (fabs((double)yf) > 1.0+tol) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("cscs2x"); + } + yf = (float)copysign(1.0, (double)yf); + } + + *xp = prj->w[0]*(xf + x0) - prj->x0; + *yp = prj->w[0]*(yf + y0) - prj->y0; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* QSC: quadrilaterilized spherical cube projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag QSC +* prj->code "QSC" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/4) +* prj->w[1] (4/pi)/r0 +* prj->prjx2s Pointer to qscx2s(). +* prj->prjs2x Pointer to qscs2x(). +*===========================================================================*/ + +int qscset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -QSC) return 0; + + strcpy(prj->code, "QSC"); + + strcpy(prj->name, "quadrilateralized spherical cube"); + prj->category = QUADCUBE; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 45.0; + prj->w[1] = 1.0/45.0; + } else { + prj->w[0] = prj->r0*PI/4.0; + prj->w[1] = 1.0/prj->w[0]; + } + + prj->prjx2s = qscx2s; + prj->prjs2x = qscs2x; + + prj->flag = (prj->flag == 1) ? -QSC : QSC; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int qscx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != QSC) { + if ((status = qscset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xf = (*xp + prj->x0)*prj->w[1]; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xf; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yf = (*yp + prj->y0)*prj->w[1]; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xf = *phip; + + // Bounds checking. + if (fabs(xf) <= 1.0) { + if (fabs(yf) > 3.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("qscx2s"); + continue; + } + } else { + if (fabs(xf) > 7.0 || fabs(yf) > 1.0) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("qscx2s"); + continue; + } + } + + // Map negative faces to the other side. + if (xf < -1.0) xf += 8.0; + + int face = 0; + // Determine the face. + if (xf > 5.0) { + face = 4; + xf -= 6.0; + } else if (xf > 3.0) { + face = 3; + xf -= 4.0; + } else if (xf > 1.0) { + face = 2; + xf -= 2.0; + } else if (yf > 1.0) { + face = 0; + yf -= 2.0; + } else if (yf < -1.0) { + face = 5; + yf += 2.0; + } else { + face = 1; + } + + double omega, tau, w, zeta, zeco; + int direct = (fabs(xf) > fabs(yf)); + if (direct) { + if (xf == 0.0) { + omega = 0.0; + tau = 1.0; + zeta = 1.0; + zeco = 0.0; + } else { + w = 15.0*yf/xf; + omega = sind(w)/(cosd(w) - SQRT2INV); + tau = 1.0 + omega*omega; + zeco = xf*xf*(1.0 - 1.0/sqrt(1.0 + tau)); + zeta = 1.0 - zeco; + } + } else { + if (yf == 0.0) { + omega = 0.0; + tau = 1.0; + zeta = 1.0; + zeco = 0.0; + } else { + w = 15.0*xf/yf; + double sinw, cosw; + sincosd(w, &sinw, &cosw); + omega = sinw/(cosw - SQRT2INV); + tau = 1.0 + omega*omega; + zeco = yf*yf*(1.0 - 1.0/sqrt(1.0 + tau)); + zeta = 1.0 - zeco; + } + } + + if (zeta < -1.0) { + if (zeta < -1.0-tol) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("qscx2s"); + continue; + } + + zeta = -1.0; + zeco = 2.0; + w = 0.0; + } else { + w = sqrt(zeco*(2.0-zeco)/tau); + } + + double l, m, n; + switch (face) { + case 1: + l = zeta; + if (direct) { + m = w; + if (xf < 0.0) m = -m; + n = m*omega; + } else { + n = w; + if (yf < 0.0) n = -n; + m = n*omega; + } + break; + case 2: + m = zeta; + if (direct) { + l = w; + if (xf > 0.0) l = -l; + n = -l*omega; + } else { + n = w; + if (yf < 0.0) n = -n; + l = -n*omega; + } + break; + case 3: + l = -zeta; + if (direct) { + m = w; + if (xf > 0.0) m = -m; + n = -m*omega; + } else { + n = w; + if (yf < 0.0) n = -n; + m = -n*omega; + } + break; + case 4: + m = -zeta; + if (direct) { + l = w; + if (xf < 0.0) l = -l; + n = l*omega; + } else { + n = w; + if (yf < 0.0) n = -n; + l = n*omega; + } + break; + case 5: + n = -zeta; + if (direct) { + m = w; + if (xf < 0.0) m = -m; + l = m*omega; + } else { + l = w; + if (yf < 0.0) l = -l; + m = l*omega; + } + break; + default: + // face == 0 + n = zeta; + if (direct) { + m = w; + if (xf < 0.0) m = -m; + l = -m*omega; + } else { + l = w; + if (yf > 0.0) l = -l; + m = -l*omega; + } + break; + } + + if (l == 0.0 && m == 0.0) { + *phip = 0.0; + } else { + *phip = atan2d(m, l); + } + + *thetap = asind(n); + *statp = 0; + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-13, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("qscx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int qscs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != QSC) { + if ((status = qscset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + status = 0; + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double sinphi, cosphi; + sincosd(*phip, &sinphi, &cosphi); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *xp = cosphi; + *yp = sinphi; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe, costhe; + sincosd(*thetap, &sinthe, &costhe); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + if (fabs(*thetap) == 90.0) { + *xp = -prj->x0; + *yp = copysign(2.0*prj->w[0], *thetap) - prj->y0; + *statp = 0; + continue; + } + + double l = costhe*(*xp); + double m = costhe*(*yp); + double n = sinthe; + + int face = 0; + double zeta = n; + if (l > zeta) { + face = 1; + zeta = l; + } + if (m > zeta) { + face = 2; + zeta = m; + } + if (-l > zeta) { + face = 3; + zeta = -l; + } + if (-m > zeta) { + face = 4; + zeta = -m; + } + if (-n > zeta) { + face = 5; + zeta = -n; + } + + double zeco = 1.0 - zeta; + + double xi, eta, x0, y0; + switch (face) { + case 1: + xi = m; + eta = n; + if (zeco < 1.0e-8) { + // Small angle formula. + double t = (*thetap)*D2R; + double p = atan2(*yp, *xp); + zeco = (p*p + t*t)/2.0; + } + x0 = 0.0; + y0 = 0.0; + break; + case 2: + xi = -l; + eta = n; + if (zeco < 1.0e-8) { + // Small angle formula. + double t = (*thetap)*D2R; + double p = atan2(*yp, *xp) - PI/2.0; + zeco = (p*p + t*t)/2.0; + } + x0 = 2.0; + y0 = 0.0; + break; + case 3: + xi = -m; + eta = n; + if (zeco < 1.0e-8) { + // Small angle formula. + double t = (*thetap)*D2R; + double p = atan2(*yp, *xp); + p -= copysign(PI, p); + zeco = (p*p + t*t)/2.0; + } + x0 = 4.0; + y0 = 0.0; + break; + case 4: + xi = l; + eta = n; + if (zeco < 1.0e-8) { + // Small angle formula. + double t = (*thetap)*D2R; + double p = atan2(*yp, *xp) + PI/2.0; + zeco = (p*p + t*t)/2.0; + } + x0 = 6; + y0 = 0.0; + break; + case 5: + xi = m; + eta = l; + if (zeco < 1.0e-8) { + // Small angle formula. + double t = (*thetap + 90.0)*D2R; + zeco = t*t/2.0; + } + x0 = 0.0; + y0 = -2; + break; + default: + // face == 0 + xi = m; + eta = -l; + if (zeco < 1.0e-8) { + // Small angle formula. + double t = (90.0 - *thetap)*D2R; + zeco = t*t/2.0; + } + x0 = 0.0; + y0 = 2.0; + break; + } + + double omega, tau; + double xf = 0.0; + double yf = 0.0; + if (xi != 0.0 || eta != 0.0) { + if (-xi > fabs(eta)) { + omega = eta/xi; + tau = 1.0 + omega*omega; + xf = -sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); + yf = (xf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); + } else if (xi > fabs(eta)) { + omega = eta/xi; + tau = 1.0 + omega*omega; + xf = sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); + yf = (xf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); + } else if (-eta >= fabs(xi)) { + omega = xi/eta; + tau = 1.0 + omega*omega; + yf = -sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); + xf = (yf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); + } else if (eta >= fabs(xi)) { + omega = xi/eta; + tau = 1.0 + omega*omega; + yf = sqrt(zeco/(1.0 - 1.0/sqrt(1.0+tau))); + xf = (yf/15.0)*(atand(omega) - asind(omega/sqrt(tau+tau))); + } + } + + int istat = 0; + if (fabs(xf) > 1.0) { + if (fabs(xf) > 1.0+tol) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("qscs2x"); + } + xf = copysign(1.0, xf); + } + if (fabs(yf) > 1.0) { + if (fabs(yf) > 1.0+tol) { + istat = 1; + if (!status) status = PRJERR_BAD_WORLD_SET("qscs2x"); + } + yf = copysign(1.0, yf); + } + + *xp = prj->w[0]*(xf + x0) - prj->x0; + *yp = prj->w[0]*(yf + y0) - prj->y0; + *statp = istat; + } + } + + return status; +} + +/*============================================================================ +* HPX: HEALPix projection. +* +* Given: +* prj->pv[1] H - the number of facets in longitude. +* prj->pv[2] K - the number of facets in latitude +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag HPX +* prj->code "HPX" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->m True if H is odd. +* prj->n True if K is odd. +* prj->w[0] r0*(pi/180) +* prj->w[1] (180/pi)/r0 +* prj->w[2] (K-1)/K +* prj->w[3] 90*K/H +* prj->w[4] (K+1)/2 +* prj->w[5] 90*(K-1)/H +* prj->w[6] 180/H +* prj->w[7] H/360 +* prj->w[8] r0*(pi/180)*(90*K/H) +* prj->w[9] r0*(pi/180)*(180/H) +* prj->prjx2s Pointer to hpxx2s(). +* prj->prjs2x Pointer to hpxs2x(). +*===========================================================================*/ + +int hpxset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -HPX) return 0; + + strcpy(prj->code, "HPX"); + + if (undefined(prj->pv[1])) prj->pv[1] = 4.0; + if (undefined(prj->pv[2])) prj->pv[2] = 3.0; + + strcpy(prj->name, "HEALPix"); + prj->category = HEALPIX; + prj->pvrange = 102; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->pv[1] <= 0.0 || prj->pv[2] <= 0.0) { + return PRJERR_BAD_PARAM_SET("hpxset"); + } + + prj->m = ((int)(prj->pv[1]+0.5))%2; + prj->n = ((int)(prj->pv[2]+0.5))%2; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = R2D/prj->r0; + } + + prj->w[2] = (prj->pv[2] - 1.0) / prj->pv[2]; + prj->w[3] = 90.0 * prj->pv[2] / prj->pv[1]; + prj->w[4] = (prj->pv[2] + 1.0) / 2.0; + prj->w[5] = 90.0 * (prj->pv[2] - 1.0) / prj->pv[1]; + prj->w[6] = 180.0 / prj->pv[1]; + prj->w[7] = prj->pv[1] / 360.0; + prj->w[8] = prj->w[3] * prj->w[0]; + prj->w[9] = prj->w[6] * prj->w[0]; + + prj->prjx2s = hpxx2s; + prj->prjs2x = hpxs2x; + + prj->flag = (prj->flag == 1) ? -HPX : HPX; + + return prjoff(prj, 0.0, 0.0); +} + +//---------------------------------------------------------------------------- + +int hpxx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != HPX) { + if ((status = hpxset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double s = prj->w[1] * (*xp + prj->x0); + // x_c for K odd or theta > 0. + double t; + t = -180.0 + (2.0 * floor((*xp + 180.0) * prj->w[7]) + 1.0) * prj->w[6]; + t = prj->w[1] * (*xp - t); + + double *phip = phi + rowoff; + double *thetap = theta + rowoff; + for (int iy = 0; iy < my; iy++) { + // theta[] is used to hold (x - x_c). + *phip = s; + *thetap = t; + phip += rowlen; + thetap += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + + double slim = prj->w[6] + 1e-12; + double ylim = prj->w[9] * prj->w[4]; + + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yr = prj->w[1]*(*yp + prj->y0); + double absy = fabs(yr); + + int istat = 0; + if (absy <= prj->w[5]) { + // Equatorial regime. + double t = asind(yr/prj->w[3]); + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + *thetap = t; + *statp = 0; + } + + } else if (absy <= ylim) { + // Polar regime. + int offset = (prj->n || *yp > 0.0) ? 0 : 1; + + double sigma = prj->w[4] - absy / prj->w[6]; + + double s, t; + if (sigma == 0.0) { + s = 1e9; + t = 90.0; + + } else { + t = 1.0 - sigma*sigma/prj->pv[2]; + if (t < -1.0) { + s = 0.0; + t = 0.0; + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("hpxx2s"); + } else { + s = 1.0/sigma; + t = asind(t); + } + } + if (*yp < 0.0) t = -t; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + if (offset) { + // Offset the southern polar half-facets for even K. + int h = (int)floor(*phip / prj->w[6]) + prj->m; + if (h%2) { + *thetap -= prj->w[6]; + } else { + *thetap += prj->w[6]; + } + } + + // Recall that theta[] holds (x - x_c). + double r = s * *thetap; + + // Bounds checking. + if (prj->bounds&2) { + if (slim <= fabs(r)) { + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("hpxx2s"); + } + } + + if (r != 0.0) r -= *thetap; + *phip += r; + *thetap = t; + *statp = istat; + } + + } else { + // Beyond latitude range. + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + } + if (!status) status = PRJERR_BAD_PIX_SET("hpxx2s"); + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-12, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("hpxx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int hpxs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != HPX) { + if ((status = hpxset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + double xi = prj->w[0] * (*phip) - prj->x0; + + // phi_c for K odd or theta > 0. + double t; + t = -180.0 + (2.0*floor((*phip+180.0) * prj->w[7]) + 1.0) * prj->w[6]; + t = prj->w[0] * (*phip - t); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + // y[] is used to hold (phi - phi_c). + *xp = xi; + *yp = t; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe = sind(*thetap); + double abssin = fabs(sinthe); + + double eta; + if (abssin <= prj->w[2]) { + // Equatorial regime. + eta = prj->w[8] * sinthe - prj->y0; + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + *yp = eta; + *statp = 0; + } + + } else { + // Polar regime. + int offset = (prj->n || *thetap > 0.0) ? 0 : 1; + + double sigma = sqrt(prj->pv[2]*(1.0 - abssin)); + double xi = sigma - 1.0; + + eta = prj->w[9] * (prj->w[4] - sigma); + if (*thetap < 0) eta = -eta; + eta -= prj->y0; + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + if (offset) { + // Offset the southern polar half-facets for even K. + int h = (int)floor((*xp + prj->x0) / prj->w[9]) + prj->m; + if (h%2) { + *yp -= prj->w[9]; + } else { + *yp += prj->w[9]; + } + } + + // Recall that y[] holds (phi - phi_c). + *xp += *yp * xi; + *yp = eta; + *statp = 0; + + // Put the phi = 180 meridian in the expected place. + if (180.0 < *xp) *xp = 360.0 - *xp; + } + } + } + + return 0; +} + +/*============================================================================ +* XPH: HEALPix polar, aka "butterfly" projection. +* +* Given and/or returned: +* prj->r0 Reset to 180/pi if 0. +* prj->phi0 Reset to 0.0 if undefined. +* prj->theta0 Reset to 0.0 if undefined. +* +* Returned: +* prj->flag XPH +* prj->code "XPH" +* prj->x0 Fiducial offset in x. +* prj->y0 Fiducial offset in y. +* prj->w[0] r0*(pi/180)/sqrt(2) +* prj->w[1] (180/pi)/r0/sqrt(2) +* prj->w[2] 2/3 +* prj->w[3] tol (= 1e-4) +* prj->w[4] sqrt(2/3)*(180/pi) +* prj->w[5] 90 - tol*sqrt(2/3)*(180/pi) +* prj->w[6] sqrt(3/2)*(pi/180) +* prj->prjx2s Pointer to xphx2s(). +* prj->prjs2x Pointer to xphs2x(). +*===========================================================================*/ + +int xphset(struct prjprm *prj) + +{ + if (prj == 0x0) return PRJERR_NULL_POINTER; + if (prj->flag == -XPH) return 0; + + strcpy(prj->code, "XPH"); + + strcpy(prj->name, "butterfly"); + prj->category = HEALPIX; + prj->pvrange = 0; + prj->simplezen = 0; + prj->equiareal = 1; + prj->conformal = 0; + prj->global = 1; + prj->divergent = 0; + + if (prj->r0 == 0.0) { + prj->r0 = R2D; + prj->w[0] = 1.0; + prj->w[1] = 1.0; + } else { + prj->w[0] = prj->r0*D2R; + prj->w[1] = R2D/prj->r0; + } + + prj->w[0] /= sqrt(2.0); + prj->w[1] /= sqrt(2.0); + prj->w[2] = 2.0/3.0; + prj->w[3] = 1e-4; + prj->w[4] = sqrt(prj->w[2])*R2D; + prj->w[5] = 90.0 - prj->w[3]*prj->w[4]; + prj->w[6] = sqrt(1.5)*D2R; + + prj->prjx2s = xphx2s; + prj->prjs2x = xphs2x; + + prj->flag = (prj->flag == 1) ? -XPH : XPH; + + return prjoff(prj, 0.0, 90.0); +} + +//---------------------------------------------------------------------------- + +int xphx2s( + struct prjprm *prj, + int nx, + int ny, + int sxy, + int spt, + const double x[], + const double y[], + double phi[], + double theta[], + int stat[]) + +{ + const double tol = 1.0e-12; + + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != XPH) { + if ((status = xphset(prj))) return status; + } + + int mx, my; + if (ny > 0) { + mx = nx; + my = ny; + } else { + mx = 1; + my = 1; + ny = nx; + } + + status = 0; + + + // Do x dependence. + const double *xp = x; + int rowoff = 0; + int rowlen = nx*spt; + for (int ix = 0; ix < nx; ix++, rowoff += spt, xp += sxy) { + double xr = (*xp + prj->x0)*prj->w[1]; + + double *phip = phi + rowoff; + for (int iy = 0; iy < my; iy++) { + *phip = xr; + phip += rowlen; + } + } + + + // Do y dependence. + const double *yp = y; + double *phip = phi; + double *thetap = theta; + int *statp = stat; + for (int iy = 0; iy < ny; iy++, yp += sxy) { + double yr = (*yp + prj->y0)*prj->w[1]; + + for (int ix = 0; ix < mx; ix++, phip += spt, thetap += spt, statp++) { + double xr = *phip; + + double xi1, eta1; + if (xr <= 0.0 && 0.0 < yr) { + xi1 = -xr - yr; + eta1 = xr - yr; + *phip = -180.0; + } else if (xr < 0.0 && yr <= 0.0) { + xi1 = xr - yr; + eta1 = xr + yr; + *phip = -90.0; + } else if (0.0 <= xr && yr < 0.0) { + xi1 = xr + yr; + eta1 = -xr + yr; + *phip = 0.0; + } else { + xi1 = -xr + yr; + eta1 = -xr - yr; + *phip = 90.0; + } + + double xi = xi1 + 45.0; + double eta = eta1 + 90.0; + double abseta = fabs(eta); + + if (abseta <= 90.0) { + if (abseta <= 45.0) { + // Equatorial regime. + *phip += xi; + *thetap = asind(eta/67.5); + int istat = 0; + + // Bounds checking. + if (prj->bounds&2) { + if (45.0+tol < fabs(xi1)) { + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("xphx2s"); + } + } + + *statp = istat; + + } else { + // Polar regime. + double sigma = (90.0 - abseta) / 45.0; + + // Ensure an exact result for points on the boundary. + if (xr == 0.0) { + if (yr <= 0.0) { + *phip = 0.0; + } else { + *phip = 180.0; + } + } else if (yr == 0.0) { + if (xr < 0.0) { + *phip = -90.0; + } else { + *phip = 90.0; + } + } else { + *phip += 45.0 + xi1/sigma; + } + + if (sigma < prj->w[3]) { + *thetap = 90.0 - sigma*prj->w[4]; + } else { + *thetap = asind(1.0 - sigma*sigma/3.0); + } + if (eta < 0.0) *thetap = -(*thetap); + + // Bounds checking. + int istat = 0; + if (prj->bounds&2) { + if (eta < -45.0 && eta+90.0+tol < fabs(xi1)) { + istat = 1; + if (!status) status = PRJERR_BAD_PIX_SET("xphx2s"); + } + } + + *statp = istat; + } + + } else { + // Beyond latitude range. + *phip = 0.0; + *thetap = 0.0; + *statp = 1; + if (!status) status = PRJERR_BAD_PIX_SET("xphx2s"); + } + } + } + + + // Do bounds checking on the native coordinates. + if (prj->bounds&4 && prjbchk(1.0e-12, nx, my, spt, phi, theta, stat)) { + if (!status) status = PRJERR_BAD_PIX_SET("xphx2s"); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int xphs2x( + struct prjprm *prj, + int nphi, + int ntheta, + int spt, + int sxy, + const double phi[], + const double theta[], + double x[], + double y[], + int stat[]) + +{ + // Initialize. + if (prj == 0x0) return PRJERR_NULL_POINTER; + + int status; + if (abs(prj->flag) != XPH) { + if ((status = xphset(prj))) return status; + } + + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Do phi dependence. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sxy; + + double chi, psi; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sxy, phip += spt) { + chi = *phip; + if (180.0 <= fabs(chi)) { + chi = fmod(chi, 360.0); + if (chi < -180.0) { + chi += 360.0; + } else if (180.0 <= chi) { + chi -= 360.0; + } + } + + // phi is also recomputed from chi to avoid rounding problems. + chi += 180.0; + psi = fmod(chi, 90.0); + + double *xp = x + rowoff; + double *yp = y + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + // y[] is used to hold phi (rounded). + *xp = psi; + *yp = chi - 180.0; + xp += rowlen; + yp += rowlen; + } + } + + + // Do theta dependence. + const double *thetap = theta; + double *xp = x; + double *yp = y; + int *statp = stat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe = sind(*thetap); + double abssin = fabs(sinthe); + + for (int iphi = 0; iphi < mphi; iphi++, xp += sxy, yp += sxy, statp++) { + double xi, eta; + if (abssin <= prj->w[2]) { + // Equatorial regime. + xi = *xp; + eta = 67.5 * sinthe; + + } else { + // Polar regime. + double sigma; + if (*thetap < prj->w[5]) { + sigma = sqrt(3.0*(1.0 - abssin)); + } else { + sigma = (90.0 - *thetap)*prj->w[6]; + } + + xi = 45.0 + (*xp - 45.0)*sigma; + eta = 45.0 * (2.0 - sigma); + if (*thetap < 0.0) eta = -eta; + } + + xi -= 45.0; + eta -= 90.0; + + // Recall that y[] holds phi. + if (*yp < -90.0) { + *xp = prj->w[0]*(-xi + eta) - prj->x0; + *yp = prj->w[0]*(-xi - eta) - prj->y0; + + } else if (*yp < 0.0) { + *xp = prj->w[0]*(+xi + eta) - prj->x0; + *yp = prj->w[0]*(-xi + eta) - prj->y0; + + } else if (*yp < 90.0) { + *xp = prj->w[0]*( xi - eta) - prj->x0; + *yp = prj->w[0]*( xi + eta) - prj->y0; + + } else { + *xp = prj->w[0]*(-xi - eta) - prj->x0; + *yp = prj->w[0]*( xi - eta) - prj->y0; + } + + *statp = 0; + } + } + + return 0; +} diff --git a/deps/wcslib/C/prj.h b/deps/wcslib/C/prj.h new file mode 100644 index 0000000..c0713bb --- /dev/null +++ b/deps/wcslib/C/prj.h @@ -0,0 +1,919 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: prj.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the prj routines +* --------------------------- +* Routines in this suite implement the spherical map projections defined by +* the FITS World Coordinate System (WCS) standard, as described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of celestial coordinates in FITS", += Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (WCS Paper II) += += "Mapping on the HEALPix grid", += Calabretta, M.R., & Roukema, B.F. 2007, MNRAS, 381, 865 (WCS Paper V) += += "Representing the 'Butterfly' Projection in FITS -- Projection Code XPH", += Calabretta, M.R., & Lowe, S.R. 2013, PASA, 30, e050 (WCS Paper VI) +* +* These routines are based on the prjprm struct which contains all information +* needed for the computations. The struct contains some members that must be +* set by the user, and others that are maintained by these routines, somewhat +* like a C++ class but with no encapsulation. +* +* Routine prjini() is provided to initialize the prjprm struct with default +* values, prjfree() reclaims any memory that may have been allocated to store +* an error message, prjsize() computes its total size including allocated +* memory, prjenq() returns information about the state of the struct, and +* prjprt() prints its contents. +* +* prjperr() prints the error message(s) (if any) stored in a prjprm struct. +* prjbchk() performs bounds checking on native spherical coordinates. +* +* Setup routines for each projection with names of the form ???set(), where +* "???" is the down-cased three-letter projection code, compute intermediate +* values in the prjprm struct from parameters in it that were supplied by the +* user. The struct always needs to be set by the projection's setup routine +* but that need not be called explicitly - refer to the explanation of +* prjprm::flag. +* +* Each map projection is implemented via separate functions for the spherical +* projection, ???s2x(), and deprojection, ???x2s(). +* +* A set of driver routines, prjset(), prjx2s(), and prjs2x(), provides a +* generic interface to the specific projection routines which they invoke +* via pointers-to-functions stored in the prjprm struct. +* +* In summary, the routines are: +* - prjini() Initialization routine for the prjprm struct. +* - prjfree() Reclaim memory allocated for error messages. +* - prjsize() Compute total size of a prjprm struct. +* - prjprt() Print a prjprm struct. +* - prjperr() Print error message (if any). +* - prjbchk() Bounds checking on native coordinates. +* +* - prjset(), prjx2s(), prjs2x(): Generic driver routines +* +* - azpset(), azpx2s(), azps2x(): AZP (zenithal/azimuthal perspective) +* - szpset(), szpx2s(), szps2x(): SZP (slant zenithal perspective) +* - tanset(), tanx2s(), tans2x(): TAN (gnomonic) +* - stgset(), stgx2s(), stgs2x(): STG (stereographic) +* - sinset(), sinx2s(), sins2x(): SIN (orthographic/synthesis) +* - arcset(), arcx2s(), arcs2x(): ARC (zenithal/azimuthal equidistant) +* - zpnset(), zpnx2s(), zpns2x(): ZPN (zenithal/azimuthal polynomial) +* - zeaset(), zeax2s(), zeas2x(): ZEA (zenithal/azimuthal equal area) +* - airset(), airx2s(), airs2x(): AIR (Airy) +* - cypset(), cypx2s(), cyps2x(): CYP (cylindrical perspective) +* - ceaset(), ceax2s(), ceas2x(): CEA (cylindrical equal area) +* - carset(), carx2s(), cars2x(): CAR (Plate carree) +* - merset(), merx2s(), mers2x(): MER (Mercator) +* - sflset(), sflx2s(), sfls2x(): SFL (Sanson-Flamsteed) +* - parset(), parx2s(), pars2x(): PAR (parabolic) +* - molset(), molx2s(), mols2x(): MOL (Mollweide) +* - aitset(), aitx2s(), aits2x(): AIT (Hammer-Aitoff) +* - copset(), copx2s(), cops2x(): COP (conic perspective) +* - coeset(), coex2s(), coes2x(): COE (conic equal area) +* - codset(), codx2s(), cods2x(): COD (conic equidistant) +* - cooset(), coox2s(), coos2x(): COO (conic orthomorphic) +* - bonset(), bonx2s(), bons2x(): BON (Bonne) +* - pcoset(), pcox2s(), pcos2x(): PCO (polyconic) +* - tscset(), tscx2s(), tscs2x(): TSC (tangential spherical cube) +* - cscset(), cscx2s(), cscs2x(): CSC (COBE spherical cube) +* - qscset(), qscx2s(), qscs2x(): QSC (quadrilateralized spherical cube) +* - hpxset(), hpxx2s(), hpxs2x(): HPX (HEALPix) +* - xphset(), xphx2s(), xphs2x(): XPH (HEALPix polar, aka "butterfly") +* +* Argument checking (projection routines): +* ---------------------------------------- +* The values of phi and theta (the native longitude and latitude) normally lie +* in the range [-180,180] for phi, and [-90,90] for theta. However, all +* projection routines will accept any value of phi and will not normalize it. +* +* The projection routines do not explicitly check that theta lies within the +* range [-90,90]. They do check for any value of theta that produces an +* invalid argument to the projection equations (e.g. leading to division by +* zero). The projection routines for AZP, SZP, TAN, SIN, ZPN, and COP also +* return error 2 if (phi,theta) corresponds to the overlapped (far) side of +* the projection but also return the corresponding value of (x,y). This +* strict bounds checking may be relaxed at any time by setting +* prjprm::bounds%2 to 0 (rather than 1); the projections need not be +* reinitialized. +* +* Argument checking (deprojection routines): +* ------------------------------------------ +* Error checking on the projected coordinates (x,y) is limited to that +* required to ascertain whether a solution exists. Where a solution does +* exist, an optional check is made that the value of phi and theta obtained +* lie within the ranges [-180,180] for phi, and [-90,90] for theta. This +* check, performed by prjbchk(), is enabled by default. It may be disabled by +* setting prjprm::bounds%4 to 0 (rather than 1); the projections need not be +* reinitialized. +* +* Accuracy: +* --------- +* No warranty is given for the accuracy of these routines (refer to the +* copyright notice); intending users must satisfy for themselves their +* adequacy for the intended purpose. However, closure to a precision of at +* least 1E-10 degree of longitude and latitude has been verified for typical +* projection parameters on the 1 degree graticule of native longitude and +* latitude (to within 5 degrees of any latitude where the projection may +* diverge). Refer to the tprj1.c and tprj2.c test routines that accompany +* this software. +* +* +* prjini() - Default constructor for the prjprm struct +* ---------------------------------------------------- +* prjini() sets all members of a prjprm struct to default values. It should +* be used to initialize every prjprm struct. +* +* PLEASE NOTE: If the prjprm struct has already been initialized, then before +* reinitializing, it prjfree() should be used to free any memory that may have +* been allocated to store an error message. A memory leak may otherwise +* result. +* +* Returned: +* prj struct prjprm* +* Projection parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* +* +* prjfree() - Destructor for the prjprm struct +* -------------------------------------------- +* prjfree() frees any memory that may have been allocated to store an error +* message in the prjprm struct. +* +* Given: +* prj struct prjprm* +* Projection parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* +* +* prjsize() - Compute the size of a prjprm struct +* ----------------------------------------------- +* prjsize() computes the full size of a prjprm struct, including allocated +* memory. +* +* Given: +* prj const struct prjprm* +* Projection parameters. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct prjprm). The second element +* is the total allocated size, in bytes. This figure +* includes memory allocated for the constituent struct, +* prjprm::err. +* +* It is not an error for the struct not to have been set +* up via prjset(). +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* prjenq() - enquire about the state of a prjprm struct +* ----------------------------------------------------- +* prjenq() may be used to obtain information about the state of a prjprm +* struct. The function returns a true/false answer for the enquiry asked. +* +* Given: +* prj const struct prjprm* +* Projection parameters. +* +* enquiry int Enquiry according to the following parameters: +* PRJENQ_SET: the struct has been set up by prjset(). +* PRJENQ_BYP: the struct is in bypass mode (see +* prjset()). +* +* Function return value: +* int Enquiry result: +* 0: No. +* 1: Yes. +* +* +* prjprt() - Print routine for the prjprm struct +* ---------------------------------------------- +* prjprt() prints the contents of a prjprm struct using wcsprintf(). Mainly +* intended for diagnostic purposes. +* +* Given: +* prj const struct prjprm* +* Projection parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* +* +* prjperr() - Print error messages from a prjprm struct +* ----------------------------------------------------- +* prjperr() prints the error message(s) (if any) stored in a prjprm struct. +* If there are no errors then nothing is printed. It uses wcserr_prt(), q.v. +* +* Given: +* prj const struct prjprm* +* Projection parameters. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* +* +* prjbchk() - Bounds checking on native coordinates +* ------------------------------------------------- +* prjbchk() performs bounds checking on native spherical coordinates. As +* returned by the deprojection (x2s) routines, native longitude is expected +* to lie in the closed interval [-180,180], with latitude in [-90,90]. +* +* A tolerance may be specified to provide a small allowance for numerical +* imprecision. Values that lie outside the allowed range by not more than +* the specified tolerance will be adjusted back into range. +* +* If prjprm::bounds&4 is set, as it is by prjini(), then prjbchk() will be +* invoked automatically by the Cartesian-to-spherical deprojection (x2s) +* routines with an appropriate tolerance set for each projection. +* +* Given: +* tol double Tolerance for the bounds check [deg]. +* +* nphi, +* ntheta int Vector lengths. +* +* spt int Vector stride. +* +* Given and returned: +* phi,theta double[] Native longitude and latitude (phi,theta) [deg]. +* +* Returned: +* stat int[] Status value for each vector element: +* 0: Valid value of (phi,theta). +* 1: Invalid value. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: One or more of the (phi,theta) coordinates +* were, invalid, as indicated by the stat vector. +* +* +* prjset() - Generic setup routine for the prjprm struct +* ------------------------------------------------------ +* prjset() sets up a prjprm struct according to information supplied within +* it. +* +* The one important distinction between prjset() and the setup routines for +* the specific projections is that the projection code must be defined in the +* prjprm struct in order for prjset() to identify the required projection. +* Once prjset() has initialized the prjprm struct, prjx2s() and prjs2x() use +* the pointers to the specific projection and deprojection routines contained +* therein. +* +* Note that this routine need not be called directly; it will be invoked by +* prjx2s() and prjs2x() if prj.flag is anything other than a predefined magic +* value. +* +* prjset() normally operates regardless of the value of prjprm::flag; i.e. +* even if a struct was previously set up it will be reset unconditionally. +* However, a prjprm struct may be put into "bypass" mode by invoking prjset() +* initially with prjprm::flag == 1 (rather than 0). prjset() will return +* immediately if invoked on a struct in that state. To take a struct out of +* bypass mode, simply reset prjprm::flag to zero. See also prjenq(). +* +* Given and returned: +* prj struct prjprm* +* Projection parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* 2: Invalid projection parameters. +* +* For returns > 1, a detailed error message is set in +* prjprm::err if enabled, see wcserr_enable(). +* +* +* prjx2s() - Generic Cartesian-to-spherical deprojection +* ------------------------------------------------------ +* Deproject Cartesian (x,y) coordinates in the plane of projection to native +* spherical coordinates (phi,theta). +* +* The projection is that specified by prjprm::code. +* +* Given and returned: +* prj struct prjprm* +* Projection parameters. +* +* Given: +* nx,ny int Vector lengths. +* +* sxy,spt int Vector strides. +* +* x,y const double[] +* Projected coordinates. +* +* Returned: +* phi,theta double[] Longitude and latitude (phi,theta) of the projected +* point in native spherical coordinates [deg]. +* +* stat int[] Status value for each vector element: +* 0: Success. +* 1: Invalid value of (x,y). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* 2: Invalid projection parameters. +* 3: One or more of the (x,y) coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* prjprm::err if enabled, see wcserr_enable(). +* +* +* prjs2x() - Generic spherical-to-Cartesian projection +* ---------------------------------------------------- +* Project native spherical coordinates (phi,theta) to Cartesian (x,y) +* coordinates in the plane of projection. +* +* The projection is that specified by prjprm::code. +* +* Given and returned: +* prj struct prjprm* +* Projection parameters. +* +* Given: +* nphi, +* ntheta int Vector lengths. +* +* spt,sxy int Vector strides. +* +* phi,theta const double[] +* Longitude and latitude (phi,theta) of the projected +* point in native spherical coordinates [deg]. +* +* Returned: +* x,y double[] Projected coordinates. +* +* stat int[] Status value for each vector element: +* 0: Success. +* 1: Invalid value of (phi,theta). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* 2: Invalid projection parameters. +* 4: One or more of the (phi,theta) coordinates +* were, invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* prjprm::err if enabled, see wcserr_enable(). +* +* +* ???set() - Specific setup routines for the prjprm struct +* -------------------------------------------------------- +* Set up a prjprm struct for a particular projection according to information +* supplied within it. +* +* Given and returned: +* prj struct prjprm* +* Projection parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* 2: Invalid projection parameters. +* +* For returns > 1, a detailed error message is set in +* prjprm::err if enabled, see wcserr_enable(). +* +* +* ???x2s() - Specific Cartesian-to-spherical deprojection routines +* ---------------------------------------------------------------- +* Transform (x,y) coordinates in the plane of projection to native spherical +* coordinates (phi,theta). +* +* Given and returned: +* prj struct prjprm* +* Projection parameters. +* +* Given: +* nx,ny int Vector lengths. +* +* sxy,spt int Vector strides. +* +* x,y const double[] +* Projected coordinates. +* +* Returned: +* phi,theta double[] Longitude and latitude of the projected point in +* native spherical coordinates [deg]. +* +* stat int[] Status value for each vector element: +* 0: Success. +* 1: Invalid value of (x,y). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* 2: Invalid projection parameters. +* 3: One or more of the (x,y) coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* prjprm::err if enabled, see wcserr_enable(). +* +* +* ???s2x() - Specific spherical-to-Cartesian projection routines +*--------------------------------------------------------------- +* Transform native spherical coordinates (phi,theta) to (x,y) coordinates in +* the plane of projection. +* +* Given and returned: +* prj struct prjprm* +* Projection parameters. +* +* Given: +* nphi, +* ntheta int Vector lengths. +* +* spt,sxy int Vector strides. +* +* phi,theta const double[] +* Longitude and latitude of the projected point in +* native spherical coordinates [deg]. +* +* Returned: +* x,y double[] Projected coordinates. +* +* stat int[] Status value for each vector element: +* 0: Success. +* 1: Invalid value of (phi,theta). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null prjprm pointer passed. +* 2: Invalid projection parameters. +* 4: One or more of the (phi,theta) coordinates +* were, invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* prjprm::err if enabled, see wcserr_enable(). +* +* +* prjprm struct - Projection parameters +* ------------------------------------- +* The prjprm struct contains all information needed to project or deproject +* native spherical coordinates. It consists of certain members that must be +* set by the user ("given") and others that are set by the WCSLIB routines +* ("returned"). Some of the latter are supplied for informational purposes +* while others are for internal use only. +* +* int flag +* (Given and returned) This flag must be set to zero (or 1, see prjset()) +* whenever any of the following prjprm members are set or changed: +* +* - prjprm::code, +* - prjprm::r0, +* - prjprm::pv[], +* - prjprm::phi0, +* - prjprm::theta0. +* +* This signals the initialization routine (prjset() or ???set()) to +* recompute the returned members of the prjprm struct. flag will then be +* reset to indicate that this has been done. +* +* Note that flag need not be reset when prjprm::bounds is changed. +* +* char code[4] +* (Given) Three-letter projection code defined by the FITS standard. +* +* double r0 +* (Given) The radius of the generating sphere for the projection, a linear +* scaling parameter. If this is zero, it will be reset to its default +* value of 180/pi (the value for FITS WCS). +* +* double pv[30] +* (Given) Projection parameters. These correspond to the PVi_ma keywords +* in FITS, so pv[0] is PVi_0a, pv[1] is PVi_1a, etc., where i denotes the +* latitude-like axis. Many projections use pv[1] (PVi_1a), some also use +* pv[2] (PVi_2a) and SZP uses pv[3] (PVi_3a). ZPN is currently the only +* projection that uses any of the others. +* +* Usage of the pv[] array as it applies to each projection is described in +* the prologue to each trio of projection routines in prj.c. +* +* double phi0 +* (Given) The native longitude, phi_0 [deg], and ... +* double theta0 +* (Given) ... the native latitude, theta_0 [deg], of the reference point, +* i.e. the point (x,y) = (0,0). If undefined (set to a magic value by +* prjini()) the initialization routine will set this to a +* projection-specific default. +* +* int bounds +* (Given) Controls bounds checking. If bounds&1 then enable strict bounds +* checking for the spherical-to-Cartesian (s2x) transformation for the +* AZP, SZP, TAN, SIN, ZPN, and COP projections. If bounds&2 then enable +* strict bounds checking for the Cartesian-to-spherical transformation +* (x2s) for the HPX and XPH projections. If bounds&4 then the Cartesian- +* to-spherical transformations (x2s) will invoke prjbchk() to perform +* bounds checking on the computed native coordinates, with a tolerance set +* to suit each projection. bounds is set to 7 by prjini() by default +* which enables all checks. Zero it to disable all checking. +* +* It is not necessary to reset the prjprm struct (via prjset() or +* ???set()) when prjprm::bounds is changed. +* +* The remaining members of the prjprm struct are maintained by the setup +* routines and must not be modified elsewhere: +* +* char name[40] +* (Returned) Long name of the projection. +* +* Provided for information only, not used by the projection routines. +* +* int category +* (Returned) Projection category matching the value of the relevant global +* variable: +* +* - ZENITHAL, +* - CYLINDRICAL, +* - PSEUDOCYLINDRICAL, +* - CONVENTIONAL, +* - CONIC, +* - POLYCONIC, +* - QUADCUBE, and +* - HEALPIX. +* +* The category name may be identified via the prj_categories character +* array, e.g. +* += struct prjprm prj; += ... += printf("%s\n", prj_categories[prj.category]); +* +* Provided for information only, not used by the projection routines. +* +* int pvrange +* (Returned) Range of projection parameter indices: 100 times the first +* allowed index plus the number of parameters, e.g. TAN is 0 (no +* parameters), SZP is 103 (1 to 3), and ZPN is 30 (0 to 29). +* +* Provided for information only, not used by the projection routines. +* +* int simplezen +* (Returned) True if the projection is a radially-symmetric zenithal +* projection. +* +* Provided for information only, not used by the projection routines. +* +* int equiareal +* (Returned) True if the projection is equal area. +* +* Provided for information only, not used by the projection routines. +* +* int conformal +* (Returned) True if the projection is conformal. +* +* Provided for information only, not used by the projection routines. +* +* int global +* (Returned) True if the projection can represent the whole sphere in a +* finite, non-overlapped mapping. +* +* Provided for information only, not used by the projection routines. +* +* int divergent +* (Returned) True if the projection diverges in latitude. +* +* Provided for information only, not used by the projection routines. +* +* double x0 +* (Returned) The offset in x, and ... +* double y0 +* (Returned) ... the offset in y used to force (x,y) = (0,0) at +* (phi_0,theta_0). +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* void *padding +* (An unused variable inserted for alignment purposes only.) +* +* double w[10] +* (For internal use only.) Intermediate floating-point values derived from +* the projection parameters by prjset(), cached here to save recomputation. +* +* Usage of the w[] array as it applies to each projection is described in +* the prologue to each trio of projection routines in prj.c. +* +* int m, n +* (For internal use only.) Intermediate integer values set by prjset() +* (used only for the ZPN and HPX projections). +* +* int (*prjx2s)(PRJX2S_ARGS) +* (For internal use only.) Pointer to the spherical projection ... +* int (*prjs2x)(PRJ_ARGS) +* (For internal use only.) ... and deprojection routines. +* +* +* Global variable: const char *prj_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_PROJ +#define WCSLIB_PROJ + +#ifdef __cplusplus +extern "C" { +#endif + +enum prjenq_enum { + PRJENQ_SET = 2, // prjprm struct has been set up. + PRJENQ_BYP = 4, // prjprm struct is in bypass mode. +}; + +// Total number of projection parameters; 0 to PVN-1. +#define PVN 30 + +extern const char *prj_errmsg[]; + +enum prj_errmsg_enum { + PRJERR_SUCCESS = 0, // Success. + PRJERR_NULL_POINTER = 1, // Null prjprm pointer passed. + PRJERR_BAD_PARAM = 2, // Invalid projection parameters. + PRJERR_BAD_PIX = 3, // One or more of the (x, y) coordinates were + // invalid. + PRJERR_BAD_WORLD = 4 // One or more of the (phi, theta) coordinates + // were invalid. +}; + +extern const int CONIC, CONVENTIONAL, CYLINDRICAL, POLYCONIC, + PSEUDOCYLINDRICAL, QUADCUBE, ZENITHAL, HEALPIX; +extern const char prj_categories[9][32]; + +extern const int prj_ncode; +extern const char prj_codes[28][4]; + +#ifdef PRJX2S_ARGS +#undef PRJX2S_ARGS +#endif + +#ifdef PRJS2X_ARGS +#undef PRJS2X_ARGS +#endif + +// For use in declaring deprojection function prototypes. +#define PRJX2S_ARGS struct prjprm *prj, int nx, int ny, int sxy, int spt, \ +const double x[], const double y[], double phi[], double theta[], int stat[] + +// For use in declaring projection function prototypes. +#define PRJS2X_ARGS struct prjprm *prj, int nx, int ny, int sxy, int spt, \ +const double phi[], const double theta[], double x[], double y[], int stat[] + + +struct prjprm { + // Initialization flag (see the prologue above). + //-------------------------------------------------------------------------- + int flag; // Set to zero to force initialization. + + // Parameters to be provided (see the prologue above). + //-------------------------------------------------------------------------- + char code[4]; // Three-letter projection code. + double r0; // Radius of the generating sphere. + double pv[PVN]; // Projection parameters. + double phi0, theta0; // Fiducial native coordinates. + int bounds; // Controls bounds checking. + + // Information derived from the parameters supplied. + //-------------------------------------------------------------------------- + char name[40]; // Projection name. + int category; // Projection category. + int pvrange; // Range of projection parameter indices. + int simplezen; // Is it a simple zenithal projection? + int equiareal; // Is it an equal area projection? + int conformal; // Is it a conformal projection? + int global; // Can it map the whole sphere? + int divergent; // Does the projection diverge in latitude? + double x0, y0; // Fiducial offsets. + + // Error messaging, if enabled. + //-------------------------------------------------------------------------- + struct wcserr *err; + + //-------------------------------------------------------------------------- + // Private - the remainder are for internal use. + //-------------------------------------------------------------------------- + void *padding; // (Dummy inserted for alignment purposes.) + + double w[10]; // Intermediate values set by prjset(). + int m, n; // Intermediate values set by prjset(). + + int (*prjx2s)(PRJX2S_ARGS); // Pointers to the spherical projection and + int (*prjs2x)(PRJS2X_ARGS); // deprojection functions. +}; + +// Size of the prjprm struct in int units, used by the Fortran wrappers. +#define PRJLEN (sizeof(struct prjprm)/sizeof(int)) + + +int prjini(struct prjprm *prj); + +int prjfree(struct prjprm *prj); + +int prjsize(const struct prjprm *prj, int sizes[2]); + +int prjenq(const struct prjprm *prj, int enquiry); + +int prjprt(const struct prjprm *prj); + +int prjperr(const struct prjprm *prj, const char *prefix); + +int prjbchk(double tol, int nphi, int ntheta, int spt, double phi[], + double theta[], int stat[]); + +// Use the preprocessor to help declare function prototypes (see above). +int prjset(struct prjprm *prj); +int prjx2s(PRJX2S_ARGS); +int prjs2x(PRJS2X_ARGS); + +int azpset(struct prjprm *prj); +int azpx2s(PRJX2S_ARGS); +int azps2x(PRJS2X_ARGS); + +int szpset(struct prjprm *prj); +int szpx2s(PRJX2S_ARGS); +int szps2x(PRJS2X_ARGS); + +int tanset(struct prjprm *prj); +int tanx2s(PRJX2S_ARGS); +int tans2x(PRJS2X_ARGS); + +int stgset(struct prjprm *prj); +int stgx2s(PRJX2S_ARGS); +int stgs2x(PRJS2X_ARGS); + +int sinset(struct prjprm *prj); +int sinx2s(PRJX2S_ARGS); +int sins2x(PRJS2X_ARGS); + +int arcset(struct prjprm *prj); +int arcx2s(PRJX2S_ARGS); +int arcs2x(PRJS2X_ARGS); + +int zpnset(struct prjprm *prj); +int zpnx2s(PRJX2S_ARGS); +int zpns2x(PRJS2X_ARGS); + +int zeaset(struct prjprm *prj); +int zeax2s(PRJX2S_ARGS); +int zeas2x(PRJS2X_ARGS); + +int airset(struct prjprm *prj); +int airx2s(PRJX2S_ARGS); +int airs2x(PRJS2X_ARGS); + +int cypset(struct prjprm *prj); +int cypx2s(PRJX2S_ARGS); +int cyps2x(PRJS2X_ARGS); + +int ceaset(struct prjprm *prj); +int ceax2s(PRJX2S_ARGS); +int ceas2x(PRJS2X_ARGS); + +int carset(struct prjprm *prj); +int carx2s(PRJX2S_ARGS); +int cars2x(PRJS2X_ARGS); + +int merset(struct prjprm *prj); +int merx2s(PRJX2S_ARGS); +int mers2x(PRJS2X_ARGS); + +int sflset(struct prjprm *prj); +int sflx2s(PRJX2S_ARGS); +int sfls2x(PRJS2X_ARGS); + +int parset(struct prjprm *prj); +int parx2s(PRJX2S_ARGS); +int pars2x(PRJS2X_ARGS); + +int molset(struct prjprm *prj); +int molx2s(PRJX2S_ARGS); +int mols2x(PRJS2X_ARGS); + +int aitset(struct prjprm *prj); +int aitx2s(PRJX2S_ARGS); +int aits2x(PRJS2X_ARGS); + +int copset(struct prjprm *prj); +int copx2s(PRJX2S_ARGS); +int cops2x(PRJS2X_ARGS); + +int coeset(struct prjprm *prj); +int coex2s(PRJX2S_ARGS); +int coes2x(PRJS2X_ARGS); + +int codset(struct prjprm *prj); +int codx2s(PRJX2S_ARGS); +int cods2x(PRJS2X_ARGS); + +int cooset(struct prjprm *prj); +int coox2s(PRJX2S_ARGS); +int coos2x(PRJS2X_ARGS); + +int bonset(struct prjprm *prj); +int bonx2s(PRJX2S_ARGS); +int bons2x(PRJS2X_ARGS); + +int pcoset(struct prjprm *prj); +int pcox2s(PRJX2S_ARGS); +int pcos2x(PRJS2X_ARGS); + +int tscset(struct prjprm *prj); +int tscx2s(PRJX2S_ARGS); +int tscs2x(PRJS2X_ARGS); + +int cscset(struct prjprm *prj); +int cscx2s(PRJX2S_ARGS); +int cscs2x(PRJS2X_ARGS); + +int qscset(struct prjprm *prj); +int qscx2s(PRJX2S_ARGS); +int qscs2x(PRJS2X_ARGS); + +int hpxset(struct prjprm *prj); +int hpxx2s(PRJX2S_ARGS); +int hpxs2x(PRJS2X_ARGS); + +int xphset(struct prjprm *prj); +int xphx2s(PRJX2S_ARGS); +int xphs2x(PRJS2X_ARGS); + + +// Deprecated. +#define prjini_errmsg prj_errmsg +#define prjprt_errmsg prj_errmsg +#define prjset_errmsg prj_errmsg +#define prjx2s_errmsg prj_errmsg +#define prjs2x_errmsg prj_errmsg + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_PROJ diff --git a/deps/wcslib/C/spc.c b/deps/wcslib/C/spc.c new file mode 100644 index 0000000..0589418 --- /dev/null +++ b/deps/wcslib/C/spc.c @@ -0,0 +1,1463 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: spc.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcstrig.h" +#include "wcsutil.h" +#include "spc.h" +#include "spx.h" + +// Spectral algorithm codes. +#define F2S 100; // Axis linear in frequency. +#define W2S 200; // Axis linear in vacuum wavelengths. +#define A2S 300; // Axis linear in air wavelengths. +#define V2S 400; // Axis linear in velocity. +#define GRI 500; // Grism in vacuum. +#define GRA 600; // Grism in air. + +// S-type spectral variables. +#define FREQ 0; // Frequency-like. +#define AFRQ 1; // Frequency-like. +#define ENER 2; // Frequency-like. +#define WAVN 3; // Frequency-like. +#define VRAD 4; // Frequency-like. +#define WAVE 10; // Vacuum wavelength-like. +#define VOPT 11; // Vacuum wavelength-like. +#define ZOPT 12; // Vacuum wavelength-like. +#define AWAV 20; // Air wavelength-like. +#define VELO 30; // Velocity-like. +#define BETA 31; // Velocity-like. + + +// Map status return value to message. +const char *spc_errmsg[] = { + "Success", + "Null spcprm pointer passed", + "Invalid spectral parameters", + "One or more of x coordinates were invalid", + "One or more of the spec coordinates were invalid"}; + +// Map error returns for lower-level routines. SPXERR_BAD_INSPEC_COORD +// maps to either SPCERR_BAD_X or SPCERR_BAD_SPEC depending on context. +const int spc_spxerr[] = { + SPCERR_SUCCESS, // 0: SPXERR_SUCCESS + SPCERR_NULL_POINTER, // 1: SPXERR_NULL_POINTER + SPCERR_BAD_SPEC_PARAMS, // 2: SPXERR_BAD_SPEC_PARAMS + SPCERR_BAD_SPEC_PARAMS // 3: SPXERR_BAD_SPEC_VAR + // 4: SPXERR_BAD_INSPEC_COORD +}; + +// Convenience macro for invoking wcserr_set(). +#define SPC_ERRMSG(status) WCSERR_SET(status), spc_errmsg[status] + + +#define C 2.99792458e8 + +//---------------------------------------------------------------------------- + +int spcini(struct spcprm *spc) + +{ + if (spc == 0x0) return SPCERR_NULL_POINTER; + + memset(spc->type, 0, 8); + strcpy(spc->type, " "); + strcpy(spc->code, " "); + + spc->crval = UNDEFINED; + spc->restfrq = 0.0; + spc->restwav = 0.0; + + for (int k = 0; k < 7; k++) { + spc->pv[k] = UNDEFINED; + } + + for (int k = 0; k < 6; k++) { + spc->w[k] = 0.0; + } + + spc->isGrism = 0; + spc->padding1 = 0; + + spc->err = 0x0; + + spc->padding2 = 0x0; + spc->spxX2P = 0x0; + spc->spxP2S = 0x0; + spc->spxS2P = 0x0; + spc->spxP2X = 0x0; + + spc->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcfree(struct spcprm *spc) + +{ + if (spc == 0x0) return SPCERR_NULL_POINTER; + + wcserr_clear(&(spc->err)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcsize(const struct spcprm *spc, int sizes[2]) + +{ + if (spc == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct spcprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + // spcprm::err. + int exsizes[2]; + wcserr_size(spc->err, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcenq(const struct spcprm *spc, int enquiry) + +{ + // Initialize. + if (spc == 0x0) return SPCERR_NULL_POINTER; + + int absflag = abs(spc->flag); + int answer = 0; + + if (enquiry & SPCENQ_SET) { + if (absflag < 100 || 1000 < absflag) return 0; + answer = 1; + } + + if (enquiry & SPCENQ_BYP) { + if (spc->flag != 1 && !(-1000 < spc->flag && spc->flag < -100)) return 0; + answer = 1; + } + + return answer; +} + +//---------------------------------------------------------------------------- + +int spcprt(const struct spcprm *spc) + +{ + if (spc == 0x0) return SPCERR_NULL_POINTER; + + // Parameters supplied. + wcsprintf(" flag: %d\n", spc->flag); + wcsprintf(" type: \"%s\"\n", spc->type); + wcsprintf(" code: \"%s\"\n", spc->code); + if (undefined(spc->crval)) { + wcsprintf(" crval: UNDEFINED\n"); + } else { + wcsprintf(" crval: %#- 11.5g\n", spc->crval); + } + wcsprintf(" restfrq: %f\n", spc->restfrq); + wcsprintf(" restwav: %f\n", spc->restwav); + + wcsprintf(" pv:"); + if (spc->isGrism) { + for (int i = 0; i < 5; i++) { + if (undefined(spc->pv[i])) { + wcsprintf(" UNDEFINED "); + } else { + wcsprintf(" %#- 11.5g", spc->pv[i]); + } + } + wcsprintf("\n "); + for (int i = 5; i < 7; i++) { + if (undefined(spc->pv[i])) { + wcsprintf(" UNDEFINED "); + } else { + wcsprintf(" %#- 11.5g", spc->pv[i]); + } + } + wcsprintf("\n"); + + } else { + wcsprintf(" (not used)\n"); + } + + // Derived values. + wcsprintf(" w:"); + for (int i = 0; i < 3; i++) { + wcsprintf(" %#- 11.5g", spc->w[i]); + } + if (spc->isGrism) { + wcsprintf("\n "); + for (int i = 3; i < 6; i++) { + wcsprintf(" %#- 11.5g", spc->w[i]); + } + wcsprintf("\n"); + } else { + wcsprintf(" (remainder unused)\n"); + } + + wcsprintf(" isGrism: %d\n", spc->isGrism); + + // Error handling. + WCSPRINTF_PTR(" err: ", spc->err, "\n"); + if (spc->err) { + wcserr_prt(spc->err, " "); + } + + // Pointers to spectral functions. + char hext[32]; + wcsprintf(" spxX2P: %s\n", + wcsutil_fptr2str((void (*)(void))spc->spxX2P, hext)); + wcsprintf(" spxP2S: %s\n", + wcsutil_fptr2str((void (*)(void))spc->spxP2S, hext)); + wcsprintf(" spxS2P: %s\n", + wcsutil_fptr2str((void (*)(void))spc->spxS2P, hext)); + wcsprintf(" spxP2X: %s\n", + wcsutil_fptr2str((void (*)(void))spc->spxP2X, hext)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcperr(const struct spcprm *spc, const char *prefix) + +{ + if (spc == 0x0) return SPCERR_NULL_POINTER; + + if (spc->err) { + wcserr_prt(spc->err, prefix); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcset(struct spcprm *spc) + +{ + static const char *function = "spcset"; + + if (spc == 0x0) return SPCERR_NULL_POINTER; + if (spc->flag < 0) return 0; + struct wcserr **err = &(spc->err); + + if (undefined(spc->crval)) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Spectral crval is undefined"); + } + + memset((spc->type)+4, 0, 4); + spc->code[3] = '\0'; + wcsutil_blank_fill(4, spc->type); + wcsutil_blank_fill(3, spc->code); + spc->w[0] = 0.0; + + + // Analyse the spectral axis type. + char ctype[9]; + memset(ctype, 0, 9); + memcpy(ctype, spc->type, 4); + if (*(spc->code) != ' ') { + sprintf(ctype+4, "-%s", spc->code); + } + + double restfrq = spc->restfrq; + double restwav = spc->restwav; + char ptype, xtype; + int restreq, status; + double crvalX, dXdS; + if ((status = spcspxe(ctype, spc->crval, restfrq, restwav, &ptype, &xtype, + &restreq, &crvalX, &dXdS, &(spc->err)))) { + return status; + } + + // Satisfy rest frequency/wavelength requirements. + if (restreq) { + if (restreq == 3 && restfrq == 0.0 && restwav == 0.0) { + // VRAD-V2F, VOPT-V2W, and ZOPT-V2W require the rest frequency or + // wavelength for the S-P and P-X transformations but not for S-X + // so supply a phoney value. + restwav = 1.0; + } + + if (restfrq == 0.0) { + restfrq = C/restwav; + } else { + restwav = C/restfrq; + } + + if (ptype == 'F') { + spc->w[0] = restfrq; + } else if (ptype != 'V') { + spc->w[0] = restwav; + } else { + if (xtype == 'F') { + spc->w[0] = restfrq; + } else { + spc->w[0] = restwav; + } + } + } + + spc->w[1] = crvalX; + spc->w[2] = dXdS; + + + // Set pointers-to-functions for the linear part of the transformation. + int flag = 0; + if (ptype == 'F') { + if (strcmp(spc->type, "FREQ") == 0) { + // Frequency. + flag = FREQ; + spc->spxP2S = 0x0; + spc->spxS2P = 0x0; + + } else if (strcmp(spc->type, "AFRQ") == 0) { + // Angular frequency. + flag = AFRQ; + spc->spxP2S = freqafrq; + spc->spxS2P = afrqfreq; + + } else if (strcmp(spc->type, "ENER") == 0) { + // Photon energy. + flag = ENER; + spc->spxP2S = freqener; + spc->spxS2P = enerfreq; + + } else if (strcmp(spc->type, "WAVN") == 0) { + // Wave number. + flag = WAVN; + spc->spxP2S = freqwavn; + spc->spxS2P = wavnfreq; + + } else if (strcmp(spc->type, "VRAD") == 0) { + // Radio velocity. + flag = VRAD; + spc->spxP2S = freqvrad; + spc->spxS2P = vradfreq; + } + + } else if (ptype == 'W') { + if (strcmp(spc->type, "WAVE") == 0) { + // Vacuum wavelengths. + flag = WAVE; + spc->spxP2S = 0x0; + spc->spxS2P = 0x0; + + } else if (strcmp(spc->type, "VOPT") == 0) { + // Optical velocity. + flag = VOPT; + spc->spxP2S = wavevopt; + spc->spxS2P = voptwave; + + } else if (strcmp(spc->type, "ZOPT") == 0) { + // Redshift. + flag = ZOPT; + spc->spxP2S = wavezopt; + spc->spxS2P = zoptwave; + } + + } else if (ptype == 'A') { + if (strcmp(spc->type, "AWAV") == 0) { + // Air wavelengths. + flag = AWAV; + spc->spxP2S = 0x0; + spc->spxS2P = 0x0; + } + + } else if (ptype == 'V') { + if (strcmp(spc->type, "VELO") == 0) { + // Relativistic velocity. + flag = VELO; + spc->spxP2S = 0x0; + spc->spxS2P = 0x0; + + } else if (strcmp(spc->type, "BETA") == 0) { + // Velocity ratio (v/c). + flag = BETA; + spc->spxP2S = velobeta; + spc->spxS2P = betavelo; + } + } + + + // Set pointers-to-functions for the non-linear part of the spectral + // transformation. + spc->isGrism = 0; + if (xtype == 'F') { + // Axis is linear in frequency. + if (ptype == 'F') { + spc->spxX2P = 0x0; + spc->spxP2X = 0x0; + + } else if (ptype == 'W') { + spc->spxX2P = freqwave; + spc->spxP2X = wavefreq; + + } else if (ptype == 'A') { + spc->spxX2P = freqawav; + spc->spxP2X = awavfreq; + + } else if (ptype == 'V') { + spc->spxX2P = freqvelo; + spc->spxP2X = velofreq; + } + + flag += F2S; + + } else if (xtype == 'W' || xtype == 'w') { + // Axis is linear in vacuum wavelengths. + if (ptype == 'F') { + spc->spxX2P = wavefreq; + spc->spxP2X = freqwave; + + } else if (ptype == 'W') { + spc->spxX2P = 0x0; + spc->spxP2X = 0x0; + + } else if (ptype == 'A') { + spc->spxX2P = waveawav; + spc->spxP2X = awavwave; + + } else if (ptype == 'V') { + spc->spxX2P = wavevelo; + spc->spxP2X = velowave; + } + + if (xtype == 'W') { + flag += W2S; + } else { + // Grism in vacuum. + spc->isGrism = 1; + flag += GRI; + } + + } else if (xtype == 'A' || xtype == 'a') { + // Axis is linear in air wavelengths. + if (ptype == 'F') { + spc->spxX2P = awavfreq; + spc->spxP2X = freqawav; + + } else if (ptype == 'W') { + spc->spxX2P = awavwave; + spc->spxP2X = waveawav; + + } else if (ptype == 'A') { + spc->spxX2P = 0x0; + spc->spxP2X = 0x0; + + } else if (ptype == 'V') { + spc->spxX2P = awavvelo; + spc->spxP2X = veloawav; + } + + if (xtype == 'A') { + flag += A2S; + } else { + // Grism in air. + spc->isGrism = 2; + flag += GRA; + } + + } else if (xtype == 'V') { + // Axis is linear in relativistic velocity. + if (ptype == 'F') { + spc->spxX2P = velofreq; + spc->spxP2X = freqvelo; + + } else if (ptype == 'W') { + spc->spxX2P = velowave; + spc->spxP2X = wavevelo; + + } else if (ptype == 'A') { + spc->spxX2P = veloawav; + spc->spxP2X = awavvelo; + + } else if (ptype == 'V') { + spc->spxX2P = 0x0; + spc->spxP2X = 0x0; + } + + flag += V2S; + } + + + // Check for grism axes. + if (spc->isGrism) { + // Axis is linear in "grism parameter"; work in wavelength. + double lambda_r = crvalX; + + // Set defaults. + if (undefined(spc->pv[0])) spc->pv[0] = 0.0; + if (undefined(spc->pv[1])) spc->pv[1] = 0.0; + if (undefined(spc->pv[2])) spc->pv[2] = 0.0; + if (undefined(spc->pv[3])) spc->pv[3] = 1.0; + if (undefined(spc->pv[4])) spc->pv[4] = 0.0; + if (undefined(spc->pv[5])) spc->pv[5] = 0.0; + if (undefined(spc->pv[6])) spc->pv[6] = 0.0; + + // Compute intermediaries. + double G = spc->pv[0]; + double m = spc->pv[1]; + double alpha = spc->pv[2]; + double n_r = spc->pv[3]; + double dn_r = spc->pv[4]; + double epsilon = spc->pv[5]; + double theta = spc->pv[6]; + + double t = G*m/cosd(epsilon); + double beta_r = asind(t*lambda_r - n_r*sind(alpha)); + + t -= dn_r*sind(alpha); + + spc->w[1] = -tand(theta); + spc->w[2] *= t / (cosd(beta_r)*cosd(theta)*cosd(theta)); + spc->w[3] = beta_r + theta; + spc->w[4] = (n_r - dn_r*lambda_r)*sind(alpha); + spc->w[5] = 1.0 / t; + } + + spc->flag = (spc->flag == 1) ? -flag : flag; + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcx2s( + struct spcprm *spc, + int nx, + int sx, + int sspec, + const double x[], + double spec[], + int stat[]) + +{ + static const char *function = "spcx2s"; + + // Initialize. + if (spc == 0x0) return SPCERR_NULL_POINTER; + struct wcserr **err = &(spc->err); + + int status = 0; + if (abs(spc->flag) < 100) { + if ((status = spcset(spc))) return status; + } + + // Convert intermediate world coordinate x to X. + const double *xp = x; + double *specp = spec; + int *statp = stat; + for (int ix = 0; ix < nx; ix++, xp += sx, specp += sspec, statp++) { + *specp = spc->w[1] + (*xp)*spc->w[2]; + *statp = 0; + } + + // If X is the grism parameter then convert it to wavelength. + if (spc->isGrism) { + specp = spec; + for (int ix = 0; ix < nx; ix++, specp += sspec) { + double beta = atand(*specp) + spc->w[3]; + *specp = (sind(beta) + spc->w[4]) * spc->w[5]; + } + } + + // Apply the non-linear step of the algorithm chain to convert the + // X-type spectral variable to P-type intermediate spectral variable. + if (spc->spxX2P) { + int statX2P; + if ((statX2P = spc->spxX2P(spc->w[0], nx, sspec, sspec, spec, spec, + stat))) { + if (statX2P == SPXERR_BAD_INSPEC_COORD) { + status = SPCERR_BAD_X; + } else if (statX2P == SPXERR_BAD_SPEC_PARAMS) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral parameters: Frequency or wavelength is 0"); + } else { + return wcserr_set(SPC_ERRMSG(spc_spxerr[statX2P])); + } + } + } + + // Apply the linear step of the algorithm chain to convert P-type + // intermediate spectral variable to the required S-type variable. + if (spc->spxP2S) { + int statP2S; + if ((statP2S = spc->spxP2S(spc->w[0], nx, sspec, sspec, spec, spec, + stat))) { + if (statP2S == SPXERR_BAD_INSPEC_COORD) { + status = SPCERR_BAD_X; + } else if (statP2S == SPXERR_BAD_SPEC_PARAMS) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral parameters: Frequency or wavelength is 0"); + } else { + return wcserr_set(SPC_ERRMSG(spc_spxerr[statP2S])); + } + } + } + + if (status) { + wcserr_set(SPC_ERRMSG(status)); + } + return status; +} + +//---------------------------------------------------------------------------- + +int spcs2x( + struct spcprm *spc, + int nspec, + int sspec, + int sx, + const double spec[], + double x[], + int stat[]) + +{ + static const char *function = "spcs2x"; + + // Initialize. + if (spc == 0x0) return SPCERR_NULL_POINTER; + struct wcserr **err = &(spc->err); + + int status = 0; + if (abs(spc->flag) < 100) { + if ((status = spcset(spc))) return status; + } + + // Apply the linear step of the algorithm chain to convert the S-type + // spectral variable to P-type intermediate spectral variable. + if (spc->spxS2P) { + int statS2P; + if ((statS2P = spc->spxS2P(spc->w[0], nspec, sspec, sx, spec, x, stat))) { + if (statS2P == SPXERR_BAD_INSPEC_COORD) { + status = SPCERR_BAD_SPEC; + } else if (statS2P == SPXERR_BAD_SPEC_PARAMS) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral parameters: Frequency or wavelength is 0"); + } else { + return wcserr_set(SPC_ERRMSG(spc_spxerr[statS2P])); + } + } + + } else { + // Just a copy. + double *xp = x; + const double *specp = spec; + int *statp = stat; + for (int ispec = 0; ispec < nspec; ispec++, specp += sspec, xp += sx, + statp++) { + *xp = *specp; + *statp = 0; + } + } + + + // Apply the non-linear step of the algorithm chain to convert P-type + // intermediate spectral variable to X-type spectral variable. + if (spc->spxP2X) { + int statP2X; + if ((statP2X = spc->spxP2X(spc->w[0], nspec, sx, sx, x, x, stat))) { + if (statP2X == SPCERR_BAD_SPEC) { + status = SPCERR_BAD_SPEC; + } else if (statP2X == SPXERR_BAD_SPEC_PARAMS) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral parameters: Frequency or wavelength is 0"); + } else { + return wcserr_set(SPC_ERRMSG(spc_spxerr[statP2X])); + } + } + } + + if (spc->isGrism) { + // Convert X-type spectral variable (wavelength) to grism parameter. + double *xp = x; + int *statp = stat; + for (int ispec = 0; ispec < nspec; ispec++, xp += sx, statp++) { + if (*statp) continue; + + double s = *xp/spc->w[5] - spc->w[4]; + if (fabs(s) <= 1.0) { + double beta = asind(s); + *xp = tand(beta - spc->w[3]); + } else { + *statp = 1; + } + } + } + + + // Convert X-type spectral variable to intermediate world coordinate x. + double *xp = x; + int *statp = stat; + for (int ispec = 0; ispec < nspec; ispec++, xp += sx, statp++) { + if (*statp) continue; + + *xp -= spc->w[1]; + *xp /= spc->w[2]; + } + + if (status) { + wcserr_set(SPC_ERRMSG(status)); + } + return status; +} + +//---------------------------------------------------------------------------- + +int spctyp( + const char ctypei[9], + char stype[], + char scode[], + char sname[], + char units[], + char *ptype, + char *xtype, + int *restreq) + +{ + return spctype( + ctypei, stype, scode, sname, units, ptype, xtype, restreq, NULL); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spctype( + const char ctypei[9], + char stype[], + char scode[], + char sname[], + char units[], + char *ptype, + char *xtype, + int *restreq, + struct wcserr **err) + +{ + static const char *function = "spctype"; + + // Compiler balm for premature return on error. + if (ptype) *ptype = ' '; + if (xtype) *xtype = ' '; + if (restreq) *restreq = 0; + + if (err) *err = 0x0; + + // Copy with blank padding. + char ctype[9]; + sprintf(ctype, "%-8.8s", ctypei); + ctype[8] = '\0'; + + char sname_t[32], units_t[8], ptype_t; + int restreq_t = 0; + // Validate the S-type spectral variable. + if (strncmp(ctype, "FREQ", 4) == 0) { + strcpy(sname_t, "Frequency"); + strcpy(units_t, "Hz"); + ptype_t = 'F'; + } else if (strncmp(ctype, "AFRQ", 4) == 0) { + strcpy(sname_t, "Angular frequency"); + strcpy(units_t, "rad/s"); + ptype_t = 'F'; + } else if (strncmp(ctype, "ENER", 4) == 0) { + strcpy(sname_t, "Photon energy"); + strcpy(units_t, "J"); + ptype_t = 'F'; + } else if (strncmp(ctype, "WAVN", 4) == 0) { + strcpy(sname_t, "Wavenumber"); + strcpy(units_t, "/m"); + ptype_t = 'F'; + } else if (strncmp(ctype, "VRAD", 4) == 0) { + strcpy(sname_t, "Radio velocity"); + strcpy(units_t, "m/s"); + ptype_t = 'F'; + restreq_t = 1; + } else if (strncmp(ctype, "WAVE", 4) == 0) { + strcpy(sname_t, "Vacuum wavelength"); + strcpy(units_t, "m"); + ptype_t = 'W'; + } else if (strncmp(ctype, "VOPT", 4) == 0) { + strcpy(sname_t, "Optical velocity"); + strcpy(units_t, "m/s"); + ptype_t = 'W'; + restreq_t = 1; + } else if (strncmp(ctype, "ZOPT", 4) == 0) { + strcpy(sname_t, "Redshift"); + strcpy(units_t, ""); + ptype_t = 'W'; + restreq_t = 1; + } else if (strncmp(ctype, "AWAV", 4) == 0) { + strcpy(sname_t, "Air wavelength"); + strcpy(units_t, "m"); + ptype_t = 'A'; + } else if (strncmp(ctype, "VELO", 4) == 0) { + strcpy(sname_t, "Relativistic velocity"); + strcpy(units_t, "m/s"); + ptype_t = 'V'; + } else if (strncmp(ctype, "BETA", 4) == 0) { + strcpy(sname_t, "Velocity ratio (v/c)"); + strcpy(units_t, ""); + ptype_t = 'V'; + } else { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Unknown spectral type '%s'", ctype); + } + + + // Determine X-type and validate the spectral algorithm code. + char xtype_t; + if ((xtype_t = ctype[5]) == ' ') { + // The algorithm code must be completely blank. + if (strcmp(ctype+4, " ") != 0) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral algorithm '%s'", ctype+4); + } + + xtype_t = ptype_t; + + } else if (ctype[4] != '-') { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral type '%s'", ctype); + + } else if (strcmp(ctype+5, "LOG") == 0 || strcmp(ctype+5, "TAB") == 0) { + // Logarithmic or tabular axis, not linear in any spectral type. + + } else if (xtype_t == 'G') { + // Validate the algorithm code. + if (ctype[6] != 'R') { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral algorithm '%s'", xtype_t); + } + + // Grism coordinates... + if (ctype[7] == 'I') { + // ...in vacuum. + xtype_t = 'w'; + } else if (ctype[7] == 'A') { + // ...in air. + xtype_t = 'a'; + } else { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral algorithm '%s'", xtype_t); + } + + } else if (ctype[6] != '2') { + // Algorithm code has invalid syntax. + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Invalid spectral algorithm syntax '%s'", xtype_t); + } else if (ctype[7] != ptype_t && ctype[7] != '?') { + // The P-, and S-type variables are inconsistent. + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "In spectral type '%s', P- and S-type variables are inconsistent", + ctype); + + } else if (ctype[7] == ctype[5]) { + // Degenerate algorithm code. + sprintf(ctype+4, " "); + } + + + // Rest freq/wavelength required for transformation between P and X? + if (strchr("FWAwa", (int)xtype_t)) { + if (ptype_t == 'V') { + restreq_t += 2; + } + } else if (xtype_t == 'V') { + if (strchr("FWAwa", (int)ptype_t)) { + restreq_t += 2; + } + } else if (strchr("LT", (int)xtype_t) == 0) { + // Invalid X-type variable code. + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "In spectral type '%s', invalid X-type variable code", ctype); + } + + + // Copy results. + if (stype) { + memcpy(stype, ctype, 4); + stype[4] = '\0'; + } + if (scode) strcpy(scode, ctype+5); + if (sname) strcpy(sname, sname_t); + if (units) strcpy(units, units_t); + if (ptype) *ptype = ptype_t; + if (xtype) *xtype = xtype_t; + if (restreq) *restreq = restreq_t; + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcspx( + const char ctypeS[9], + double crvalS, + double restfrq, + double restwav, + char *ptype, + char *xtype, + int *restreq, + double *crvalX, + double *dXdS) + +{ + return spcspxe(ctypeS, crvalS, restfrq, restwav, ptype, xtype, restreq, + crvalX, dXdS, 0x0); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spcspxe( + const char ctypeS[9], + double crvalS, + double restfrq, + double restwav, + char *ptype, + char *xtype, + int *restreq, + double *crvalX, + double *dXdS, + struct wcserr **err) + +{ + static const char *function = "spcspxe"; + + // Analyse the spectral axis code. + char stype[5], scode[4]; + int status; + if ((status = spctype(ctypeS, stype, scode, 0x0, 0x0, ptype, xtype, restreq, + err))) { + return status; + } + + if (strchr("LT", (int)(*xtype))) { + // Can't handle logarithmic or tabular coordinates. + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Can't handle logarithmic or tabular coordinates"); + } + + // Do we have rest frequency and/or wavelength as required? + if ((*restreq)%3 && restfrq == 0.0 && restwav == 0.0) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Missing required rest frequency or wavelength"); + } + + // Compute all spectral parameters and their derivatives. + char type[8]; + strcpy(type, stype); + + struct spxprm spx; + spx.err = (err ? *err : 0x0); + if ((status = specx(type, crvalS, restfrq, restwav, &spx))) { + status = spc_spxerr[status]; + if (err) { + if ((*err = spx.err)) { + (*err)->status = status; + } + } else { + wcserr_clear(&(spx.err)); + } + return status; + } + + + // Transform S-P (linear) and P-X (non-linear). + double dPdS = 0.0; + double dXdP = 0.0; + if (*ptype == 'F') { + if (strcmp(stype, "FREQ") == 0) { + dPdS = 1.0; + } else if (strcmp(stype, "AFRQ") == 0) { + dPdS = spx.dfreqafrq; + } else if (strcmp(stype, "ENER") == 0) { + dPdS = spx.dfreqener; + } else if (strcmp(stype, "WAVN") == 0) { + dPdS = spx.dfreqwavn; + } else if (strcmp(stype, "VRAD") == 0) { + dPdS = spx.dfreqvrad; + } + + if (*xtype == 'F') { + *crvalX = spx.freq; + dXdP = 1.0; + } else if (*xtype == 'W' || *xtype == 'w') { + *crvalX = spx.wave; + dXdP = spx.dwavefreq; + } else if (*xtype == 'A' || *xtype == 'a') { + *crvalX = spx.awav; + dXdP = spx.dawavfreq; + } else if (*xtype == 'V') { + *crvalX = spx.velo; + dXdP = spx.dvelofreq; + } + + } else if (*ptype == 'W' || *ptype == 'w') { + if (strcmp(stype, "WAVE") == 0) { + dPdS = 1.0; + } else if (strcmp(stype, "VOPT") == 0) { + dPdS = spx.dwavevopt; + } else if (strcmp(stype, "ZOPT") == 0) { + dPdS = spx.dwavezopt; + } + + if (*xtype == 'F') { + *crvalX = spx.freq; + dXdP = spx.dfreqwave; + } else if (*xtype == 'W' || *xtype == 'w') { + *crvalX = spx.wave; + dXdP = 1.0; + } else if (*xtype == 'A' || *xtype == 'a') { + *crvalX = spx.awav; + dXdP = spx.dawavwave; + } else if (*xtype == 'V') { + *crvalX = spx.velo; + dXdP = spx.dvelowave; + } + + } else if (*ptype == 'A' || *ptype == 'a') { + if (strcmp(stype, "AWAV") == 0) { + dPdS = 1.0; + } + + if (*xtype == 'F') { + *crvalX = spx.freq; + dXdP = spx.dfreqawav; + } else if (*xtype == 'W' || *xtype == 'w') { + *crvalX = spx.wave; + dXdP = spx.dwaveawav; + } else if (*xtype == 'A' || *xtype == 'a') { + *crvalX = spx.awav; + dXdP = 1.0; + } else if (*xtype == 'V') { + *crvalX = spx.velo; + dXdP = spx.dveloawav; + } + + } else if (*ptype == 'V') { + if (strcmp(stype, "VELO") == 0) { + dPdS = 1.0; + } else if (strcmp(stype, "BETA") == 0) { + dPdS = spx.dvelobeta; + } + + if (*xtype == 'F') { + *crvalX = spx.freq; + dXdP = spx.dfreqvelo; + } else if (*xtype == 'W' || *xtype == 'w') { + *crvalX = spx.wave; + dXdP = spx.dwavevelo; + } else if (*xtype == 'A' || *xtype == 'a') { + *crvalX = spx.awav; + dXdP = spx.dawavvelo; + } else if (*xtype == 'V') { + *crvalX = spx.velo; + dXdP = 1.0; + } + } + + *dXdS = dXdP * dPdS; + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcxps( + const char ctypeS[9], + double crvalX, + double restfrq, + double restwav, + char *ptype, + char *xtype, + int *restreq, + double *crvalS, + double *dSdX) + +{ + return spcxpse(ctypeS, crvalX, restfrq, restwav, ptype, xtype, restreq, + crvalS, dSdX, NULL); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spcxpse( + const char ctypeS[9], + double crvalX, + double restfrq, + double restwav, + char *ptype, + char *xtype, + int *restreq, + double *crvalS, + double *dSdX, + struct wcserr **err) + +{ + static const char *function = "spcxpse"; + + // Compiler balm for premature return on error. + *crvalS = 0.0; + *dSdX = 0.0; + + // Analyse the spectral axis type. + char stype[5], scode[4]; + int status; + if ((status = spctype(ctypeS, stype, scode, 0x0, 0x0, ptype, xtype, restreq, + err))) { + return status; + } + + if (strchr("LT", (int)(*xtype))) { + // Can't handle logarithmic or tabular coordinates. + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Can't handle logarithmic or tabular coordinates"); + } + + // Do we have rest frequency and/or wavelength as required? + if ((*restreq)%3 && restfrq == 0.0 && restwav == 0.0) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Missing required rest frequency or wavelength"); + } + + // Compute all spectral parameters and their derivatives. + char type[8]; + if (*xtype == 'F') { + strcpy(type, "FREQ"); + } else if (*xtype == 'W' || *xtype == 'w') { + strcpy(type, "WAVE"); + } else if (*xtype == 'A' || *xtype == 'a') { + strcpy(type, "AWAV"); + } else if (*xtype == 'V') { + strcpy(type, "VELO"); + } + + struct spxprm spx; + spx.err = (err ? *err : 0x0); + if (specx(type, crvalX, restfrq, restwav, &spx)) { + status = spc_spxerr[status]; + if (err) { + if ((*err = spx.err)) { + (*err)->status = status; + } + } else { + wcserr_clear(&(spx.err)); + } + return status; + } + + + // Transform X-P (non-linear) and P-S (linear). + double dPdX = 0.0; + double dSdP = 0.0; + if (*ptype == 'F') { + if (*xtype == 'F') { + dPdX = 1.0; + } else if (*xtype == 'W' || *xtype == 'w') { + dPdX = spx.dfreqwave; + } else if (*xtype == 'A' || *xtype == 'a') { + dPdX = spx.dfreqawav; + } else if (*xtype == 'V') { + dPdX = spx.dfreqvelo; + } + + if (strcmp(stype, "FREQ") == 0) { + *crvalS = spx.freq; + dSdP = 1.0; + } else if (strcmp(stype, "AFRQ") == 0) { + *crvalS = spx.afrq; + dSdP = spx.dafrqfreq; + } else if (strcmp(stype, "ENER") == 0) { + *crvalS = spx.ener; + dSdP = spx.denerfreq; + } else if (strcmp(stype, "WAVN") == 0) { + *crvalS = spx.wavn; + dSdP = spx.dwavnfreq; + } else if (strcmp(stype, "VRAD") == 0) { + *crvalS = spx.vrad; + dSdP = spx.dvradfreq; + } + + } else if (*ptype == 'W') { + if (*xtype == 'F') { + dPdX = spx.dwavefreq; + } else if (*xtype == 'W' || *xtype == 'w') { + dPdX = 1.0; + } else if (*xtype == 'A' || *xtype == 'a') { + dPdX = spx.dwaveawav; + } else if (*xtype == 'V') { + dPdX = spx.dwavevelo; + } + + if (strcmp(stype, "WAVE") == 0) { + *crvalS = spx.wave; + dSdP = 1.0; + } else if (strcmp(stype, "VOPT") == 0) { + *crvalS = spx.vopt; + dSdP = spx.dvoptwave; + } else if (strcmp(stype, "ZOPT") == 0) { + *crvalS = spx.zopt; + dSdP = spx.dzoptwave; + } + + } else if (*ptype == 'A') { + if (*xtype == 'F') { + dPdX = spx.dawavfreq; + } else if (*xtype == 'W' || *xtype == 'w') { + dPdX = spx.dawavwave; + } else if (*xtype == 'A' || *xtype == 'a') { + dPdX = 1.0; + } else if (*xtype == 'V') { + dPdX = spx.dawavvelo; + } + + if (strcmp(stype, "AWAV") == 0) { + *crvalS = spx.awav; + dSdP = 1.0; + } + + } else if (*ptype == 'V') { + if (*xtype == 'F') { + dPdX = spx.dvelofreq; + } else if (*xtype == 'W' || *xtype == 'w') { + dPdX = spx.dvelowave; + } else if (*xtype == 'A' || *xtype == 'a') { + dPdX = spx.dveloawav; + } else if (*xtype == 'V') { + dPdX = 1.0; + } + + if (strcmp(stype, "VELO") == 0) { + *crvalS = spx.velo; + dSdP = 1.0; + } else if (strcmp(stype, "BETA") == 0) { + *crvalS = spx.beta; + dSdP = spx.dbetavelo; + } + } + + *dSdX = dSdP * dPdX; + + return 0; +} + +//---------------------------------------------------------------------------- + +int spctrn( + const char ctypeS1[9], + double crvalS1, + double cdeltS1, + double restfrq, + double restwav, + char ctypeS2[9], + double *crvalS2, + double *cdeltS2) + +{ + return spctrne(ctypeS1, crvalS1, cdeltS1, restfrq, restwav, + ctypeS2, crvalS2, cdeltS2, NULL); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spctrne( + const char ctypeS1[9], + double crvalS1, + double cdeltS1, + double restfrq, + double restwav, + char ctypeS2[9], + double *crvalS2, + double *cdeltS2, + struct wcserr **err) + +{ + static const char *function = "spctrne"; + + // Compiler balm for premature return on error. + *crvalS2 = 0.0; + *cdeltS2 = 0.0; + + if (restfrq == 0.0 && restwav == 0.0) { + // If translating between two velocity-characteristic types, or between + // two wave-characteristic types, then we may need to set a dummy rest + // frequency or wavelength to perform the calculations. + char stype1[5], stype2[5]; + strncpy(stype1, ctypeS1, 4); + strncpy(stype2, ctypeS2, 4); + stype1[4] = stype2[4] = '\0'; + if ((strstr("VRAD VOPT ZOPT VELO BETA", stype1) != 0x0) == + (strstr("VRAD VOPT ZOPT VELO BETA", stype2) != 0x0)) { + restwav = 1.0; + } + } + + char ptype1, xtype1; + int status, restreq; + double crvalX, dXdS1; + if ((status = spcspxe(ctypeS1, crvalS1, restfrq, restwav, &ptype1, &xtype1, + &restreq, &crvalX, &dXdS1, err))) { + return status; + } + + // Pad with blanks. + char *cp; + ctypeS2[8] = '\0'; + for (cp = ctypeS2; *cp; cp++); + while (cp < ctypeS2+8) *(cp++) = ' '; + + if (strncmp(ctypeS2+5, "???", 3) == 0) { + // Set the algorithm code if required. + if (xtype1 == 'w') { + strcpy(ctypeS2+5, "GRI"); + } else if (xtype1 == 'a') { + strcpy(ctypeS2+5, "GRA"); + } else { + ctypeS2[5] = xtype1; + ctypeS2[6] = '2'; + } + } + + char ptype2, xtype2; + double dS2dX; + if ((status = spcxpse(ctypeS2, crvalX, restfrq, restwav, &ptype2, &xtype2, + &restreq, crvalS2, &dS2dX, err))) { + return status; + } + + // Are the X-types compatible? + if (xtype2 != xtype1) { + return wcserr_set(WCSERR_SET(SPCERR_BAD_SPEC_PARAMS), + "Incompatible X-types '%c' and '%c'", xtype1, xtype2); + } + + if (ctypeS2[7] == '?') { + if (ptype2 == xtype2) { + strcpy(ctypeS2+4, " "); + } else { + ctypeS2[7] = ptype2; + } + } + + *cdeltS2 = dS2dX * dXdS1 * cdeltS1; + + return 0; +} + +//---------------------------------------------------------------------------- + +int spcaips( + const char ctypeA[9], + int velref, + char ctype[9], + char specsys[9]) + +{ + const char *frames[] = {"LSRK", "BARYCENT", "TOPOCENT", + "LSRD", "GEOCENTR", "SOURCE", "GALACTOC"}; + + // Make a null-filled copy of ctypeA. + if (ctype != ctypeA) strncpy(ctype, ctypeA, 8); + ctype[8] = '\0'; + wcsutil_null_fill(9, ctype); + *specsys = '\0'; + + // Is it a recognized AIPS-convention type? + int status = SPCERR_NO_CHANGE; + if (strncmp(ctype, "FREQ", 4) == 0 || + strncmp(ctype, "VELO", 4) == 0 || + strncmp(ctype, "FELO", 4) == 0) { + // Look for the Doppler frame. + char *fcode; + if (*(fcode = ctype+4)) { + if (strcmp(fcode, "-LSR") == 0) { + strcpy(specsys, "LSRK"); + } else if (strcmp(fcode, "-HEL") == 0) { + strcpy(specsys, "BARYCENT"); + } else if (strcmp(fcode, "-OBS") == 0) { + strcpy(specsys, "TOPOCENT"); + } else { + // Not a recognized AIPS spectral type. + return SPCERR_NO_CHANGE; + } + + *fcode = '\0'; + status = 0; + } + + // VELREF takes precedence if present. + int ivf = velref%256; + if (0 < ivf && ivf <= 7) { + strcpy(specsys, frames[ivf-1]); + status = 0; + } else if (ivf) { + status = SPCERR_BAD_SPEC_PARAMS; + } + + if (strcmp(ctype, "VELO") == 0) { + // Check that we found an AIPS-convention Doppler frame. + if (*specsys) { + // 'VELO' in AIPS means radio or optical depending on VELREF. + ivf = velref/256; + if (ivf == 0) { + strcpy(ctype, "VOPT"); + } else if (ivf == 1) { + strcpy(ctype, "VRAD"); + } else { + status = SPCERR_BAD_SPEC_PARAMS; + } + } + } else if (strcmp(ctype, "FELO") == 0) { + // Uniform in frequency but expressed as an optical velocity (strictly + // we should also have found an AIPS-convention Doppler frame). + strcpy(ctype, "VOPT-F2W"); + if (status < 0) status = 0; + } + } + + return status; +} diff --git a/deps/wcslib/C/spc.h b/deps/wcslib/C/spc.h new file mode 100644 index 0000000..15688fa --- /dev/null +++ b/deps/wcslib/C/spc.h @@ -0,0 +1,987 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: spc.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the spc routines +* --------------------------- +* Routines in this suite implement the part of the FITS World Coordinate +* System (WCS) standard that deals with spectral coordinates, as described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of spectral coordinates in FITS", += Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. += 2006, A&A, 446, 747 (WCS Paper III) +* +* These routines define methods to be used for computing spectral world +* coordinates from intermediate world coordinates (a linear transformation +* of image pixel coordinates), and vice versa. They are based on the spcprm +* struct which contains all information needed for the computations. The +* struct contains some members that must be set by the user, and others that +* are maintained by these routines, somewhat like a C++ class but with no +* encapsulation. +* +* Routine spcini() is provided to initialize the spcprm struct with default +* values, spcfree() reclaims any memory that may have been allocated to store +* an error message, spcsize() computes its total size including allocated +* memory, spcenq() returns information about the state of the struct, and +* spcprt() prints its contents. +* +* spcperr() prints the error message(s) (if any) stored in a spcprm struct. +* +* A setup routine, spcset(), computes intermediate values in the spcprm struct +* from parameters in it that were supplied by the user. The struct always +* needs to be set up by spcset() but it need not be called explicitly - refer +* to the explanation of spcprm::flag. +* +* spcx2s() and spcs2x() implement the WCS spectral coordinate transformations. +* In fact, they are high level driver routines for the lower level spectral +* coordinate transformation routines described in spx.h. +* +* A number of routines are provided to aid in analysing or synthesising sets +* of FITS spectral axis keywords: +* +* - spctype() checks a spectral CTYPEia keyword for validity and returns +* information derived from it. +* +* - Spectral keyword analysis routine spcspxe() computes the values of the +* X-type spectral variables for the S-type variables supplied. +* +* - Spectral keyword synthesis routine, spcxpse(), computes the S-type +* variables for the X-types supplied. +* +* - Given a set of spectral keywords, a translation routine, spctrne(), +* produces the corresponding set for the specified spectral CTYPEia. +* +* - spcaips() translates AIPS-convention spectral CTYPEia and VELREF +* keyvalues. +* +* Spectral variable types - S, P, and X: +* -------------------------------------- +* A few words of explanation are necessary regarding spectral variable types +* in FITS. +* +* Every FITS spectral axis has three associated spectral variables: +* +* S-type: the spectral variable in which coordinates are to be +* expressed. Each S-type is encoded as four characters and is +* linearly related to one of four basic types as follows: +* +* F (Frequency): +* - 'FREQ': frequency +* - 'AFRQ': angular frequency +* - 'ENER': photon energy +* - 'WAVN': wave number +* - 'VRAD': radio velocity +* +* W (Wavelength in vacuo): +* - 'WAVE': wavelength +* - 'VOPT': optical velocity +* - 'ZOPT': redshift +* +* A (wavelength in Air): +* - 'AWAV': wavelength in air +* +* V (Velocity): +* - 'VELO': relativistic velocity +* - 'BETA': relativistic beta factor +* +* The S-type forms the first four characters of the CTYPEia keyvalue, +* and CRVALia and CDELTia are expressed as S-type quantities so that +* they provide a first-order approximation to the S-type variable at +* the reference point. +* +* Note that 'AFRQ', angular frequency, is additional to the variables +* defined in WCS Paper III. +* +* P-type: the basic spectral variable (F, W, A, or V) with which the +* S-type variable is associated (see list above). +* +* For non-grism axes, the P-type is encoded as the eighth character of +* CTYPEia. +* +* X-type: the basic spectral variable (F, W, A, or V) for which the +* spectral axis is linear, grisms excluded (see below). +* +* For non-grism axes, the X-type is encoded as the sixth character of +* CTYPEia. +* +* Grisms: Grism axes have normal S-, and P-types but the axis is linear, +* not in any spectral variable, but in a special "grism parameter". +* The X-type spectral variable is either W or A for grisms in vacuo or +* air respectively, but is encoded as 'w' or 'a' to indicate that an +* additional transformation is required to convert to or from the +* grism parameter. The spectral algorithm code for grisms also has a +* special encoding in CTYPEia, either 'GRI' (in vacuo) or 'GRA' (in air). +* +* In the algorithm chain, the non-linear transformation occurs between the +* X-type and the P-type variables; the transformation between P-type and +* S-type variables is always linear. +* +* When the P-type and X-type variables are the same, the spectral axis is +* linear in the S-type variable and the second four characters of CTYPEia +* are blank. This can never happen for grism axes. +* +* As an example, correlating radio spectrometers always produce spectra that +* are regularly gridded in frequency; a redshift scale on such a spectrum is +* non-linear. The required value of CTYPEia would be 'ZOPT-F2W', where the +* desired S-type is 'ZOPT' (redshift), the P-type is necessarily 'W' +* (wavelength), and the X-type is 'F' (frequency) by the nature of the +* instrument. +* +* Air-to-vacuum wavelength conversion: +* ------------------------------------ +* Please refer to the prologue of spx.h for important comments relating to the +* air-to-vacuum wavelength conversion. +* +* Argument checking: +* ------------------ +* The input spectral values are only checked for values that would result in +* floating point exceptions. In particular, negative frequencies and +* wavelengths are allowed, as are velocities greater than the speed of +* light. The same is true for the spectral parameters - rest frequency and +* wavelength. +* +* Accuracy: +* --------- +* No warranty is given for the accuracy of these routines (refer to the +* copyright notice); intending users must satisfy for themselves their +* adequacy for the intended purpose. However, closure effectively to within +* double precision rounding error was demonstrated by test routine tspc.c +* which accompanies this software. +* +* +* spcini() - Default constructor for the spcprm struct +* ---------------------------------------------------- +* spcini() sets all members of a spcprm struct to default values. It should +* be used to initialize every spcprm struct. +* +* PLEASE NOTE: If the spcprm struct has already been initialized, then before +* reinitializing, it spcfree() should be used to free any memory that may have +* been allocated to store an error message. A memory leak may otherwise +* result. +* +* Given and returned: +* spc struct spcprm* +* Spectral transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spcprm pointer passed. +* +* +* spcfree() - Destructor for the spcprm struct +* -------------------------------------------- +* spcfree() frees any memory that may have been allocated to store an error +* message in the spcprm struct. +* +* Given: +* spc struct spcprm* +* Spectral transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spcprm pointer passed. +* +* +* spcsize() - Compute the size of a spcprm struct +* ----------------------------------------------- +* spcsize() computes the full size of a spcprm struct, including allocated +* memory. +* +* Given: +* spc const struct spcprm* +* Spectral transformation parameters. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct spcprm). The second element +* is the total allocated size, in bytes. This figure +* includes memory allocated for the constituent struct, +* spcprm::err. +* +* It is not an error for the struct not to have been set +* up via spcset(). +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* spcenq() - enquire about the state of a spcprm struct +* ----------------------------------------------------- +* spcenq() may be used to obtain information about the state of a spcprm +* struct. The function returns a true/false answer for the enquiry asked. +* +* Given: +* spc const struct spcprm* +* Spectral transformation parameters. +* +* enquiry int Enquiry according to the following parameters: +* SPCENQ_MEM: memory in the struct is being managed by +* WCSLIB (see spcini()). +* SPCENQ_SET: the struct has been set up by spcset(). +* SPCENQ_BYP: the struct is in bypass mode (see +* spcset()). +* These may be combined by logical OR, e.g. +* SPCENQ_MEM | SPCENQ_SET. The enquiry result will be +* the logical AND of the individual results. +* +* Function return value: +* int Enquiry result: +* 0: No. +* 1: Yes. +* +* +* spcprt() - Print routine for the spcprm struct +* ---------------------------------------------- +* spcprt() prints the contents of a spcprm struct using wcsprintf(). Mainly +* intended for diagnostic purposes. +* +* Given: +* spc const struct spcprm* +* Spectral transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spcprm pointer passed. +* +* +* spcperr() - Print error messages from a spcprm struct +* ----------------------------------------------------- +* spcperr() prints the error message(s) (if any) stored in a spcprm struct. +* If there are no errors then nothing is printed. It uses wcserr_prt(), q.v. +* +* Given: +* spc const struct spcprm* +* Spectral transformation parameters. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spcprm pointer passed. +* +* +* spcset() - Setup routine for the spcprm struct +* ---------------------------------------------- +* spcset() sets up a spcprm struct according to information supplied within +* it. +* +* Note that this routine need not be called directly; it will be invoked by +* spcx2s() and spcs2x() if spcprm::flag is anything other than a predefined +* magic value. +* +* spcset() normally operates regardless of the value of spcprm::flag; i.e. +* even if a struct was previously set up it will be reset unconditionally. +* However, a spcprm struct may be put into "bypass" mode by invoking spcset() +* initially with spcprm::flag == 1 (rather than 0). spcset() will return +* immediately if invoked on a struct in that state. To take a struct out of +* bypass mode, simply reset spcprm::flag to zero. See also spcenq(). +* +* Given and returned: +* spc struct spcprm* +* Spectral transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spcprm pointer passed. +* 2: Invalid spectral parameters. +* +* For returns > 1, a detailed error message is set in +* spcprm::err if enabled, see wcserr_enable(). +* +* +* spcx2s() - Transform to spectral coordinates +* -------------------------------------------- +* spcx2s() transforms intermediate world coordinates to spectral coordinates. +* +* Given and returned: +* spc struct spcprm* +* Spectral transformation parameters. +* +* Given: +* nx int Vector length. +* +* sx int Vector stride. +* +* sspec int Vector stride. +* +* x const double[] +* Intermediate world coordinates, in SI units. +* +* Returned: +* spec double[] Spectral coordinates, in SI units. +* +* stat int[] Status return value status for each vector element: +* 0: Success. +* 1: Invalid value of x. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spcprm pointer passed. +* 2: Invalid spectral parameters. +* 3: One or more of the x coordinates were invalid, +* as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* spcprm::err if enabled, see wcserr_enable(). +* +* +* spcs2x() - Transform spectral coordinates +* ----------------------------------------- +* spcs2x() transforms spectral world coordinates to intermediate world +* coordinates. +* +* Given and returned: +* spc struct spcprm* +* Spectral transformation parameters. +* +* Given: +* nspec int Vector length. +* +* sspec int Vector stride. +* +* sx int Vector stride. +* +* spec const double[] +* Spectral coordinates, in SI units. +* +* Returned: +* x double[] Intermediate world coordinates, in SI units. +* +* stat int[] Status return value status for each vector element: +* 0: Success. +* 1: Invalid value of spec. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spcprm pointer passed. +* 2: Invalid spectral parameters. +* 4: One or more of the spec coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* spcprm::err if enabled, see wcserr_enable(). +* +* +* spctype() - Spectral CTYPEia keyword analysis +* --------------------------------------------- +* spctype() checks whether a CTYPEia keyvalue is a valid spectral axis type +* and if so returns information derived from it relating to the associated S-, +* P-, and X-type spectral variables (see explanation above). +* +* The return arguments are guaranteed not be modified if CTYPEia is not a +* valid spectral type; zero-pointers may be specified for any that are not of +* interest. +* +* A deprecated form of this function, spctyp(), lacks the wcserr** parameter. +* +* Given: +* ctype const char[9] +* The CTYPEia keyvalue, (eight characters with null +* termination). +* +* Returned: +* stype char[] The four-letter name of the S-type spectral variable +* copied or translated from ctype. If a non-zero +* pointer is given, the array must accomodate a null- +* terminated string of length 5. +* +* scode char[] The three-letter spectral algorithm code copied or +* translated from ctype. Logarithmic ('LOG') and +* tabular ('TAB') codes are also recognized. If a +* non-zero pointer is given, the array must accomodate a +* null-terminated string of length 4. +* +* sname char[] Descriptive name of the S-type spectral variable. +* If a non-zero pointer is given, the array must +* accomodate a null-terminated string of length 22. +* +* units char[] SI units of the S-type spectral variable. If a +* non-zero pointer is given, the array must accomodate a +* null-terminated string of length 8. +* +* ptype char* Character code for the P-type spectral variable +* derived from ctype, one of 'F', 'W', 'A', or 'V'. +* +* xtype char* Character code for the X-type spectral variable +* derived from ctype, one of 'F', 'W', 'A', or 'V'. +* Also, 'w' and 'a' are synonymous to 'W' and 'A' for +* grisms in vacuo and air respectively. Set to 'L' or +* 'T' for logarithmic ('LOG') and tabular ('TAB') axes. +* +* restreq int* Multivalued flag that indicates whether rest +* frequency or wavelength is required to compute +* spectral variables for this CTYPEia: +* 0: Not required. +* 1: Required for the conversion between S- and +* P-types (e.g. 'ZOPT-F2W'). +* 2: Required for the conversion between P- and +* X-types (e.g. 'BETA-W2V'). +* 3: Required for the conversion between S- and +* P-types, and between P- and X-types, but not +* between S- and X-types (this applies only for +* 'VRAD-V2F', 'VOPT-V2W', and 'ZOPT-V2W'). +* Thus the rest frequency or wavelength is required for +* spectral coordinate computations (i.e. between S- and +* X-types) only if restreq%3 != 0. +* +* err struct wcserr ** +* If enabled, for function return values > 1, this +* struct will contain a detailed error message, see +* wcserr_enable(). May be NULL if an error message is +* not desired. Otherwise, the user is responsible for +* deleting the memory allocated for the wcserr struct. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid spectral parameters (not a spectral +* CTYPEia). +* +* +* spcspxe() - Spectral keyword analysis +* ------------------------------------ +* spcspxe() analyses the CTYPEia and CRVALia FITS spectral axis keyword values +* and returns information about the associated X-type spectral variable. +* +* A deprecated form of this function, spcspx(), lacks the wcserr** parameter. +* +* Given: +* ctypeS const char[9] +* Spectral axis type, i.e. the CTYPEia keyvalue, (eight +* characters with null termination). For non-grism +* axes, the character code for the P-type spectral +* variable in the algorithm code (i.e. the eighth +* character of CTYPEia) may be set to '?' (it will not +* be reset). +* +* crvalS double Value of the S-type spectral variable at the reference +* point, i.e. the CRVALia keyvalue, SI units. +* +* restfrq, +* restwav double Rest frequency [Hz] and rest wavelength in vacuo [m], +* only one of which need be given, the other should be +* set to zero. +* +* Returned: +* ptype char* Character code for the P-type spectral variable +* derived from ctypeS, one of 'F', 'W', 'A', or 'V'. +* +* xtype char* Character code for the X-type spectral variable +* derived from ctypeS, one of 'F', 'W', 'A', or 'V'. +* Also, 'w' and 'a' are synonymous to 'W' and 'A' for +* grisms in vacuo and air respectively; crvalX and dXdS +* (see below) will conform to these. +* +* restreq int* Multivalued flag that indicates whether rest frequency +* or wavelength is required to compute spectral +* variables for this CTYPEia, as for spctype(). +* +* crvalX double* Value of the X-type spectral variable at the reference +* point, SI units. +* +* dXdS double* The derivative, dX/dS, evaluated at the reference +* point, SI units. Multiply the CDELTia keyvalue by +* this to get the pixel spacing in the X-type spectral +* coordinate. +* +* err struct wcserr ** +* If enabled, for function return values > 1, this +* struct will contain a detailed error message, see +* wcserr_enable(). May be NULL if an error message is +* not desired. Otherwise, the user is responsible for +* deleting the memory allocated for the wcserr struct. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid spectral parameters. +* +* +* spcxpse() - Spectral keyword synthesis +* ------------------------------------- +* spcxpse(), for the spectral axis type specified and the value provided for +* the X-type spectral variable at the reference point, deduces the value of +* the FITS spectral axis keyword CRVALia and also the derivative dS/dX which +* may be used to compute CDELTia. See above for an explanation of the S-, +* P-, and X-type spectral variables. +* +* A deprecated form of this function, spcxps(), lacks the wcserr** parameter. +* +* Given: +* ctypeS const char[9] +* The required spectral axis type, i.e. the CTYPEia +* keyvalue, (eight characters with null termination). +* For non-grism axes, the character code for the P-type +* spectral variable in the algorithm code (i.e. the +* eighth character of CTYPEia) may be set to '?' (it +* will not be reset). +* +* crvalX double Value of the X-type spectral variable at the reference +* point (N.B. NOT the CRVALia keyvalue), SI units. +* +* restfrq, +* restwav double Rest frequency [Hz] and rest wavelength in vacuo [m], +* only one of which need be given, the other should be +* set to zero. +* +* Returned: +* ptype char* Character code for the P-type spectral variable +* derived from ctypeS, one of 'F', 'W', 'A', or 'V'. +* +* xtype char* Character code for the X-type spectral variable +* derived from ctypeS, one of 'F', 'W', 'A', or 'V'. +* Also, 'w' and 'a' are synonymous to 'W' and 'A' for +* grisms; crvalX and cdeltX must conform to these. +* +* restreq int* Multivalued flag that indicates whether rest frequency +* or wavelength is required to compute spectral +* variables for this CTYPEia, as for spctype(). +* +* crvalS double* Value of the S-type spectral variable at the reference +* point (i.e. the appropriate CRVALia keyvalue), SI +* units. +* +* dSdX double* The derivative, dS/dX, evaluated at the reference +* point, SI units. Multiply this by the pixel spacing +* in the X-type spectral coordinate to get the CDELTia +* keyvalue. +* +* err struct wcserr ** +* If enabled, for function return values > 1, this +* struct will contain a detailed error message, see +* wcserr_enable(). May be NULL if an error message is +* not desired. Otherwise, the user is responsible for +* deleting the memory allocated for the wcserr struct. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid spectral parameters. +* +* +* spctrne() - Spectral keyword translation +* --------------------------------------- +* spctrne() translates a set of FITS spectral axis keywords into the +* corresponding set for the specified spectral axis type. For example, a +* 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa. +* +* A deprecated form of this function, spctrn(), lacks the wcserr** parameter. +* +* Given: +* ctypeS1 const char[9] +* Spectral axis type, i.e. the CTYPEia keyvalue, (eight +* characters with null termination). For non-grism +* axes, the character code for the P-type spectral +* variable in the algorithm code (i.e. the eighth +* character of CTYPEia) may be set to '?' (it will not +* be reset). +* +* crvalS1 double Value of the S-type spectral variable at the reference +* point, i.e. the CRVALia keyvalue, SI units. +* +* cdeltS1 double Increment of the S-type spectral variable at the +* reference point, SI units. +* +* restfrq, +* restwav double Rest frequency [Hz] and rest wavelength in vacuo [m], +* only one of which need be given, the other should be +* set to zero. Neither are required if the translation +* is between wave-characteristic types, or between +* velocity-characteristic types. E.g., required for +* 'FREQ' -> 'ZOPT-F2W', but not required for +* 'VELO-F2V' -> 'ZOPT-F2W'. +* +* Given and returned: +* ctypeS2 char[9] Required spectral axis type (eight characters with +* null termination). The first four characters are +* required to be given and are never modified. The +* remaining four, the algorithm code, are completely +* determined by, and must be consistent with, ctypeS1 +* and the first four characters of ctypeS2. A non-zero +* status value will be returned if they are inconsistent +* (see below). However, if the final three characters +* are specified as "???", or if just the eighth +* character is specified as '?', the correct algorithm +* code will be substituted (applies for grism axes as +* well as non-grism). +* +* Returned: +* crvalS2 double* Value of the new S-type spectral variable at the +* reference point, i.e. the new CRVALia keyvalue, SI +* units. +* +* cdeltS2 double* Increment of the new S-type spectral variable at the +* reference point, i.e. the new CDELTia keyvalue, SI +* units. +* +* err struct wcserr ** +* If enabled, for function return values > 1, this +* struct will contain a detailed error message, see +* wcserr_enable(). May be NULL if an error message is +* not desired. Otherwise, the user is responsible for +* deleting the memory allocated for the wcserr struct. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid spectral parameters. +* +* A status value of 2 will be returned if restfrq or +* restwav are not specified when required, or if ctypeS1 +* or ctypeS2 are self-inconsistent, or have different +* spectral X-type variables. +* +* +* spcaips() - Translate AIPS-convention spectral keywords +* ------------------------------------------------------- +* spcaips() translates AIPS-convention spectral CTYPEia and VELREF keyvalues. +* +* Given: +* ctypeA const char[9] +* CTYPEia keyvalue possibly containing an +* AIPS-convention spectral code (eight characters, need +* not be null-terminated). +* +* velref int AIPS-convention VELREF code. It has the following +* integer values: +* 1: LSR kinematic, originally described simply as +* "LSR" without distinction between the kinematic +* and dynamic definitions. +* 2: Barycentric, originally described as "HEL" +* meaning heliocentric. +* 3: Topocentric, originally described as "OBS" +* meaning geocentric but widely interpreted as +* topocentric. +* AIPS++ extensions to VELREF are also recognized: +* 4: LSR dynamic. +* 5: Geocentric. +* 6: Source rest frame. +* 7: Galactocentric. +* +* For an AIPS 'VELO' axis, a radio convention velocity +* (VRAD) is denoted by adding 256 to VELREF, otherwise +* an optical velocity (VOPT) is indicated (this is not +* applicable to 'FREQ' or 'FELO' axes). Setting velref +* to 0 or 256 chooses between optical and radio velocity +* without specifying a Doppler frame, provided that a +* frame is encoded in ctypeA. If not, i.e. for +* ctypeA = 'VELO', ctype will be returned as 'VELO'. +* +* VELREF takes precedence over CTYPEia in defining the +* Doppler frame, e.g. +* += ctypeA = 'VELO-HEL' += velref = 1 +* +* returns ctype = 'VOPT' with specsys set to 'LSRK'. +* +* If omitted from the header, the default value of +* VELREF is 0. +* +* Returned: +* ctype char[9] Translated CTYPEia keyvalue, or a copy of ctypeA if no +* translation was performed (in which case any trailing +* blanks in ctypeA will be replaced with nulls). +* +* specsys char[9] Doppler reference frame indicated by VELREF or else +* by CTYPEia with value corresponding to the SPECSYS +* keyvalue in the FITS WCS standard. May be returned +* blank if neither specifies a Doppler frame, e.g. +* ctypeA = 'FELO' and velref%256 == 0. +* +* Function return value: +* int Status return value: +* -1: No translation required (not an error). +* 0: Success. +* 2: Invalid value of VELREF. +* +* +* spcprm struct - Spectral transformation parameters +* -------------------------------------------------- +* The spcprm struct contains information required to transform spectral +* coordinates. It consists of certain members that must be set by the user +* ("given") and others that are set by the WCSLIB routines ("returned"). Some +* of the latter are supplied for informational purposes while others are for +* internal use only. +* +* int flag +* (Given and returned) This flag must be set to zero (or 1, see spcset()) +* whenever any of the following spcprm members are set or changed: +* +* - spcprm::type, +* - spcprm::code, +* - spcprm::crval, +* - spcprm::restfrq, +* - spcprm::restwav, +* - spcprm::pv[]. +* +* This signals the initialization routine, spcset(), to recompute the +* returned members of the spcprm struct. spcset() will reset flag to +* indicate that this has been done. +* +* char type[8] +* (Given) Four-letter spectral variable type, e.g "ZOPT" for +* CTYPEia = 'ZOPT-F2W'. (Declared as char[8] for alignment reasons.) +* +* char code[4] +* (Given) Three-letter spectral algorithm code, e.g "F2W" for +* CTYPEia = 'ZOPT-F2W'. +* +* double crval +* (Given) Reference value (CRVALia), SI units. +* +* double restfrq +* (Given) The rest frequency [Hz], and ... +* +* double restwav +* (Given) ... the rest wavelength in vacuo [m], only one of which need be +* given, the other should be set to zero. Neither are required if the +* X and S spectral variables are both wave-characteristic, or both +* velocity-characteristic, types. +* +* double pv[7] +* (Given) Grism parameters for 'GRI' and 'GRA' algorithm codes: +* - 0: G, grating ruling density. +* - 1: m, interference order. +* - 2: alpha, angle of incidence [deg]. +* - 3: n_r, refractive index at the reference wavelength, lambda_r. +* - 4: n'_r, dn/dlambda at the reference wavelength, lambda_r (/m). +* - 5: epsilon, grating tilt angle [deg]. +* - 6: theta, detector tilt angle [deg]. +* +* The remaining members of the spcprm struct are maintained by spcset() and +* must not be modified elsewhere: +* +* double w[6] +* (Returned) Intermediate values: +* - 0: Rest frequency or wavelength (SI). +* - 1: The value of the X-type spectral variable at the reference point +* (SI units). +* - 2: dX/dS at the reference point (SI units). +* The remainder are grism intermediates. +* +* int isGrism +* (Returned) Grism coordinates? +* - 0: no, +* - 1: in vacuum, +* - 2: in air. +* +* int padding1 +* (An unused variable inserted for alignment purposes only.) +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* void *padding2 +* (An unused variable inserted for alignment purposes only.) +* int (*spxX2P)(SPX_ARGS) +* (For internal use only) The first and ... +* int (*spxP2S)(SPX_ARGS) +* (For internal use only) ... the second of the pointers to the +* transformation functions in the two-step algorithm chain X -> P -> S in +* the pixel-to-spectral direction where the non-linear transformation is +* from X to P. The argument list, SPX_ARGS, is defined in spx.h. +* +* int (*spxS2P)(SPX_ARGS) +* (For internal use only) The first and ... +* int (*spxP2X)(SPX_ARGS) +* (For internal use only) ... the second of the pointers to the +* transformation functions in the two-step algorithm chain S -> P -> X in +* the spectral-to-pixel direction where the non-linear transformation is +* from P to X. The argument list, SPX_ARGS, is defined in spx.h. +* +* +* Global variable: const char *spc_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_SPC +#define WCSLIB_SPC + +#include "spx.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum spcenq_enum { + SPCENQ_SET = 2, // spcprm struct has been set up. + SPCENQ_BYP = 4, // spcprm struct is in bypass mode. +}; + +extern const char *spc_errmsg[]; + +enum spc_errmsg_enum { + SPCERR_NO_CHANGE = -1, // No change. + SPCERR_SUCCESS = 0, // Success. + SPCERR_NULL_POINTER = 1, // Null spcprm pointer passed. + SPCERR_BAD_SPEC_PARAMS = 2, // Invalid spectral parameters. + SPCERR_BAD_X = 3, // One or more of x coordinates were + // invalid. + SPCERR_BAD_SPEC = 4 // One or more of the spec coordinates were + // invalid. +}; + +struct spcprm { + // Initialization flag (see the prologue above). + //-------------------------------------------------------------------------- + int flag; // Set to zero to force initialization. + + // Parameters to be provided (see the prologue above). + //-------------------------------------------------------------------------- + char type[8]; // Four-letter spectral variable type. + char code[4]; // Three-letter spectral algorithm code. + + double crval; // Reference value (CRVALia), SI units. + double restfrq; // Rest frequency, Hz. + double restwav; // Rest wavelength, m. + + double pv[7]; // Grism parameters: + // 0: G, grating ruling density. + // 1: m, interference order. + // 2: alpha, angle of incidence. + // 3: n_r, refractive index at lambda_r. + // 4: n'_r, dn/dlambda at lambda_r. + // 5: epsilon, grating tilt angle. + // 6: theta, detector tilt angle. + + // Information derived from the parameters supplied. + //-------------------------------------------------------------------------- + double w[6]; // Intermediate values. + // 0: Rest frequency or wavelength (SI). + // 1: CRVALX (SI units). + // 2: CDELTX/CDELTia = dX/dS (SI units). + // The remainder are grism intermediates. + + int isGrism; // Grism coordinates? 1: vacuum, 2: air. + int padding1; // (Dummy inserted for alignment purposes.) + + // Error messaging, if enabled. + //-------------------------------------------------------------------------- + struct wcserr *err; + + //-------------------------------------------------------------------------- + // Private - the remainder are for internal use. + //-------------------------------------------------------------------------- + void *padding2; // (Dummy inserted for alignment purposes.) + + int (*spxX2P)(SPX_ARGS); // Pointers to the transformation functions + int (*spxP2S)(SPX_ARGS); // in the two-step algorithm chain in the + // pixel-to-spectral direction. + + int (*spxS2P)(SPX_ARGS); // Pointers to the transformation functions + int (*spxP2X)(SPX_ARGS); // in the two-step algorithm chain in the + // spectral-to-pixel direction. +}; + +// Size of the spcprm struct in int units, used by the Fortran wrappers. +#define SPCLEN (sizeof(struct spcprm)/sizeof(int)) + + +int spcini(struct spcprm *spc); + +int spcfree(struct spcprm *spc); + +int spcsize(const struct spcprm *spc, int sizes[2]); + +int spcenq(const struct spcprm *spc, int enquiry); + +int spcprt(const struct spcprm *spc); + +int spcperr(const struct spcprm *spc, const char *prefix); + +int spcset(struct spcprm *spc); + +int spcx2s(struct spcprm *spc, int nx, int sx, int sspec, + const double x[], double spec[], int stat[]); + +int spcs2x(struct spcprm *spc, int nspec, int sspec, int sx, + const double spec[], double x[], int stat[]); + +int spctype(const char ctype[9], char stype[], char scode[], char sname[], + char units[], char *ptype, char *xtype, int *restreq, + struct wcserr **err); + +int spcspxe(const char ctypeS[9], double crvalS, double restfrq, + double restwav, char *ptype, char *xtype, int *restreq, + double *crvalX, double *dXdS, struct wcserr **err); + +int spcxpse(const char ctypeS[9], double crvalX, double restfrq, + double restwav, char *ptype, char *xtype, int *restreq, + double *crvalS, double *dSdX, struct wcserr **err); + +int spctrne(const char ctypeS1[9], double crvalS1, double cdeltS1, + double restfrq, double restwav, char ctypeS2[9], double *crvalS2, + double *cdeltS2, struct wcserr **err); + +int spcaips(const char ctypeA[9], int velref, char ctype[9], char specsys[9]); + + +// Deprecated. +#define spcini_errmsg spc_errmsg +#define spcprt_errmsg spc_errmsg +#define spcset_errmsg spc_errmsg +#define spcx2s_errmsg spc_errmsg +#define spcs2x_errmsg spc_errmsg + +int spctyp(const char ctype[9], char stype[], char scode[], char sname[], + char units[], char *ptype, char *xtype, int *restreq); +int spcspx(const char ctypeS[9], double crvalS, double restfrq, + double restwav, char *ptype, char *xtype, int *restreq, + double *crvalX, double *dXdS); +int spcxps(const char ctypeS[9], double crvalX, double restfrq, + double restwav, char *ptype, char *xtype, int *restreq, + double *crvalS, double *dSdX); +int spctrn(const char ctypeS1[9], double crvalS1, double cdeltS1, + double restfrq, double restwav, char ctypeS2[9], double *crvalS2, + double *cdeltS2); + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_SPC diff --git a/deps/wcslib/C/sph.c b/deps/wcslib/C/sph.c new file mode 100644 index 0000000..db53dcf --- /dev/null +++ b/deps/wcslib/C/sph.c @@ -0,0 +1,448 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: sph.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include "wcstrig.h" +#include "sph.h" + +#define copysign(X, Y) ((Y) < 0.0 ? -fabs(X) : fabs(X)) + +#define tol 1.0e-5 + +//---------------------------------------------------------------------------- + +int sphx2s( + const double eul[5], + int nphi, + int ntheta, + int spt, + int sll, + const double phi[], + const double theta[], + double lng[], + double lat[]) + +{ + int mphi, mtheta; + if (ntheta > 0) { + mphi = nphi; + mtheta = ntheta; + } else { + mphi = 1; + mtheta = 1; + ntheta = nphi; + } + + + // Check for special-case rotations. + if (eul[4] == 0.0) { + if (eul[1] == 0.0) { + // Simple change in origin of longitude. + double dlng = fmod(eul[0] + 180.0 - eul[2], 360.0); + + int jphi = 0; + const double *thetap = theta; + double *lngp = lng; + double *latp = lat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + const double *phip = phi + (jphi%nphi)*spt; + for (int iphi = 0; iphi < mphi; iphi++, phip += spt, jphi++) { + *lngp = *phip + dlng; + *latp = *thetap; + + // Normalize the celestial longitude. + if (eul[0] >= 0.0) { + if (*lngp < 0.0) *lngp += 360.0; + } else { + if (*lngp > 0.0) *lngp -= 360.0; + } + + if (*lngp > 360.0) { + *lngp -= 360.0; + } else if (*lngp < -360.0) { + *lngp += 360.0; + } + + lngp += sll; + latp += sll; + } + } + + } else { + // Pole-flip with change in origin of longitude. + double dlng = fmod(eul[0] + eul[2], 360.0); + + int jphi = 0; + const double *thetap = theta; + double *lngp = lng; + double *latp = lat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + const double *phip = phi + (jphi%nphi)*spt; + for (int iphi = 0; iphi < mphi; iphi++, phip += spt, jphi++) { + *lngp = dlng - *phip; + *latp = -(*thetap); + + // Normalize the celestial longitude. + if (eul[0] >= 0.0) { + if (*lngp < 0.0) *lngp += 360.0; + } else { + if (*lngp > 0.0) *lngp -= 360.0; + } + + if (*lngp > 360.0) { + *lngp -= 360.0; + } else if (*lngp < -360.0) { + *lngp += 360.0; + } + + lngp += sll; + latp += sll; + } + } + } + + return 0; + } + + + // Do phi dependency. + const double *phip = phi; + int rowoff = 0; + int rowlen = nphi*sll; + for (int iphi = 0; iphi < nphi; iphi++, rowoff += sll, phip += spt) { + double dphi = *phip - eul[2]; + + double *lngp = lng + rowoff; + for (int itheta = 0; itheta < mtheta; itheta++) { + *lngp = dphi; + lngp += rowlen; + } + } + + + // Do theta dependency. + const double *thetap = theta; + double *lngp = lng; + double *latp = lat; + for (int itheta = 0; itheta < ntheta; itheta++, thetap += spt) { + double sinthe, costhe; + sincosd(*thetap, &sinthe, &costhe); + + double costhe3 = costhe*eul[3]; + double costhe4 = costhe*eul[4]; + double sinthe3 = sinthe*eul[3]; + double sinthe4 = sinthe*eul[4]; + + for (int iphi = 0; iphi < mphi; iphi++, lngp += sll, latp += sll) { + double dphi = *lngp; + double sinphi, cosphi; + sincosd(dphi, &sinphi, &cosphi); + + // Compute the celestial longitude. + double x = sinthe4 - costhe3*cosphi; + if (fabs(x) < tol) { + // Rearrange formula to reduce roundoff errors. + x = -cosd(*thetap + eul[1]) + costhe3*(1.0 - cosphi); + } + + double dlng; + double y = -costhe*sinphi; + if (x != 0.0 || y != 0.0) { + dlng = atan2d(y, x); + } else { + // Change of origin of longitude. + if (eul[1] < 90.0) { + dlng = dphi + 180.0; + } else { + dlng = -dphi; + } + } + *lngp = eul[0] + dlng; + + // Normalize the celestial longitude. + if (eul[0] >= 0.0) { + if (*lngp < 0.0) *lngp += 360.0; + } else { + if (*lngp > 0.0) *lngp -= 360.0; + } + + if (*lngp > 360.0) { + *lngp -= 360.0; + } else if (*lngp < -360.0) { + *lngp += 360.0; + } + + // Compute the celestial latitude. + if (fmod(dphi,180.0) == 0.0) { + *latp = *thetap + cosphi*eul[1]; + if (*latp > 90.0) *latp = 180.0 - *latp; + if (*latp < -90.0) *latp = -180.0 - *latp; + } else { + double z = sinthe3 + costhe4*cosphi; + if (fabs(z) > 0.99) { + // Use an alternative formula for greater accuracy. + *latp = copysign(acosd(sqrt(x*x+y*y)), z); + } else { + *latp = asind(z); + } + } + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int sphs2x( + const double eul[5], + int nlng, + int nlat, + int sll, + int spt, + const double lng[], + const double lat[], + double phi[], + double theta[]) + +{ + int mlng, mlat; + if (nlat > 0) { + mlng = nlng; + mlat = nlat; + } else { + mlng = 1; + mlat = 1; + nlat = nlng; + } + + + // Check for special-case rotations. + if (eul[4] == 0.0) { + if (eul[1] == 0.0) { + // Simple change in origin of longitude. + double dphi = fmod(eul[2] - 180.0 - eul[0], 360.0); + + int jlng = 0; + const double *latp = lat; + double *phip = phi; + double *thetap = theta; + for (int ilat = 0; ilat < nlat; ilat++, latp += sll) { + const double *lngp = lng + (jlng%nlng)*sll; + for (int ilng = 0; ilng < mlng; ilng++, lngp += sll, jlng++) { + *phip = fmod(*lngp + dphi, 360.0); + *thetap = *latp; + + // Normalize the native longitude. + if (*phip > 180.0) { + *phip -= 360.0; + } else if (*phip < -180.0) { + *phip += 360.0; + } + + phip += spt; + thetap += spt; + } + } + + } else { + // Pole-flip with change in origin of longitude. + double dphi = fmod(eul[2] + eul[0], 360.0); + + int jlng = 0; + const double *latp = lat; + double *phip = phi; + double *thetap = theta; + for (int ilat = 0; ilat < nlat; ilat++, latp += sll) { + const double *lngp = lng + (jlng%nlng)*sll; + for (int ilng = 0; ilng < mlng; ilng++, lngp += sll, jlng++) { + *phip = fmod(dphi - *lngp, 360.0); + *thetap = -(*latp); + + // Normalize the native longitude. + if (*phip > 180.0) { + *phip -= 360.0; + } else if (*phip < -180.0) { + *phip += 360.0; + } + + phip += spt; + thetap += spt; + } + } + } + + return 0; + } + + + // Do lng dependency. + const double *lngp = lng; + int rowoff = 0; + int rowlen = nlng*spt; + for (int ilng = 0; ilng < nlng; ilng++, rowoff += spt, lngp += sll) { + double dlng = *lngp - eul[0]; + + double *phip = phi + rowoff; + for (int ilat = 0; ilat < mlat; ilat++) { + *phip = dlng; + phip += rowlen; + } + } + + + // Do lat dependency. + const double *latp = lat; + double *phip = phi; + double *thetap = theta; + for (int ilat = 0; ilat < nlat; ilat++, latp += sll) { + double sinlat, coslat; + sincosd(*latp, &sinlat, &coslat); + + double coslat3 = coslat*eul[3]; + double coslat4 = coslat*eul[4]; + double sinlat3 = sinlat*eul[3]; + double sinlat4 = sinlat*eul[4]; + + for (int ilng = 0; ilng < mlng; ilng++, phip += spt, thetap += spt) { + double dlng = *phip; + double sinlng, coslng; + sincosd(dlng, &sinlng, &coslng); + + // Compute the native longitude. + double x = sinlat4 - coslat3*coslng; + if (fabs(x) < tol) { + // Rearrange formula to reduce roundoff errors. + x = -cosd(*latp+eul[1]) + coslat3*(1.0 - coslng); + } + + double dphi; + double y = -coslat*sinlng; + if (x != 0.0 || y != 0.0) { + dphi = atan2d(y, x); + } else { + // Change of origin of longitude. + if (eul[1] < 90.0) { + dphi = dlng - 180.0; + } else { + dphi = -dlng; + } + } + *phip = fmod(eul[2] + dphi, 360.0); + + // Normalize the native longitude. + if (*phip > 180.0) { + *phip -= 360.0; + } else if (*phip < -180.0) { + *phip += 360.0; + } + + // Compute the native latitude. + if (fmod(dlng,180.0) == 0.0) { + *thetap = *latp + coslng*eul[1]; + if (*thetap > 90.0) *thetap = 180.0 - *thetap; + if (*thetap < -90.0) *thetap = -180.0 - *thetap; + } else { + double z = sinlat3 + coslat4*coslng; + if (fabs(z) > 0.99) { + // Use an alternative formula for greater accuracy. + *thetap = copysign(acosd(sqrt(x*x+y*y)), z); + } else { + *thetap = asind(z); + } + } + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int sphdpa( + int nfield, + double lng0, + double lat0, + const double lng[], + const double lat[], + double dist[], + double pa[]) + +{ + // Set the Euler angles for the coordinate transformation. + double eul[5]; + eul[0] = lng0; + eul[1] = 90.0 - lat0; + eul[2] = 0.0; + eul[3] = cosd(eul[1]); + eul[4] = sind(eul[1]); + + // Transform field points to the new system. + sphs2x(eul, nfield, 0, 1, 1, lng, lat, pa, dist); + + for (int i = 0; i < nfield; i++) { + // Angular distance is obtained from latitude in the new frame. + dist[i] = 90.0 - dist[i]; + + // Position angle is obtained from longitude in the new frame. + pa[i] = -pa[i]; + if (pa[i] < -180.0) pa[i] += 360.0; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int sphpad( + int nfield, + double lng0, + double lat0, + const double dist[], + const double pa[], + double lng[], + double lat[]) + +{ + // Set the Euler angles for the coordinate transformation. + double eul[5]; + eul[0] = lng0; + eul[1] = 90.0 - lat0; + eul[2] = 0.0; + eul[3] = cosd(eul[1]); + eul[4] = sind(eul[1]); + + for (int i = 0; i < nfield; i++) { + // Latitude in the new frame is obtained from angular distance. + lat[i] = 90.0 - dist[i]; + + // Longitude in the new frame is obtained from position angle. + lng[i] = -pa[i]; + } + + // Transform field points to the old system. + sphx2s(eul, nfield, 0, 1, 1, lng, lat, lng, lat); + + return 0; +} diff --git a/deps/wcslib/C/sph.h b/deps/wcslib/C/sph.h new file mode 100644 index 0000000..2184dba --- /dev/null +++ b/deps/wcslib/C/sph.h @@ -0,0 +1,248 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: sph.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the sph routines +* --------------------------- +* Routines in this suite implement the spherical coordinate transformations +* defined by the FITS World Coordinate System (WCS) standard +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of celestial coordinates in FITS", += Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (WCS Paper II) +* +* The transformations are implemented via separate functions, sphx2s() and +* sphs2x(), for the spherical rotation in each direction. +* +* A utility function, sphdpa(), computes the angular distances and position +* angles from a given point on the sky to a number of other points. sphpad() +* does the complementary operation - computes the coordinates of points offset +* by the given angular distances and position angles from a given point on the +* sky. +* +* +* sphx2s() - Rotation in the pixel-to-world direction +* --------------------------------------------------- +* sphx2s() transforms native coordinates of a projection to celestial +* coordinates. +* +* Given: +* eul const double[5] +* Euler angles for the transformation: +* 0: Celestial longitude of the native pole [deg]. +* 1: Celestial colatitude of the native pole, or +* native colatitude of the celestial pole [deg]. +* 2: Native longitude of the celestial pole [deg]. +* 3: cos(eul[1]) +* 4: sin(eul[1]) +* +* nphi, +* ntheta int Vector lengths. +* +* spt,sxy int Vector strides. +* +* phi,theta const double[] +* Longitude and latitude in the native coordinate +* system of the projection [deg]. +* +* Returned: +* lng,lat double[] Celestial longitude and latitude [deg]. These may +* refer to the same storage as phi and theta +* respectively. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* sphs2x() - Rotation in the world-to-pixel direction +* --------------------------------------------------- +* sphs2x() transforms celestial coordinates to the native coordinates of a +* projection. +* +* Given: +* eul const double[5] +* Euler angles for the transformation: +* 0: Celestial longitude of the native pole [deg]. +* 1: Celestial colatitude of the native pole, or +* native colatitude of the celestial pole [deg]. +* 2: Native longitude of the celestial pole [deg]. +* 3: cos(eul[1]) +* 4: sin(eul[1]) +* +* nlng,nlat int Vector lengths. +* +* sll,spt int Vector strides. +* +* lng,lat const double[] +* Celestial longitude and latitude [deg]. +* +* Returned: +* phi,theta double[] Longitude and latitude in the native coordinate system +* of the projection [deg]. These may refer to the same +* storage as lng and lat respectively. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* sphdpa() - Compute angular distance and position angle +* ------------------------------------------------------ +* sphdpa() computes the angular distance and generalized position angle (see +* notes) from a "reference" point to a number of "field" points on the sphere. +* The points must be specified consistently in any spherical coordinate +* system. +* +* sphdpa() is complementary to sphpad(). +* +* Given: +* nfield int The number of field points. +* +* lng0,lat0 double Spherical coordinates of the reference point [deg]. +* +* lng,lat const double[] +* Spherical coordinates of the field points [deg]. +* +* Returned: +* dist,pa double[] Angular distances and position angles [deg]. These +* may refer to the same storage as lng and lat +* respectively. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* Notes: +* 1. sphdpa() uses sphs2x() to rotate coordinates so that the reference +* point is at the north pole of the new system with the north pole of the +* old system at zero longitude in the new. The Euler angles required by +* sphs2x() for this rotation are +* += eul[0] = lng0; += eul[1] = 90.0 - lat0; += eul[2] = 0.0; +* +* The angular distance and generalized position angle are readily +* obtained from the longitude and latitude of the field point in the new +* system. This applies even if the reference point is at one of the +* poles, in which case the "position angle" returned is as would be +* computed for a reference point at (lng0,+90-epsilon) or +* (lng0,-90+epsilon), in the limit as epsilon goes to zero. +* +* It is evident that the coordinate system in which the two points are +* expressed is irrelevant to the determination of the angular separation +* between the points. However, this is not true of the generalized +* position angle. +* +* The generalized position angle is here defined as the angle of +* intersection of the great circle containing the reference and field +* points with that containing the reference point and the pole. It has +* its normal meaning when the the reference and field points are +* specified in equatorial coordinates (right ascension and declination). +* +* Interchanging the reference and field points changes the position angle +* in a non-intuitive way (because the sum of the angles of a spherical +* triangle normally exceeds 180 degrees). +* +* The position angle is undefined if the reference and field points are +* coincident or antipodal. This may be detected by checking for a +* distance of 0 or 180 degrees (within rounding tolerance). sphdpa() +* will return an arbitrary position angle in such circumstances. +* +* +* sphpad() - Compute field points offset from a given point +* --------------------------------------------------------- +* sphpad() computes the coordinates of a set of points that are offset by the +* specified angular distances and position angles from a given "reference" +* point on the sky. The distances and position angles must be specified +* consistently in any spherical coordinate system. +* +* sphpad() is complementary to sphdpa(). +* +* Given: +* nfield int The number of field points. +* +* lng0,lat0 double Spherical coordinates of the reference point [deg]. +* +* dist,pa const double[] +* Angular distances and position angles [deg]. +* +* Returned: +* lng,lat double[] Spherical coordinates of the field points [deg]. +* These may refer to the same storage as dist and pa +* respectively. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* Notes: +* 1: sphpad() is implemented analogously to sphdpa() although using sphx2s() +* for the inverse transformation. In particular, when the reference +* point is at one of the poles, "position angle" is interpreted as though +* the reference point was at (lng0,+90-epsilon) or (lng0,-90+epsilon), in +* the limit as epsilon goes to zero. +* +* Applying sphpad() with the distances and position angles computed by +* sphdpa() should return the original field points. +* +*===========================================================================*/ + +#ifndef WCSLIB_SPH +#define WCSLIB_SPH + +#ifdef __cplusplus +extern "C" { +#endif + + +int sphx2s(const double eul[5], int nphi, int ntheta, int spt, int sxy, + const double phi[], const double theta[], + double lng[], double lat[]); + +int sphs2x(const double eul[5], int nlng, int nlat, int sll , int spt, + const double lng[], const double lat[], + double phi[], double theta[]); + +int sphdpa(int nfield, double lng0, double lat0, + const double lng[], const double lat[], + double dist[], double pa[]); + +int sphpad(int nfield, double lng0, double lat0, + const double dist[], const double pa[], + double lng[], double lat[]); + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_SPH diff --git a/deps/wcslib/C/spx.c b/deps/wcslib/C/spx.c new file mode 100644 index 0000000..e313f37 --- /dev/null +++ b/deps/wcslib/C/spx.c @@ -0,0 +1,1118 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: spx.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "spx.h" + + +// Map status return value to message. +const char *spx_errmsg[] = { + "Success", + "Null spxprm pointer passed", + "Invalid spectral parameters", + "Invalid spectral variable", + "One or more of the inspec coordinates were invalid"}; + +// Convenience macro for invoking wcserr_set(). +#define SPX_ERRMSG(status) WCSERR_SET(status), spx_errmsg[status] + +#define C 2.99792458e8 +#define h 6.6260755e-34 + +/*============================================================================ +* Spectral cross conversions; given one spectral coordinate it computes all +* the others, plus the required derivatives of each with respect to the +* others. +*===========================================================================*/ + +int specx( + const char *type, + double spec, + double restfrq, + double restwav, + struct spxprm *spx) + +{ + static const char *function = "specx"; + + if (spx == 0x0) return SPXERR_NULL_POINTER; + struct wcserr **err = &(spx->err); + + int haverest = 1; + if (restfrq == 0.0) { + if (restwav == 0.0) { + // No line rest frequency supplied. + haverest = 0; + + // Temporarily set a dummy value for conversions. + spx->restwav = 1.0; + } else { + spx->restwav = restwav; + } + spx->restfrq = C/spx->restwav; + + } else { + spx->restfrq = restfrq; + spx->restwav = C/restfrq; + } + + spx->err = 0x0; + + // Convert to frequency. + spx->wavetype = 0; + spx->velotype = 0; + if (strcmp(type, "FREQ") == 0) { + if (spec == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable: frequency == 0"); + } + spx->freq = spec; + spx->wavetype = 1; + + } else if (strcmp(type, "AFRQ") == 0) { + if (spec == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable: frequency == 0"); + } + spx->freq = spec/(2.0*PI); + spx->wavetype = 1; + + } else if (strcmp(type, "ENER") == 0) { + if (spec == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable: frequency == 0"); + } + spx->freq = spec/h; + spx->wavetype = 1; + + } else if (strcmp(type, "WAVN") == 0) { + if (spec == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable: frequency == 0"); + } + spx->freq = spec*C; + spx->wavetype = 1; + + } else if (strcmp(type, "VRAD") == 0) { + spx->freq = spx->restfrq*(1.0 - spec/C); + spx->velotype = 1; + + } else if (strcmp(type, "WAVE") == 0) { + if (spec == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable: frequency == 0"); + } + spx->freq = C/spec; + spx->wavetype = 1; + + } else if (strcmp(type, "VOPT") == 0) { + double s = 1.0 + spec/C; + if (s == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable"); + } + spx->freq = spx->restfrq/s; + spx->velotype = 1; + + } else if (strcmp(type, "ZOPT") == 0) { + double s = 1.0 + spec; + if (s == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable"); + } + spx->freq = spx->restfrq/s; + spx->velotype = 1; + + } else if (strcmp(type, "AWAV") == 0) { + if (spec == 0.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable"); + } + + double n, s; + s = 1.0/spec; + s *= s; + n = 2.554e8 / (0.41e14 - s); + n += 294.981e8 / (1.46e14 - s); + n += 1.000064328; + spx->freq = C/(spec*n); + spx->wavetype = 1; + + } else if (strcmp(type, "VELO") == 0) { + double beta = spec/C; + if (fabs(beta) == 1.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable"); + } + spx->freq = spx->restfrq*(1.0 - beta)/sqrt(1.0 - beta*beta); + spx->velotype = 1; + + } else if (strcmp(type, "BETA") == 0) { + if (fabs(spec) == 1.0) { + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_VAR), + "Invalid spectral variable"); + } + spx->freq = spx->restfrq*(1.0 - spec)/sqrt(1.0 - spec*spec); + spx->velotype = 1; + + } else { + // Unrecognized type. + return wcserr_set(WCSERR_SET(SPXERR_BAD_SPEC_PARAMS), + "Unrecognized spectral type '%s'", type); + } + + + // Convert frequency to the other spectral types. + double n, s, t, u; + n = 1.0; + for (int k = 0; k < 4; k++) { + s = n*spx->freq/C; + s *= s; + t = 0.41e14 - s; + u = 1.46e14 - s; + n = 1.000064328 + (2.554e8/t + 294.981e8/u); + } + + double dwaveawav = n - 2.0*s*(2.554e8/(t*t) + 294.981e8/(u*u)); + + s = spx->freq/spx->restfrq; + + spx->ener = spx->freq*h; + spx->afrq = spx->freq*(2.0*PI); + spx->wavn = spx->freq/C; + spx->vrad = C*(1.0 - s); + spx->wave = C/spx->freq; + spx->awav = spx->wave/n; + spx->vopt = C*(1.0/s - 1.0); + spx->zopt = spx->vopt/C; + spx->velo = C*(1.0 - s*s)/(1.0 + s*s); + spx->beta = spx->velo/C; + + // Compute the required derivatives. + double gamma = 1.0/sqrt(1.0 - spx->beta*spx->beta); + + spx->dfreqafrq = 1.0/(2.0*PI); + spx->dafrqfreq = 1.0/spx->dfreqafrq; + + spx->dfreqener = 1.0/h; + spx->denerfreq = 1.0/spx->dfreqener; + + spx->dfreqwavn = C; + spx->dwavnfreq = 1.0/spx->dfreqwavn; + + spx->dfreqvrad = -spx->restfrq/C; + spx->dvradfreq = 1.0/spx->dfreqvrad; + + spx->dfreqwave = -spx->freq/spx->wave; + spx->dwavefreq = 1.0/spx->dfreqwave; + + spx->dfreqawav = spx->dfreqwave * dwaveawav; + spx->dawavfreq = 1.0/spx->dfreqawav; + + spx->dfreqvelo = -gamma*spx->restfrq/(C + spx->velo); + spx->dvelofreq = 1.0/spx->dfreqvelo; + + spx->dwavevopt = spx->restwav/C; + spx->dvoptwave = 1.0/spx->dwavevopt; + + spx->dwavezopt = spx->restwav; + spx->dzoptwave = 1.0/spx->dwavezopt; + + spx->dwaveawav = dwaveawav; + spx->dawavwave = 1.0/spx->dwaveawav; + + spx->dwavevelo = gamma*spx->restwav/(C - spx->velo); + spx->dvelowave = 1.0/spx->dwavevelo; + + spx->dawavvelo = spx->dwavevelo/dwaveawav; + spx->dveloawav = 1.0/spx->dawavvelo; + + spx->dvelobeta = C; + spx->dbetavelo = 1.0/spx->dvelobeta; + + + // Reset values if no line rest frequency was supplied. + if (haverest) { + spx->wavetype = 1; + spx->velotype = 1; + + } else { + spx->restfrq = 0.0; + spx->restwav = 0.0; + + if (!spx->wavetype) { + // Don't have wave characteristic types. + spx->freq = 0.0; + spx->afrq = 0.0; + spx->ener = 0.0; + spx->wavn = 0.0; + spx->wave = 0.0; + spx->awav = 0.0; + + spx->dfreqwave = 0.0; + spx->dwavefreq = 0.0; + + spx->dfreqawav = 0.0; + spx->dawavfreq = 0.0; + + spx->dwaveawav = 0.0; + spx->dawavwave = 0.0; + + } else { + // Don't have velocity types. + spx->vrad = 0.0; + spx->vopt = 0.0; + spx->zopt = 0.0; + spx->velo = 0.0; + spx->beta = 0.0; + } + + spx->dfreqvrad = 0.0; + spx->dvradfreq = 0.0; + + spx->dfreqvelo = 0.0; + spx->dvelofreq = 0.0; + + spx->dwavevopt = 0.0; + spx->dvoptwave = 0.0; + + spx->dwavezopt = 0.0; + spx->dzoptwave = 0.0; + + spx->dwavevelo = 0.0; + spx->dvelowave = 0.0; + + spx->dawavvelo = 0.0; + spx->dveloawav = 0.0; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int spxperr(const struct spxprm *spx, const char *prefix) + +{ + if (spx == 0x0) return SPXERR_NULL_POINTER; + + if (spx->err) { + wcserr_prt(spx->err, prefix); + } + + return 0; +} + + +/*============================================================================ +* Conversions between frequency and vacuum wavelength. +*===========================================================================*/ + +int freqwave( + double dummy, + int nfreq, + int sfreq, + int swave, + const double freq[], + double wave[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *freqp = freq; + double *wavep = wave; + int *statp = stat; + int status = 0; + for (int ifreq = 0; ifreq < nfreq; ifreq++) { + if (*freqp != 0.0) { + *wavep = C/(*freqp); + *(statp++) = 0; + } else { + *(statp++) = 1; + status = SPXERR_BAD_INSPEC_COORD; + } + + freqp += sfreq; + wavep += swave; + } + + return status; +} + +//---------------------------------------------------------------------------- + +int wavefreq( + double dummy, + int nwave, + int swave, + int sfreq, + const double wave[], + double freq[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *wavep = wave; + double *freqp = freq; + int *statp = stat; + int status = 0; + for (int iwave = 0; iwave < nwave; iwave++) { + if (*wavep != 0.0) { + *freqp = C/(*wavep); + *(statp++) = 0; + } else { + *(statp++) = 1; + status = SPXERR_BAD_INSPEC_COORD; + } + + wavep += swave; + freqp += sfreq; + } + + return status; +} + +/*============================================================================ +* Conversions between frequency and air wavelength. +*===========================================================================*/ + +int freqawav( + double dummy, + int nfreq, + int sfreq, + int sawav, + const double freq[], + double awav[], + int stat[]) + +{ + int status; + if ((status = freqwave(dummy, nfreq, sfreq, sawav, freq, awav, stat))) { + return status; + } + + return waveawav(dummy, nfreq, sawav, sawav, awav, awav, stat); +} + +//---------------------------------------------------------------------------- + +int awavfreq( + double dummy, + int nawav, + int sawav, + int sfreq, + const double awav[], + double freq[], + int stat[]) + +{ + int status; + if ((status = awavwave(dummy, nawav, sawav, sfreq, awav, freq, stat))) { + return status; + } + + return wavefreq(dummy, nawav, sfreq, sfreq, freq, freq, stat); +} + +/*============================================================================ +* Conversions between frequency and relativistic velocity. +*===========================================================================*/ + +int freqvelo( + double restfrq, + int nfreq, + int sfreq, + int svelo, + const double freq[], + double velo[], + int stat[]) + +{ + double r = restfrq*restfrq; + + const double *freqp = freq; + double *velop = velo; + int *statp = stat; + for (int ifreq = 0; ifreq < nfreq; ifreq++) { + double s = *freqp * *freqp; + *velop = C*(r - s)/(r + s); + *(statp++) = 0; + + freqp += sfreq; + velop += svelo; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int velofreq( + double restfrq, + int nvelo, + int svelo, + int sfreq, + const double velo[], + double freq[], + int stat[]) + +{ + const double *velop = velo; + double *freqp = freq; + int *statp = stat; + int status = 0; + for (int ivelo = 0; ivelo < nvelo; ivelo++) { + double s = C + *velop; + if (s != 0.0) { + *freqp = restfrq*sqrt((C - *velop)/s); + *(statp++) = 0; + } else { + *(statp++) = 1; + status = SPXERR_BAD_INSPEC_COORD; + } + + velop += svelo; + freqp += sfreq; + } + + return status; +} + +/*============================================================================ +* Conversions between vacuum wavelength and air wavelength. +*===========================================================================*/ + +int waveawav( + double dummy, + int nwave, + int swave, + int sawav, + const double wave[], + double awav[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *wavep = wave; + double *awavp = awav; + int *statp = stat; + int status = 0; + for (int iwave = 0; iwave < nwave; iwave++) { + if (*wavep != 0.0) { + double n = 1.0; + for (int k = 0; k < 4; k++) { + double s = n/(*wavep); + s *= s; + n = 2.554e8 / (0.41e14 - s); + n += 294.981e8 / (1.46e14 - s); + n += 1.000064328; + } + + *awavp = (*wavep)/n; + *(statp++) = 0; + } else { + *(statp++) = 1; + status = SPXERR_BAD_INSPEC_COORD; + } + + wavep += swave; + awavp += sawav; + } + + return status; +} + +//---------------------------------------------------------------------------- + +int awavwave( + double dummy, + int nawav, + int sawav, + int swave, + const double awav[], + double wave[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *awavp = awav; + double *wavep = wave; + int *statp = stat; + int status = 0; + for (int iawav = 0; iawav < nawav; iawav++) { + if (*awavp != 0.0) { + double n, s; + s = 1.0/(*awavp); + s *= s; + n = 2.554e8 / (0.41e14 - s); + n += 294.981e8 / (1.46e14 - s); + n += 1.000064328; + *wavep = (*awavp)*n; + *(statp++) = 0; + } else { + *(statp++) = 1; + status = SPXERR_BAD_INSPEC_COORD; + } + + awavp += sawav; + wavep += swave; + } + + return status; +} + +/*============================================================================ +* Conversions between vacuum wavelength and relativistic velocity. +*===========================================================================*/ + +int wavevelo( + double restwav, + int nwave, + int swave, + int svelo, + const double wave[], + double velo[], + int stat[]) + +{ + double r = restwav*restwav; + + const double *wavep = wave; + double *velop = velo; + int *statp = stat; + for (int iwave = 0; iwave < nwave; iwave++) { + double s = *wavep * *wavep; + *velop = C*(s - r)/(s + r); + *(statp++) = 0; + + wavep += swave; + velop += svelo; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int velowave( + double restwav, + int nvelo, + int svelo, + int swave, + const double velo[], + double wave[], + int stat[]) + +{ + const double *velop = velo; + double *wavep = wave; + int *statp = stat; + int status = 0; + for (int ivelo = 0; ivelo < nvelo; ivelo++) { + double s = C - *velop; + if (s != 0.0) { + *wavep = restwav*sqrt((C + *velop)/s); + *(statp++) = 0; + } else { + *(statp++) = 1; + status = SPXERR_BAD_INSPEC_COORD; + } + + velop += svelo; + wavep += swave; + } + + return status; +} + +/*============================================================================ +* Conversions between air wavelength and relativistic velocity. +*===========================================================================*/ + +int awavvelo( + double dummy, + int nawav, + int sawav, + int svelo, + const double awav[], + double velo[], + int stat[]) + +{ + int status; + if ((status = awavwave(dummy, nawav, sawav, svelo, awav, velo, stat))) { + return status; + } + + return wavevelo(dummy, nawav, svelo, svelo, velo, velo, stat); +} + +//---------------------------------------------------------------------------- + +int veloawav( + double dummy, + int nvelo, + int svelo, + int sawav, + const double velo[], + double awav[], + int stat[]) + +{ + int status; + if ((status = velowave(dummy, nvelo, svelo, sawav, velo, awav, stat))) { + return status; + } + + return waveawav(dummy, nvelo, sawav, sawav, awav, awav, stat); +} + +/*============================================================================ +* Conversions between frequency and angular frequency. +*===========================================================================*/ + +int freqafrq( + double dummy, + int nfreq, + int sfreq, + int safrq, + const double freq[], + double afrq[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *freqp = freq; + double *afrqp = afrq; + int *statp = stat; + for (int ifreq = 0; ifreq < nfreq; ifreq++) { + *afrqp = (*freqp)*(2.0*PI); + *(statp++) = 0; + + freqp += sfreq; + afrqp += safrq; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int afrqfreq( + double dummy, + int nafrq, + int safrq, + int sfreq, + const double afrq[], + double freq[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *afrqp = afrq; + double *freqp = freq; + int *statp = stat; + for (int iafrq = 0; iafrq < nafrq; iafrq++) { + *freqp = (*afrqp)/(2.0*PI); + *(statp++) = 0; + + afrqp += safrq; + freqp += sfreq; + } + + return 0; +} + +/*============================================================================ +* Conversions between frequency and energy. +*===========================================================================*/ + +int freqener( + double dummy, + int nfreq, + int sfreq, + int sener, + const double freq[], + double ener[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *freqp = freq; + double *enerp = ener; + int *statp = stat; + for (int ifreq = 0; ifreq < nfreq; ifreq++) { + *enerp = (*freqp)*h; + *(statp++) = 0; + + freqp += sfreq; + enerp += sener; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int enerfreq( + double dummy, + int nener, + int sener, + int sfreq, + const double ener[], + double freq[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *enerp = ener; + double *freqp = freq; + int *statp = stat; + for (int iener = 0; iener < nener; iener++) { + *freqp = (*enerp)/h; + *(statp++) = 0; + + enerp += sener; + freqp += sfreq; + } + + return 0; +} + +/*============================================================================ +* Conversions between frequency and wave number. +*===========================================================================*/ + +int freqwavn( + double dummy, + int nfreq, + int sfreq, + int swavn, + const double freq[], + double wavn[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *freqp = freq; + double *wavnp = wavn; + int *statp = stat; + for (int ifreq = 0; ifreq < nfreq; ifreq++) { + *wavnp = (*freqp)/C; + *(statp++) = 0; + + freqp += sfreq; + wavnp += swavn; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wavnfreq( + double dummy, + int nwavn, + int swavn, + int sfreq, + const double wavn[], + double freq[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *wavnp = wavn; + double *freqp = freq; + int *statp = stat; + for (int iwavn = 0; iwavn < nwavn; iwavn++) { + *freqp = (*wavnp)*C; + *(statp++) = 0; + + wavnp += swavn; + freqp += sfreq; + } + + return 0; +} + +/*============================================================================ +* Conversions between frequency and radio velocity. +*===========================================================================*/ + +int freqvrad( + double restfrq, + int nfreq, + int sfreq, + int svrad, + const double freq[], + double vrad[], + int stat[]) + +{ + if (restfrq == 0.0) { + return SPXERR_BAD_SPEC_PARAMS; + } + double r = C/restfrq; + + const double *freqp = freq; + double *vradp = vrad; + int *statp = stat; + for (int ifreq = 0; ifreq < nfreq; ifreq++) { + *vradp = r*(restfrq - *freqp); + *(statp++) = 0; + + freqp += sfreq; + vradp += svrad; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int vradfreq( + double restfrq, + int nvrad, + int svrad, + int sfreq, + const double vrad[], + double freq[], + int stat[]) + +{ + double r = restfrq/C; + + const double *vradp = vrad; + double *freqp = freq; + int *statp = stat; + for (int ivrad = 0; ivrad < nvrad; ivrad++) { + *freqp = r*(C - *vradp); + *(statp++) = 0; + vradp += svrad; + freqp += sfreq; + } + + return 0; +} + +/*============================================================================ +* Conversions between vacuum wavelength and optical velocity. +*===========================================================================*/ + +int wavevopt( + double restwav, + int nwave, + int swave, + int svopt, + const double wave[], + double vopt[], + int stat[]) + +{ + if (restwav == 0.0) { + return SPXERR_BAD_SPEC_PARAMS; + } + double r = C/restwav; + + const double *wavep = wave; + double *voptp = vopt; + int *statp = stat; + for (int iwave = 0; iwave < nwave; iwave++) { + *voptp = r*(*wavep) - C; + *(statp++) = 0; + wavep += swave; + voptp += svopt; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int voptwave( + double restwav, + int nvopt, + int svopt, + int swave, + const double vopt[], + double wave[], + int stat[]) + +{ + double r = restwav/C; + + const double *voptp = vopt; + double *wavep = wave; + int *statp = stat; + for (int ivopt = 0; ivopt < nvopt; ivopt++) { + *wavep = r*(C + *voptp); + *(statp++) = 0; + voptp += svopt; + wavep += swave; + } + + return 0; +} + +/*============================================================================ +* Conversions between vacuum wavelength and redshift. +*===========================================================================*/ + +int wavezopt( + double restwav, + int nwave, + int swave, + int szopt, + const double wave[], + double zopt[], + int stat[]) + +{ + if (restwav == 0.0) { + return SPXERR_BAD_SPEC_PARAMS; + } + double r = 1.0/restwav; + + const double *wavep = wave; + double *zoptp = zopt; + int *statp = stat; + for (int iwave = 0; iwave < nwave; iwave++) { + *zoptp = r*(*wavep) - 1.0; + *(statp++) = 0; + wavep += swave; + zoptp += szopt; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int zoptwave( + double restwav, + int nzopt, + int szopt, + int swave, + const double zopt[], + double wave[], + int stat[]) + +{ + const double *zoptp = zopt; + double *wavep = wave; + int *statp = stat; + for (int izopt = 0; izopt < nzopt; izopt++) { + *wavep = restwav*(1.0 + *zoptp); + *(statp++) = 0; + zoptp += szopt; + wavep += swave; + } + + return 0; +} + +/*============================================================================ +* Conversions between relativistic velocity and beta (= v/c). +*===========================================================================*/ + +int velobeta( + double dummy, + int nvelo, + int svelo, + int sbeta, + const double velo[], + double beta[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *velop = velo; + double *betap = beta; + int *statp = stat; + for (int ivelo = 0; ivelo < nvelo; ivelo++) { + *betap = (*velop)/C; + *(statp++) = 0; + + velop += svelo; + betap += sbeta; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int betavelo( + double dummy, + int nbeta, + int sbeta, + int svelo, + const double beta[], + double velo[], + int stat[]) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + const double *betap = beta; + double *velop = velo; + int *statp = stat; + for (int ibeta = 0; ibeta < nbeta; ibeta++) { + *velop = (*betap)*C; + *(statp++) = 0; + + betap += sbeta; + velop += svelo; + } + + return 0; +} diff --git a/deps/wcslib/C/spx.h b/deps/wcslib/C/spx.h new file mode 100644 index 0000000..39a2c9c --- /dev/null +++ b/deps/wcslib/C/spx.h @@ -0,0 +1,590 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: spx.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the spx routines +* --------------------------- +* Routines in this suite implement the spectral coordinate systems recognized +* by the FITS World Coordinate System (WCS) standard, as described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of spectral coordinates in FITS", += Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. += 2006, A&A, 446, 747 (WCS Paper III) +* +* specx() is a scalar routine that, given one spectral variable (e.g. +* frequency), computes all the others (e.g. wavelength, velocity, etc.) plus +* the required derivatives of each with respect to the others. The results +* are returned in the spxprm struct. +* +* spxperr() prints the error message(s) (if any) stored in a spxprm struct. +* +* The remaining routines are all vector conversions from one spectral +* variable to another. The API of these functions only differ in whether the +* rest frequency or wavelength need be supplied. +* +* Non-linear: +* - freqwave() frequency -> vacuum wavelength +* - wavefreq() vacuum wavelength -> frequency +* +* - freqawav() frequency -> air wavelength +* - awavfreq() air wavelength -> frequency +* +* - freqvelo() frequency -> relativistic velocity +* - velofreq() relativistic velocity -> frequency +* +* - waveawav() vacuum wavelength -> air wavelength +* - awavwave() air wavelength -> vacuum wavelength +* +* - wavevelo() vacuum wavelength -> relativistic velocity +* - velowave() relativistic velocity -> vacuum wavelength +* +* - awavvelo() air wavelength -> relativistic velocity +* - veloawav() relativistic velocity -> air wavelength +* +* Linear: +* - freqafrq() frequency -> angular frequency +* - afrqfreq() angular frequency -> frequency +* +* - freqener() frequency -> energy +* - enerfreq() energy -> frequency +* +* - freqwavn() frequency -> wave number +* - wavnfreq() wave number -> frequency +* +* - freqvrad() frequency -> radio velocity +* - vradfreq() radio velocity -> frequency +* +* - wavevopt() vacuum wavelength -> optical velocity +* - voptwave() optical velocity -> vacuum wavelength +* +* - wavezopt() vacuum wavelength -> redshift +* - zoptwave() redshift -> vacuum wavelength +* +* - velobeta() relativistic velocity -> beta (= v/c) +* - betavelo() beta (= v/c) -> relativistic velocity +* +* These are the workhorse routines, to be used for fast transformations. +* Conversions may be done "in place" by calling the routine with the output +* vector set to the input. +* +* Air-to-vacuum wavelength conversion: +* ------------------------------------ +* The air-to-vacuum wavelength conversion in early drafts of WCS Paper III +* cites Cox (ed., 2000, Allen’s Astrophysical Quantities, AIP Press, +* Springer-Verlag, New York), which itself derives from Edlén (1953, Journal +* of the Optical Society of America, 43, 339). This is the IAU standard, +* adopted in 1957 and again in 1991. No more recent IAU resolution replaces +* this relation, and it is the one used by WCSLIB. +* +* However, the Cox relation was replaced in later drafts of Paper III, and as +* eventually published, by the IUGG relation (1999, International Union of +* Geodesy and Geophysics, comptes rendus of the 22nd General Assembly, +* Birmingham UK, p111). There is a nearly constant ratio between the two, +* with IUGG/Cox = 1.000015 over most of the range between 200nm and 10,000nm. +* +* The IUGG relation itself is derived from the work of Ciddor (1996, Applied +* Optics, 35, 1566), which is used directly by the Sloan Digital Sky Survey. +* It agrees closely with Cox; longwards of 2500nm, the ratio Ciddor/Cox is +* fixed at 1.000000021, decreasing only slightly, to 1.000000018, at 1000nm. +* +* The Cox, IUGG, and Ciddor relations all accurately provide the wavelength +* dependence of the air-to-vacuum wavelength conversion. However, for full +* accuracy, the atmospheric temperature, pressure, and partial pressure of +* water vapour must be taken into account. These will determine a small, +* wavelength-independent scale factor and offset, which is not considered by +* WCS Paper III. +* +* WCS Paper III is also silent on the question of the range of validity of the +* air-to-vacuum wavelength conversion. Cox's relation would appear to be +* valid in the range 200nm to 10,000nm. Both the Cox and the Ciddor relations +* have singularities below 200nm, with Cox's at 156nm and 83nm. WCSLIB checks +* neither the range of validity, nor for these singularities. +* +* Argument checking: +* ------------------ +* The input spectral values are only checked for values that would result +* in floating point exceptions. In particular, negative frequencies and +* wavelengths are allowed, as are velocities greater than the speed of +* light. The same is true for the spectral parameters - rest frequency and +* wavelength. +* +* Accuracy: +* --------- +* No warranty is given for the accuracy of these routines (refer to the +* copyright notice); intending users must satisfy for themselves their +* adequacy for the intended purpose. However, closure effectively to within +* double precision rounding error was demonstrated by test routine tspec.c +* which accompanies this software. +* +* +* specx() - Spectral cross conversions (scalar) +* --------------------------------------------- +* Given one spectral variable specx() computes all the others, plus the +* required derivatives of each with respect to the others. +* +* Given: +* type const char* +* The type of spectral variable given by spec, FREQ, +* AFRQ, ENER, WAVN, VRAD, WAVE, VOPT, ZOPT, AWAV, VELO, +* or BETA (case sensitive). +* +* spec double The spectral variable given, in SI units. +* +* restfrq, +* restwav double Rest frequency [Hz] or rest wavelength in vacuo [m], +* only one of which need be given. The other should be +* set to zero. If both are zero, only a subset of the +* spectral variables can be computed, the remainder are +* set to zero. Specifically, given one of FREQ, AFRQ, +* ENER, WAVN, WAVE, or AWAV the others can be computed +* without knowledge of the rest frequency. Likewise, +* VRAD, VOPT, ZOPT, VELO, and BETA. +* +* Given and returned: +* specs struct spxprm* +* Data structure containing all spectral variables and +* their derivatives, in SI units. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spxprm pointer passed. +* 2: Invalid spectral parameters. +* 3: Invalid spectral variable. +* +* For returns > 1, a detailed error message is set in +* spxprm::err if enabled, see wcserr_enable(). +* +* freqafrq(), afrqfreq(), freqener(), enerfreq(), freqwavn(), wavnfreq(), +* freqwave(), wavefreq(), freqawav(), awavfreq(), waveawav(), awavwave(), +* velobeta(), and betavelo() implement vector conversions between wave-like +* or velocity-like spectral types (i.e. conversions that do not need the rest +* frequency or wavelength). They all have the same API. +* +* +* spxperr() - Print error messages from a spxprm struct +* ----------------------------------------------------- +* spxperr() prints the error message(s) (if any) stored in a spxprm struct. +* If there are no errors then nothing is printed. It uses wcserr_prt(), q.v. +* +* Given: +* spx const struct spxprm* +* Spectral variables and their derivatives. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null spxprm pointer passed. +* +* +* freqafrq() - Convert frequency to angular frequency (vector) +* ------------------------------------------------------------ +* freqafrq() converts frequency to angular frequency. +* +* Given: +* param double Ignored. +* +* nspec int Vector length. +* +* instep, +* outstep int Vector strides. +* +* inspec const double[] +* Input spectral variables, in SI units. +* +* Returned: +* outspec double[] Output spectral variables, in SI units. +* +* stat int[] Status return value for each vector element: +* 0: Success. +* 1: Invalid value of inspec. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid spectral parameters. +* 4: One or more of the inspec coordinates were +* invalid, as indicated by the stat vector. +* +* +* freqvelo(), velofreq(), freqvrad(), and vradfreq() implement vector +* conversions between frequency and velocity spectral types. They all have +* the same API. +* +* +* freqvelo() - Convert frequency to relativistic velocity (vector) +* ---------------------------------------------------------------- +* freqvelo() converts frequency to relativistic velocity. +* +* Given: +* param double Rest frequency [Hz]. +* +* nspec int Vector length. +* +* instep, +* outstep int Vector strides. +* +* inspec const double[] +* Input spectral variables, in SI units. +* +* Returned: +* outspec double[] Output spectral variables, in SI units. +* +* stat int[] Status return value for each vector element: +* 0: Success. +* 1: Invalid value of inspec. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid spectral parameters. +* 4: One or more of the inspec coordinates were +* invalid, as indicated by the stat vector. +* +* +* wavevelo(), velowave(), awavvelo(), veloawav(), wavevopt(), voptwave(), +* wavezopt(), and zoptwave() implement vector conversions between wavelength +* and velocity spectral types. They all have the same API. +* +* +* wavevelo() - Conversions between wavelength and velocity types (vector) +* ----------------------------------------------------------------------- +* wavevelo() converts vacuum wavelength to relativistic velocity. +* +* Given: +* param double Rest wavelength in vacuo [m]. +* +* nspec int Vector length. +* +* instep, +* outstep int Vector strides. +* +* inspec const double[] +* Input spectral variables, in SI units. +* +* Returned: +* outspec double[] Output spectral variables, in SI units. +* +* stat int[] Status return value for each vector element: +* 0: Success. +* 1: Invalid value of inspec. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Invalid spectral parameters. +* 4: One or more of the inspec coordinates were +* invalid, as indicated by the stat vector. +* +* +* spxprm struct - Spectral variables and their derivatives +* -------------------------------------------------------- +* The spxprm struct contains the value of all spectral variables and their +* derivatives. It is used solely by specx() which constructs it from +* information provided via its function arguments. +* +* This struct should be considered read-only, no members need ever be set nor +* should ever be modified by the user. +* +* double restfrq +* (Returned) Rest frequency [Hz]. +* +* double restwav +* (Returned) Rest wavelength [m]. +* +* int wavetype +* (Returned) True if wave types have been computed, and ... +* +* int velotype +* (Returned) ... true if velocity types have been computed; types are +* defined below. +* +* If one or other of spxprm::restfrq and spxprm::restwav is given +* (non-zero) then all spectral variables may be computed. If both are +* given, restfrq is used. If restfrq and restwav are both zero, only wave +* characteristic xor velocity type spectral variables may be computed +* depending on the variable given. These flags indicate what is +* available. +* +* double freq +* (Returned) Frequency [Hz] (wavetype). +* +* double afrq +* (Returned) Angular frequency [rad/s] (wavetype). +* +* double ener +* (Returned) Photon energy [J] (wavetype). +* +* double wavn +* (Returned) Wave number [/m] (wavetype). +* +* double vrad +* (Returned) Radio velocity [m/s] (velotype). +* +* double wave +* (Returned) Vacuum wavelength [m] (wavetype). +* +* double vopt +* (Returned) Optical velocity [m/s] (velotype). +* +* double zopt +* (Returned) Redshift [dimensionless] (velotype). +* +* double awav +* (Returned) Air wavelength [m] (wavetype). +* +* double velo +* (Returned) Relativistic velocity [m/s] (velotype). +* +* double beta +* (Returned) Relativistic beta [dimensionless] (velotype). +* +* double dfreqafrq +* (Returned) Derivative of frequency with respect to angular frequency +* [/rad] (constant, = 1 / 2*pi), and ... +* double dafrqfreq +* (Returned) ... vice versa [rad] (constant, = 2*pi, always available). +* +* double dfreqener +* (Returned) Derivative of frequency with respect to photon energy +* [/J/s] (constant, = 1/h), and ... +* double denerfreq +* (Returned) ... vice versa [Js] (constant, = h, Planck's constant, +* always available). +* +* double dfreqwavn +* (Returned) Derivative of frequency with respect to wave number [m/s] +* (constant, = c, the speed of light in vacuo), and ... +* double dwavnfreq +* (Returned) ... vice versa [s/m] (constant, = 1/c, always available). +* +* double dfreqvrad +* (Returned) Derivative of frequency with respect to radio velocity [/m], +* and ... +* double dvradfreq +* (Returned) ... vice versa [m] (wavetype && velotype). +* +* double dfreqwave +* (Returned) Derivative of frequency with respect to vacuum wavelength +* [/m/s], and ... +* double dwavefreq +* (Returned) ... vice versa [m s] (wavetype). +* +* double dfreqawav +* (Returned) Derivative of frequency with respect to air wavelength, +* [/m/s], and ... +* double dawavfreq +* (Returned) ... vice versa [m s] (wavetype). +* +* double dfreqvelo +* (Returned) Derivative of frequency with respect to relativistic +* velocity [/m], and ... +* double dvelofreq +* (Returned) ... vice versa [m] (wavetype && velotype). +* +* double dwavevopt +* (Returned) Derivative of vacuum wavelength with respect to optical +* velocity [s], and ... +* double dvoptwave +* (Returned) ... vice versa [/s] (wavetype && velotype). +* +* double dwavezopt +* (Returned) Derivative of vacuum wavelength with respect to redshift [m], +* and ... +* double dzoptwave +* (Returned) ... vice versa [/m] (wavetype && velotype). +* +* double dwaveawav +* (Returned) Derivative of vacuum wavelength with respect to air +* wavelength [dimensionless], and ... +* double dawavwave +* (Returned) ... vice versa [dimensionless] (wavetype). +* +* double dwavevelo +* (Returned) Derivative of vacuum wavelength with respect to relativistic +* velocity [s], and ... +* double dvelowave +* (Returned) ... vice versa [/s] (wavetype && velotype). +* +* double dawavvelo +* (Returned) Derivative of air wavelength with respect to relativistic +* velocity [s], and ... +* double dveloawav +* (Returned) ... vice versa [/s] (wavetype && velotype). +* +* double dvelobeta +* (Returned) Derivative of relativistic velocity with respect to +* relativistic beta [m/s] (constant, = c, the speed of light in vacuo), +* and ... +* double dbetavelo +* (Returned) ... vice versa [s/m] (constant, = 1/c, always available). +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* void *padding +* (An unused variable inserted for alignment purposes only.) +* +* +* Global variable: const char *spx_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_SPEC +#define WCSLIB_SPEC + +#ifdef __cplusplus +extern "C" { +#endif + +extern const char *spx_errmsg[]; + +enum spx_errmsg { + SPXERR_SUCCESS = 0, // Success. + SPXERR_NULL_POINTER = 1, // Null spxprm pointer passed. + SPXERR_BAD_SPEC_PARAMS = 2, // Invalid spectral parameters. + SPXERR_BAD_SPEC_VAR = 3, // Invalid spectral variable. + SPXERR_BAD_INSPEC_COORD = 4 // One or more of the inspec coordinates were + // invalid. +}; + +struct spxprm { + double restfrq, restwav; // Rest frequency [Hz] and wavelength [m]. + + int wavetype, velotype; // True if wave/velocity types have been + // computed; types are defined below. + + // Spectral variables computed by specx(). + //-------------------------------------------------------------------------- + double freq, // wavetype: Frequency [Hz]. + afrq, // wavetype: Angular frequency [rad/s]. + ener, // wavetype: Photon energy [J]. + wavn, // wavetype: Wave number [/m]. + vrad, // velotype: Radio velocity [m/s]. + wave, // wavetype: Vacuum wavelength [m]. + vopt, // velotype: Optical velocity [m/s]. + zopt, // velotype: Redshift. + awav, // wavetype: Air wavelength [m]. + velo, // velotype: Relativistic velocity [m/s]. + beta; // velotype: Relativistic beta. + + // Derivatives of spectral variables computed by specx(). + //-------------------------------------------------------------------------- + double dfreqafrq, dafrqfreq, // Constant, always available. + dfreqener, denerfreq, // Constant, always available. + dfreqwavn, dwavnfreq, // Constant, always available. + dfreqvrad, dvradfreq, // wavetype && velotype. + dfreqwave, dwavefreq, // wavetype. + dfreqawav, dawavfreq, // wavetype. + dfreqvelo, dvelofreq, // wavetype && velotype. + dwavevopt, dvoptwave, // wavetype && velotype. + dwavezopt, dzoptwave, // wavetype && velotype. + dwaveawav, dawavwave, // wavetype. + dwavevelo, dvelowave, // wavetype && velotype. + dawavvelo, dveloawav, // wavetype && velotype. + dvelobeta, dbetavelo; // Constant, always available. + + // Error handling + //-------------------------------------------------------------------------- + struct wcserr *err; + + // Private + //-------------------------------------------------------------------------- + void *padding; // (Dummy inserted for alignment purposes.) +}; + +// Size of the spxprm struct in int units, used by the Fortran wrappers. +#define SPXLEN (sizeof(struct spxprm)/sizeof(int)) + + +int specx(const char *type, double spec, double restfrq, double restwav, + struct spxprm *specs); + +int spxperr(const struct spxprm *spx, const char *prefix); + +// For use in declaring function prototypes, e.g. in spcprm. +#define SPX_ARGS double param, int nspec, int instep, int outstep, \ + const double inspec[], double outspec[], int stat[] + +int freqafrq(SPX_ARGS); +int afrqfreq(SPX_ARGS); + +int freqener(SPX_ARGS); +int enerfreq(SPX_ARGS); + +int freqwavn(SPX_ARGS); +int wavnfreq(SPX_ARGS); + +int freqwave(SPX_ARGS); +int wavefreq(SPX_ARGS); + +int freqawav(SPX_ARGS); +int awavfreq(SPX_ARGS); + +int waveawav(SPX_ARGS); +int awavwave(SPX_ARGS); + +int velobeta(SPX_ARGS); +int betavelo(SPX_ARGS); + + +int freqvelo(SPX_ARGS); +int velofreq(SPX_ARGS); + +int freqvrad(SPX_ARGS); +int vradfreq(SPX_ARGS); + + +int wavevelo(SPX_ARGS); +int velowave(SPX_ARGS); + +int awavvelo(SPX_ARGS); +int veloawav(SPX_ARGS); + +int wavevopt(SPX_ARGS); +int voptwave(SPX_ARGS); + +int wavezopt(SPX_ARGS); +int zoptwave(SPX_ARGS); + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_SPEC diff --git a/deps/wcslib/C/tab.c b/deps/wcslib/C/tab.c new file mode 100644 index 0000000..bb74e2e --- /dev/null +++ b/deps/wcslib/C/tab.c @@ -0,0 +1,1750 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tab.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcsutil.h" +#include "tab.h" + +// Map status return value to message. +const char *tab_errmsg[] = { + "Success", + "Null tabprm pointer passed", + "Memory allocation failed", + "Invalid tabular parameters", + "One or more of the x coordinates were invalid", + "One or more of the world coordinates were invalid"}; + +static const int TABSET = 137; + +// Convenience macro for invoking wcserr_set(). +#define TAB_ERRMSG(status) WCSERR_SET(status), tab_errmsg[status] + +//---------------------------------------------------------------------------- + +int tabini(int alloc, int M, const int K[], struct tabprm *tab) + +{ + static const char *function = "tabini"; + + if (tab == 0x0) return TABERR_NULL_POINTER; + + // Initialize error message handling. + if (tab->flag == -1) { + tab->err = 0x0; + } + struct wcserr **err = &(tab->err); + wcserr_clear(err); + + + if (M <= 0) { + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "M must be positive, got %d", M); + } + + // Determine the total number of elements in the coordinate array. + int N; + if (K) { + N = M; + + for (int m = 0; m < M; m++) { + if (K[m] < 0) { + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: Each element of K must be " + "non-negative, got %d", K[m]); + } + + N *= K[m]; + } + + } else { + // Axis lengths as yet unknown. + N = 0; + } + + + // Initialize memory management. + if (tab->flag == -1 || tab->m_flag != TABSET) { + if (tab->flag == -1) { + tab->sense = 0x0; + tab->p0 = 0x0; + tab->delta = 0x0; + tab->extrema = 0x0; + tab->set_M = 0; + } + + tab->m_flag = 0; + tab->m_M = 0; + tab->m_N = 0; + tab->m_K = 0x0; + tab->m_map = 0x0; + tab->m_crval = 0x0; + tab->m_index = 0x0; + tab->m_indxs = 0x0; + tab->m_coord = 0x0; + + } else { + // Clear any outstanding signals set by wcstab(). + for (int m = 0; m < tab->m_M; m++) { + if (tab->m_indxs[m] == (double *)0x1) tab->m_indxs[m] = 0x0; + } + + if (tab->m_coord == (double *)0x1) tab->m_coord = 0x0; + } + + + // Allocate memory for arrays if required. + if (alloc || + tab->K == 0x0 || + tab->map == 0x0 || + tab->crval == 0x0 || + tab->index == 0x0 || + tab->coord == 0x0) { + + // Was sufficient allocated previously? + if (tab->m_flag == TABSET && (tab->m_M < M || tab->m_N < N)) { + // No, free it. + tabfree(tab); + } + + if (alloc || tab->K == 0x0) { + if (tab->m_K) { + // In case the caller fiddled with it. + tab->K = tab->m_K; + + } else { + if (!(tab->K = calloc(M, sizeof(int)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + tab->m_flag = TABSET; + tab->m_M = M; + tab->m_K = tab->K; + } + } + + if (alloc || tab->map == 0x0) { + if (tab->m_map) { + // In case the caller fiddled with it. + tab->map = tab->m_map; + + } else { + if (!(tab->map = calloc(M, sizeof(int)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + tab->m_flag = TABSET; + tab->m_M = M; + tab->m_map = tab->map; + } + } + + if (alloc || tab->crval == 0x0) { + if (tab->m_crval) { + // In case the caller fiddled with it. + tab->crval = tab->m_crval; + + } else { + if (!(tab->crval = calloc(M, sizeof(double)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + tab->m_flag = TABSET; + tab->m_M = M; + tab->m_crval = tab->crval; + } + } + + if (alloc || tab->index == 0x0) { + if (tab->m_index) { + // In case the caller fiddled with it. + tab->index = tab->m_index; + + } else { + if (!(tab->index = calloc(M, sizeof(double *)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + tab->m_flag = TABSET; + tab->m_M = M; + tab->m_N = N; + tab->m_index = tab->index; + + if (!(tab->m_indxs = calloc(M, sizeof(double *)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + // Recall that calloc() initializes these pointers to zero. + if (K) { + for (int m = 0; m < M; m++) { + if (K[m]) { + if (!(tab->index[m] = calloc(K[m], sizeof(double)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + tab->m_indxs[m] = tab->index[m]; + } + } + } + } + } + + if (alloc || tab->coord == 0x0) { + if (tab->m_coord) { + // In case the caller fiddled with it. + tab->coord = tab->m_coord; + + } else if (N) { + if (!(tab->coord = calloc(N, sizeof(double)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + tab->m_flag = TABSET; + tab->m_M = M; + tab->m_N = N; + tab->m_coord = tab->coord; + } + } + } + + tab->M = M; + + // Set defaults. + for (int m = 0; m < M; m++) { + tab->map[m] = -1; + tab->crval[m] = 0.0; + + if (K) { + tab->K[m] = K[m]; + double *dp; + if ((dp = tab->index[m])) { + // Table indexes are 1-relative. + for (int k = 1; k <= K[m]; k++) { + *(dp++) = k; + } + } + } else { + tab->K[m] = 0; + } + } + + // Initialize the coordinate array. + for (double *dp = tab->coord; dp < tab->coord + N; dp++) { + *dp = UNDEFINED; + } + + tab->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabmem(struct tabprm *tab) + +{ + static const char *function = "tabmem"; + + if (tab == 0x0) return TABERR_NULL_POINTER; + struct wcserr **err = &(tab->err); + + if (tab->M == 0 || tab->K == 0x0) { + // Should have been set by this time. + return wcserr_set(WCSERR_SET(TABERR_MEMORY), + "Null pointers in tabprm struct"); + } + + + int M = tab->M; + int N = tab->M; + for (int m = 0; m < M; m++) { + if (tab->K[m] < 0) { + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: Each element of K must be " + "non-negative, got %d", M); + } + + N *= tab->K[m]; + } + + + if (tab->m_M == 0) { + tab->m_M = M; + } else if (tab->m_M < M) { + // Only possible if the user changed M. + return wcserr_set(WCSERR_SET(TABERR_MEMORY), + "tabprm struct inconsistent"); + } + + if (tab->m_N == 0) { + tab->m_N = N; + } else if (tab->m_N < N) { + // Only possible if the user changed K[]. + return wcserr_set(WCSERR_SET(TABERR_MEMORY), + "tabprm struct inconsistent"); + } + + if (tab->m_K == 0x0) { + if ((tab->m_K = tab->K)) { + tab->m_flag = TABSET; + } + } + + if (tab->m_map == 0x0) { + if ((tab->m_map = tab->map)) { + tab->m_flag = TABSET; + } + } + + if (tab->m_crval == 0x0) { + if ((tab->m_crval = tab->crval)) { + tab->m_flag = TABSET; + } + } + + if (tab->m_index == 0x0) { + if ((tab->m_index = tab->index)) { + tab->m_flag = TABSET; + } + } + + for (int m = 0; m < tab->m_M; m++) { + if (tab->m_indxs[m] == 0x0 || tab->m_indxs[m] == (double *)0x1) { + if ((tab->m_indxs[m] = tab->index[m])) { + tab->m_flag = TABSET; + } + } + } + + if (tab->m_coord == 0x0 || tab->m_coord == (double *)0x1) { + if ((tab->m_coord = tab->coord)) { + tab->m_flag = TABSET; + } + } + + tab->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabcpy(int alloc, const struct tabprm *tabsrc, struct tabprm *tabdst) + +{ + static const char *function = "tabcpy"; + + int status; + + if (tabsrc == 0x0) return TABERR_NULL_POINTER; + if (tabdst == 0x0) return TABERR_NULL_POINTER; + struct wcserr **err = &(tabdst->err); + + int M = tabsrc->M; + if (M <= 0) { + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "M must be positive, got %d", M); + } + + if ((status = tabini(alloc, M, tabsrc->K, tabdst))) { + return status; + } + + int N = M; + for (int m = 0; m < M; m++) { + tabdst->map[m] = tabsrc->map[m]; + tabdst->crval[m] = tabsrc->crval[m]; + N *= tabsrc->K[m]; + } + + double *dstp, *srcp; + for (int m = 0; m < M; m++) { + if ((srcp = tabsrc->index[m])) { + dstp = tabdst->index[m]; + for (int k = 0; k < tabsrc->K[m]; k++) { + *(dstp++) = *(srcp++); + } + } else { + if (tabdst->m_indxs && tabdst->m_indxs[m]) { + free(tabdst->m_indxs[m]); + tabdst->index[m] = 0x0; + tabdst->m_indxs[m] = 0x0; + } + } + } + + srcp = tabsrc->coord; + dstp = tabdst->coord; + for (int n = 0; n < N; n++) { + *(dstp++) = *(srcp++); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabcmp( + int dummy, + double tol, + const struct tabprm *tab1, + const struct tabprm *tab2, + int *equal) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + if (tab1 == 0x0) return TABERR_NULL_POINTER; + if (tab2 == 0x0) return TABERR_NULL_POINTER; + if (equal == 0x0) return TABERR_NULL_POINTER; + + *equal = 0; + + if (tab1->M != tab2->M) { + return 0; + } + + int M = tab1->M; + + if (!wcsutil_intEq(M, tab1->K, tab2->K) || + !wcsutil_intEq(M, tab1->map, tab2->map) || + !wcsutil_dblEq(M, tol, tab1->crval, tab2->crval)) { + return 0; + } + + int N = M; + for (int m = 0; m < M; m++) { + if (!wcsutil_dblEq(tab1->K[m], tol, tab1->index[m], tab2->index[m])) { + return 0; + } + + N *= tab1->K[m]; + } + + if (!wcsutil_dblEq(N, tol, tab1->coord, tab2->coord)) { + return 0; + } + + *equal = 1; + + return 0; +} + + +//---------------------------------------------------------------------------- + +int tabfree(struct tabprm *tab) + +{ + if (tab == 0x0) return TABERR_NULL_POINTER; + + if (tab->flag != -1) { + // Clear any outstanding signals set by wcstab(). + for (int m = 0; m < tab->m_M; m++) { + if (tab->m_indxs[m] == (double *)0x1) tab->m_indxs[m] = 0x0; + } + + if (tab->m_coord == (double *)0x1) tab->m_coord = 0x0; + + // Free memory allocated by tabini(). + if (tab->m_flag == TABSET) { + if (tab->K == tab->m_K) tab->K = 0x0; + if (tab->map == tab->m_map) tab->map = 0x0; + if (tab->crval == tab->m_crval) tab->crval = 0x0; + if (tab->index == tab->m_index) tab->index = 0x0; + if (tab->coord == tab->m_coord) tab->coord = 0x0; + + if (tab->m_K) free(tab->m_K); + if (tab->m_map) free(tab->m_map); + if (tab->m_crval) free(tab->m_crval); + + if (tab->m_index) { + for (int m = 0; m < tab->m_M; m++) { + if (tab->m_indxs[m]) free(tab->m_indxs[m]); + } + free(tab->m_index); + free(tab->m_indxs); + } + + if (tab->m_coord) free(tab->m_coord); + } + + // Free memory allocated by tabset(). + if (tab->sense) free(tab->sense); + if (tab->p0) free(tab->p0); + if (tab->delta) free(tab->delta); + if (tab->extrema) free(tab->extrema); + } + + tab->m_flag = 0; + tab->m_M = 0; + tab->m_N = 0; + tab->m_K = 0x0; + tab->m_map = 0x0; + tab->m_crval = 0x0; + tab->m_index = 0x0; + tab->m_indxs = 0x0; + tab->m_coord = 0x0; + + tab->sense = 0x0; + tab->p0 = 0x0; + tab->delta = 0x0; + tab->extrema = 0x0; + tab->set_M = 0; + + wcserr_clear(&(tab->err)); + + tab->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabsize(const struct tabprm *tab, int sizes[2]) + +{ + if (tab == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct tabprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + int exsizes[2]; + int M = tab->M; + + // tabprm::K[]; + sizes[1] += M * sizeof(int); + + // tabprm::map[]; + sizes[1] += M * sizeof(int); + + // tabprm::crval[]; + sizes[1] += M * sizeof(double); + + // tabprm::index[] and tabprm::m_indxs; + sizes[1] += 2*M * sizeof(double *); + for (int m = 0; m < M; m++) { + if (tab->index[m]) { + sizes[1] += tab->K[m] * sizeof(double); + } + } + + // tabprm::coord[]; + sizes[1] += M * tab->nc * sizeof(double); + + // tab::err[]. + wcserr_size(tab->err, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + // The remaining arrays are allocated by tabset(). + if (abs(tab->flag) != TABSET) { + return 0; + } + + // tabprm::sense[]. + if (tab->sense) { + sizes[1] += M * sizeof(int); + } + + // tabprm::p0[]. + if (tab->p0) { + sizes[1] += M * sizeof(int); + } + + // tabprm::delta[]. + if (tab->delta) { + sizes[1] += M * sizeof(double); + } + + // tabprm::extrema[]. + int ne = (tab->nc / tab->K[0]) * 2 * M; + sizes[1] += ne * sizeof(double); + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabenq(const struct tabprm *tab, int enquiry) + +{ + // Initialize. + if (tab == 0x0) return TABERR_NULL_POINTER; + + int answer = 0; + + if (enquiry & TABENQ_MEM) { + if (tab->m_flag != TABSET) return 0; + answer = 1; + } + + if (enquiry & TABENQ_SET) { + if (abs(tab->flag) != TABSET) return 0; + answer = 1; + } + + if (enquiry & TABENQ_BYP) { + if (tab->flag != 1 && tab->flag != -TABSET) return 0; + answer = 1; + } + + return answer; +} + +//---------------------------------------------------------------------------- + +int tabprt(const struct tabprm *tab) + +{ + char *cp, text[128]; + double *dp; + + if (tab == 0x0) return TABERR_NULL_POINTER; + + if (abs(tab->flag) != TABSET) { + wcsprintf("The tabprm struct is UNINITIALIZED.\n"); + return 0; + } + + // Parameters supplied... + wcsprintf(" flag: %d\n", tab->flag); + wcsprintf(" M: %d\n", tab->M); + + // ...array dimensions. + WCSPRINTF_PTR(" K: ", tab->K, "\n"); + wcsprintf(" "); + for (int m = 0; m < tab->M; m++) { + wcsprintf("%6d", tab->K[m]); + } + wcsprintf("\n"); + + // ...map vector. + WCSPRINTF_PTR(" map: ", tab->map, "\n"); + wcsprintf(" "); + for (int m = 0; m < tab->M; m++) { + wcsprintf("%6d", tab->map[m]); + } + wcsprintf("\n"); + + // ...reference index value. + WCSPRINTF_PTR(" crval: ", tab->crval, "\n"); + wcsprintf(" "); + for (int m = 0; m < tab->M; m++) { + wcsprintf(" %#- 11.5g", tab->crval[m]); + } + wcsprintf("\n"); + + // ...index vectors. + WCSPRINTF_PTR(" index: ", tab->index, "\n"); + for (int m = 0; m < tab->M; m++) { + wcsprintf(" index[%d]: ", m); + WCSPRINTF_PTR("", tab->index[m], ""); + if (tab->index[m]) { + for (int k = 0; k < tab->K[m]; k++) { + if (k%5 == 0) { + wcsprintf("\n "); + } + wcsprintf(" %#- 11.5g", tab->index[m][k]); + } + } + wcsprintf("\n"); + } + + // ...coordinate array. + WCSPRINTF_PTR(" coord: ", tab->coord, "\n"); + dp = tab->coord; + for (int n = 0; n < tab->nc; n++) { + // Array index. + int j = n; + cp = text; + for (int m = 0; m < tab->M; m++) { + int nd = (tab->K[m] < 10) ? 1 : 2; + sprintf(cp, ",%*d", nd, j % tab->K[m] + 1); + j /= tab->K[m]; + cp += strlen(cp); + } + + wcsprintf(" (*%s)", text); + for (int m = 0; m < tab->M; m++) { + wcsprintf(" %#- 11.5g", *(dp++)); + } + wcsprintf("\n"); + } + + // Derived values. + wcsprintf(" nc: %d\n", tab->nc); + + WCSPRINTF_PTR(" sense: ", tab->sense, "\n"); + if (tab->sense) { + wcsprintf(" "); + for (int m = 0; m < tab->M; m++) { + wcsprintf("%6d", tab->sense[m]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" p0: ", tab->p0, "\n"); + if (tab->p0) { + wcsprintf(" "); + for (int m = 0; m < tab->M; m++) { + wcsprintf("%6d", tab->p0[m]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" delta: ", tab->delta, "\n"); + if (tab->delta) { + wcsprintf(" "); + for (int m = 0; m < tab->M; m++) { + wcsprintf(" %#- 11.5g", tab->delta[m]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" extrema: ", tab->extrema, "\n"); + dp = tab->extrema; + for (int n = 0; n < tab->nc/tab->K[0]; n++) { + // Array index. + int j = n; + cp = text; + *cp = '\0'; + for (int m = 1; m < tab->M; m++) { + int nd = (tab->K[m] < 10) ? 1 : 2; + sprintf(cp, ",%*d", nd, j % tab->K[m] + 1); + j /= tab->K[m]; + cp += strlen(cp); + } + + wcsprintf(" (*,*%s)", text); + for (int m = 0; m < 2*tab->M; m++) { + if (m == tab->M) wcsprintf("-> "); + wcsprintf(" %#- 11.5g", *(dp++)); + } + wcsprintf("\n"); + } + + // Error handling. + WCSPRINTF_PTR(" err: ", tab->err, "\n"); + if (tab->err) { + wcserr_prt(tab->err, " "); + } + + // Memory management. + wcsprintf(" m_flag: %d\n", tab->m_flag); + wcsprintf(" m_M: %d\n", tab->m_M); + wcsprintf(" m_N: %d\n", tab->m_N); + + WCSPRINTF_PTR(" m_K: ", tab->m_K, ""); + if (tab->m_K == tab->K) wcsprintf(" (= K)"); + wcsprintf("\n"); + + WCSPRINTF_PTR(" m_map: ", tab->m_map, ""); + if (tab->m_map == tab->map) wcsprintf(" (= map)"); + wcsprintf("\n"); + + WCSPRINTF_PTR(" m_crval: ", tab->m_crval, ""); + if (tab->m_crval == tab->crval) wcsprintf(" (= crval)"); + wcsprintf("\n"); + + WCSPRINTF_PTR(" m_index: ", tab->m_index, ""); + if (tab->m_index == tab->index) wcsprintf(" (= index)"); + wcsprintf("\n"); + for (int m = 0; m < tab->M; m++) { + wcsprintf(" m_indxs[%d]: ", m); + WCSPRINTF_PTR("", tab->m_indxs[m], ""); + if (tab->m_indxs[m] == tab->index[m]) wcsprintf(" (= index[%d])", m); + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" m_coord: ", tab->m_coord, ""); + if (tab->m_coord == tab->coord) wcsprintf(" (= coord)"); + wcsprintf("\n"); + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabperr(const struct tabprm *tab, const char *prefix) + +{ + if (tab == 0x0) return TABERR_NULL_POINTER; + + if (tab->err) { + wcserr_prt(tab->err, prefix); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabset(struct tabprm *tab) + +{ + static const char *function = "tabset"; + + if (tab == 0x0) return TABERR_NULL_POINTER; + if (tab->flag == -TABSET) return 0; + struct wcserr **err = &(tab->err); + + // Check the number of tabular coordinate axes. + int M = tab->M; + if (M < 1) { + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: M must be positive, got %d", M); + } + + // Check the axis lengths. + if (!tab->K) { + return wcserr_set(WCSERR_SET(TABERR_MEMORY), + "Null pointers in tabprm struct"); + } + + tab->nc = 1; + for (int m = 0; m < M; m++) { + if (tab->K[m] < 1) { + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: Each element of K must be positive, " + "got %d", tab->K[m]); + } + + // Number of coordinate vectors in the coordinate array. + tab->nc *= tab->K[m]; + } + + // Check that the map vector is sensible. + if (!tab->map) { + return wcserr_set(WCSERR_SET(TABERR_MEMORY), + "Null pointers in tabprm struct"); + } + + for (int m = 0; m < M; m++) { + int i = tab->map[m]; + if (i < 0) { + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: Each element of map must be " + "non-negative, got %d", i); + } + } + + // Check memory allocation for the remaining vectors. + if (!tab->crval || !tab->index || !tab->coord) { + return wcserr_set(WCSERR_SET(TABERR_MEMORY), + "Null pointers in tabprm struct"); + } + + // Take memory if signalled to by wcstab(). + for (int m = 0; m < tab->m_M; m++) { + if (tab->m_indxs[m] == (double *)0x1 && + (tab->m_indxs[m] = tab->index[m])) { + tab->m_flag = TABSET; + } + } + + if (tab->m_coord == (double *)0x1 && + (tab->m_coord = tab->coord)) { + tab->m_flag = TABSET; + } + + + // Allocate memory for work vectors. + if (abs(tab->flag) != TABSET || tab->set_M < M) { + // Free memory that may have been allocated previously. + if (tab->sense) free(tab->sense); + if (tab->p0) free(tab->p0); + if (tab->delta) free(tab->delta); + if (tab->extrema) free(tab->extrema); + + tab->sense = 0x0; + tab->p0 = 0x0; + tab->delta = 0x0; + tab->extrema = 0x0; + + // Allocate memory for internal arrays. + if (!(tab->sense = calloc(M, sizeof(int)))) { + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + if (!(tab->p0 = calloc(M, sizeof(int)))) { + free(tab->sense); + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + if (!(tab->delta = calloc(M, sizeof(double)))) { + free(tab->sense); + free(tab->p0); + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + int ne = (tab->nc / tab->K[0]) * 2 * M; + if (!(tab->extrema = calloc(ne, sizeof(double)))) { + free(tab->sense); + free(tab->p0); + free(tab->delta); + return wcserr_set(TAB_ERRMSG(TABERR_MEMORY)); + } + + tab->set_M = M; + } + + // Check that the index vectors are monotonic. + int *Km = tab->K; + for (int m = 0; m < M; m++, Km++) { + tab->sense[m] = 0; + + if (*Km > 1) { + double *Psi; + if ((Psi = tab->index[m]) == 0x0) { + // Default indexing. + tab->sense[m] = 1; + + } else { + for (int k = 0; k < *Km-1; k++) { + switch (tab->sense[m]) { + case 0: + if (Psi[k] < Psi[k+1]) { + // Monotonic increasing. + tab->sense[m] = 1; + } else if (Psi[k] > Psi[k+1]) { + // Monotonic decreasing. + tab->sense[m] = -1; + } + break; + + case 1: + if (Psi[k] > Psi[k+1]) { + // Should be monotonic increasing. + free(tab->sense); + free(tab->p0); + free(tab->delta); + free(tab->extrema); + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: Index vectors are not " + "monotonically increasing"); + } + break; + + case -1: + if (Psi[k] < Psi[k+1]) { + // Should be monotonic decreasing. + free(tab->sense); + free(tab->p0); + free(tab->delta); + free(tab->extrema); + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: Index vectors are not " + "monotonically decreasing"); + } + break; + } + } + } + + if (tab->sense[m] == 0) { + free(tab->sense); + free(tab->p0); + free(tab->delta); + free(tab->extrema); + return wcserr_set(WCSERR_SET(TABERR_BAD_PARAMS), + "Invalid tabular parameters: Index vectors are not monotonic"); + } + } + } + + // Find the extremal values of the coordinate elements in each row. + double *dcrd = tab->coord; + double *dmin = tab->extrema; + double *dmax = tab->extrema + M; + for (int ic = 0; ic < tab->nc; ic += tab->K[0]) { + for (int m = 0; m < M; m++, dcrd++) { + if (tab->K[0] > 1) { + // Extrapolate a little before the start of the row. + double dPsi; + double *Psi = tab->index[0]; + if (Psi == 0x0) { + dPsi = 1.0; + } else { + dPsi = Psi[1] - Psi[0]; + } + + double dval = *dcrd; + if (dPsi != 0.0) { + dval -= 0.5 * (*(dcrd+M) - *dcrd)/dPsi; + } + + *(dmax+m) = *(dmin+m) = dval; + } else { + *(dmax+m) = *(dmin+m) = *dcrd; + } + } + + dcrd -= M; + for (int i = 0; i < tab->K[0]; i++) { + for (int m = 0; m < M; m++, dcrd++) { + if (*(dmax+m) < *dcrd) *(dmax+m) = *dcrd; + if (*(dmin+m) > *dcrd) *(dmin+m) = *dcrd; + + if (tab->K[0] > 1 && i == tab->K[0]-1) { + // Extrapolate a little beyond the end of the row. + double dPsi; + double *Psi = tab->index[0]; + if (Psi == 0x0) { + dPsi = 1.0; + } else { + dPsi = Psi[i] - Psi[i-1]; + } + + double dval = *dcrd; + if (dPsi != 0.0) { + dval += 0.5 * (*dcrd - *(dcrd-M))/dPsi; + } + + if (*(dmax+m) < dval) *(dmax+m) = dval; + if (*(dmin+m) > dval) *(dmin+m) = dval; + } + } + } + + dmin += 2*M; + dmax += 2*M; + } + + tab->flag = (tab->flag == 1) ? -TABSET : TABSET; + + return 0; +} + +//---------------------------------------------------------------------------- + +int tabx2s( + struct tabprm *tab, + int ncoord, + int nelem, + const double x[], + double world[], + int stat[]) + +{ + static const char *function = "tabx2s"; + + int status; + + if (tab == 0x0) return TABERR_NULL_POINTER; + struct wcserr **err = &(tab->err); + + // Initialize if required. + if (abs(tab->flag) != TABSET) { + if ((status = tabset(tab))) return status; + } + + // This is used a lot. + int M = tab->M; + + status = 0; + const double *xp = x; + double *wp = world; + int *statp = stat; + for (int n = 0; n < ncoord; n++) { + // Determine the indexes. + int *Km = tab->K; + for (int m = 0; m < M; m++, Km++) { + // N.B. psi_m and Upsilon_m are 1-relative FITS indexes. + int i = tab->map[m]; + double psi_m = *(xp+i) + tab->crval[m]; + + double *Psi = tab->index[m]; + double upsilon; + if (Psi == 0x0) { + // Default indexing is simple. + upsilon = psi_m; + + } else { + // To ease confusion, decrement Psi so that we can use 1-relative + // C array indexing to match the 1-relative FITS indexing. + Psi--; + + if (*Km == 1) { + // Index vector is degenerate. + if (Psi[1]-0.5 <= psi_m && psi_m <= Psi[1]+0.5) { + upsilon = psi_m; + } else { + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); + goto next; + } + + } else { + // Interpolate in the indexing vector. + int k; + if (tab->sense[m] == 1) { + // Monotonic increasing index values. + if (psi_m < Psi[1]) { + if (Psi[1] - 0.5*(Psi[2]-Psi[1]) <= psi_m) { + // Allow minor extrapolation. + k = 1; + + } else { + // Index is out of range. + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); + goto next; + } + + } else if (Psi[*Km] < psi_m) { + if (psi_m <= Psi[*Km] + 0.5*(Psi[*Km]-Psi[*Km-1])) { + // Allow minor extrapolation. + k = *Km - 1; + + } else { + // Index is out of range. + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); + goto next; + } + + } else { + for (k = 1; k < *Km; k++) { + if (psi_m < Psi[k]) { + continue; + } + if (Psi[k] == psi_m && psi_m < Psi[k+1]) { + break; + } + if (Psi[k] < psi_m && psi_m <= Psi[k+1]) { + break; + } + } + } + + } else { + // Monotonic decreasing index values. + if (psi_m > Psi[1]) { + if (Psi[1] + 0.5*(Psi[1]-Psi[2]) >= psi_m) { + // Allow minor extrapolation. + k = 1; + + } else { + // Index is out of range. + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); + goto next; + } + + } else if (psi_m < Psi[*Km]) { + if (Psi[*Km] - 0.5*(Psi[*Km-1]-Psi[*Km]) <= psi_m) { + // Allow minor extrapolation. + k = *Km - 1; + + } else { + // Index is out of range. + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); + goto next; + } + + } else { + for (k = 1; k < *Km; k++) { + if (psi_m > Psi[k]) { + continue; + } + if (Psi[k] == psi_m && psi_m > Psi[k+1]) { + break; + } + if (Psi[k] > psi_m && psi_m >= Psi[k+1]) { + break; + } + } + } + } + + upsilon = k + (psi_m - Psi[k]) / (Psi[k+1] - Psi[k]); + } + } + + if (upsilon < 0.5 || upsilon > *Km + 0.5) { + // Index out of range. + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_X)); + goto next; + } + + // Fiducial array indices and fractional offset. + // p1 is 1-relative while tab::p0 is 0-relative. + int p1 = (int)floor(upsilon); + tab->p0[m] = p1 - 1; + tab->delta[m] = upsilon - p1; + + if (p1 == 0) { + // Extrapolation below p1 == 1. + tab->p0[m] += 1; + tab->delta[m] -= 1.0; + } else if (p1 == *Km && *Km > 1) { + // Extrapolation above p1 == K_m. + tab->p0[m] -= 1; + tab->delta[m] += 1.0; + } + } + + + // Now interpolate in the coordinate array; the M-dimensional linear + // interpolation algorithm is described in Sect. 3.4 of WCS Paper IV. + for (int m = 0; m < M; m++) { + int i = tab->map[m]; + *(wp+i) = 0.0; + } + + // Loop over the 2^M vertices surrounding P. + int nv = 1 << M; + for (int iv = 0; iv < nv; iv++) { + // Locate vertex in the coordinate array and compute its weight. + int offset = 0; + double wgt = 1.0; + for (int m = M-1; m >= 0; m--) { + offset *= tab->K[m]; + offset += tab->p0[m]; + if (iv & (1 << m)) { + if (tab->K[m] > 1) offset++; + wgt *= tab->delta[m]; + } else { + wgt *= 1.0 - tab->delta[m]; + } + } + + if (wgt == 0.0) continue; + + // Add the contribution from this vertex to each element. + double *coord = tab->coord + offset*M; + for (int m = 0; m < M; m++) { + int i = tab->map[m]; + *(wp+i) += *(coord++) * wgt; + } + + if (wgt == 1.0) break; + } + + *statp = 0; + +next: + xp += nelem; + wp += nelem; + statp++; + } + + return status; +} + +//---------------------------------------------------------------------------- + +// Helper functions used only by tabs2x(). +static int tabedge(struct tabprm *); +static int tabrow(struct tabprm *, const double *); +static int tabvox(struct tabprm *, const double *, int, double **, + unsigned int *); + +int tabs2x( + struct tabprm* tab, + int ncoord, + int nelem, + const double world[], + double x[], + int stat[]) + +{ + static const char *function = "tabs2x"; + + int status; + + if (tab == 0x0) return TABERR_NULL_POINTER; + struct wcserr **err = &(tab->err); + + // Initialize if required. + if (abs(tab->flag) != TABSET) { + if ((status = tabset(tab))) return status; + } + + // This is used a lot. + int M = tab->M; + + double **tabcoord = 0x0; + int nv = 0; + if (M > 1) { + nv = 1 << M; + tabcoord = calloc(nv, sizeof(double *)); + } + + + status = 0; + const double *wp = world; + double *xp = x; + int *statp = stat; + for (int n = 0; n < ncoord; n++) { + // Locate this coordinate in the coordinate array. + int edge = 0; + for (int m = 0; m < M; m++) { + tab->p0[m] = 0; + } + + int ic; + for (ic = 0; ic < tab->nc; ic++) { + if (tab->p0[0] == 0) { + // New row, could it contain a solution? + if (edge || tabrow(tab, wp)) { + // No, skip it. + ic += tab->K[0]; + if (1 < M) { + tab->p0[1]++; + edge = tabedge(tab); + } + + // Because ic will be incremented when the loop is reentered. + ic--; + continue; + } + } + + if (M == 1) { + // Deal with the one-dimensional case separately for efficiency. + double w = wp[tab->map[0]]; + if (w == tab->coord[0]) { + tab->p0[0] = 0; + tab->delta[0] = 0.0; + break; + + } else if (ic < tab->nc - 1) { + if (((tab->coord[ic] <= w && w <= tab->coord[ic+1]) || + (tab->coord[ic] >= w && w >= tab->coord[ic+1])) && + (tab->index[0] == 0x0 || + tab->index[0][ic] != tab->index[0][ic+1])) { + tab->p0[0] = ic; + tab->delta[0] = (w - tab->coord[ic]) / + (tab->coord[ic+1] - tab->coord[ic]); + break; + } + } + + } else { + // Multi-dimensional tables are harder. + if (!edge) { + // Addresses of the coordinates for each corner of the "voxel". + for (int iv = 0; iv < nv; iv++) { + int offset = 0; + for (int m = M-1; m >= 0; m--) { + offset *= tab->K[m]; + offset += tab->p0[m]; + if ((iv & (1 << m)) && (tab->K[m] > 1)) offset++; + } + tabcoord[iv] = tab->coord + offset*M; + } + + if (tabvox(tab, wp, 0, tabcoord, 0x0) == 0) { + // Found a solution. + break; + } + } + + // Next voxel. + tab->p0[0]++; + edge = tabedge(tab); + } + } + + + if (ic == tab->nc) { + // Coordinate not found; allow minor extrapolation. + if (M == 1) { + // Should there be a solution? + double w = wp[tab->map[0]]; + if (tab->extrema[0] <= w && w <= tab->extrema[1]) { + double *dcrd = tab->coord; + for (int i = 0; i < 2; i++) { + if (i) dcrd += tab->K[0] - 2; + + double delta = (w - *dcrd) / (*(dcrd+1) - *dcrd); + + if (i == 0) { + if (-0.5 <= delta && delta <= 0.0) { + tab->p0[0] = 0; + tab->delta[0] = delta; + ic = 0; + break; + } + } else { + if (1.0 <= delta && delta <= 1.5) { + tab->p0[0] = tab->K[0] - 1; + tab->delta[0] = delta - 1.0; + ic = 0; + } + } + } + } + + } else { + // Multi-dimensional tables. + // >>> TBD <<< + } + } + + + if (ic == tab->nc) { + // Coordinate not found. + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_WORLD)); + + } else { + // Determine the intermediate world coordinates. + int *Km = tab->K; + for (int m = 0; m < M; m++, Km++) { + // N.B. Upsilon_m and psi_m are 1-relative FITS indexes. + double upsilon = (tab->p0[m] + 1) + tab->delta[m]; + + if (upsilon < 0.5 || upsilon > *Km + 0.5) { + // Index out of range. + *statp = 1; + status = wcserr_set(TAB_ERRMSG(TABERR_BAD_WORLD)); + + } else { + // Do inverse lookup of the index vector. + double *Psi = tab->index[m]; + double psi_m; + if (Psi == 0x0) { + // Default indexing. + psi_m = upsilon; + + } else { + // Decrement Psi and use 1-relative C array indexing to match the + // 1-relative FITS indexing. + Psi--; + + if (*Km == 1) { + // Degenerate index vector. + psi_m = Psi[1]; + } else { + int k = (int)(upsilon); + psi_m = Psi[k]; + if (k < *Km) { + psi_m += (upsilon - k) * (Psi[k+1] - Psi[k]); + } + } + } + + xp[tab->map[m]] = psi_m - tab->crval[m]; + } + } + *statp = 0; + } + + wp += nelem; + xp += nelem; + statp++; + } + + if (tabcoord) free(tabcoord); + + return status; +} + +/*---------------------------------------------------------------------------- +* Convenience routine to check whether tabprm::p0 has been incremented beyond +* the end of an index vector and if so move it to the start of the next one. +* Returns 1 if tabprm::p0 is sitting at the end of any non-degenerate index +* vector. +*---------------------------------------------------------------------------*/ + +int tabedge(struct tabprm* tab) + +{ + int edge = 0; + + for (int m = 0; m < tab->M; m++) { + if (tab->p0[m] == tab->K[m]) { + // p0 has been incremented beyond the end of an index vector, point it + // to the next one. + tab->p0[m] = 0; + if (m < tab->M-1) { + tab->p0[m+1]++; + } + } else if (tab->p0[m] == tab->K[m]-1 && tab->K[m] > 1) { + // p0 is sitting at the end of a non-degenerate index vector. + edge = 1; + } + } + + return edge; +} + +/*---------------------------------------------------------------------------- +* Quick test to see whether the world coordinate indicated by wp could lie +* somewhere along (or near) the row of the image indexed by tabprm::p0. +* Return 0 if so, 1 otherwise. +* +* tabprm::p0 selects a particular row of the image, p0[0] being ignored (i.e. +* treated as zero). Adjacent rows that delimit a row of "voxels" are formed +* by incrementing elements other than p0[0] in all binary combinations. N.B. +* these are not the same as the voxels (pixels) that are indexed by, and +* centred on, integral pixel coordinates in FITS. +* +* To see why it is necessary to examine the adjacent rows, consider the 2-D +* case where the first world coordinate element is constant along each row. +* If the first element of wp has value 0.5, and its value in the row indexed +* by p0 has value 0, and in the next row it has value 1, then it is clear that +* the solution lies in neither row but somewhere between them. Thus both rows +* will be involved in finding the solution. +* +* tabprm::extrema is the address of the first element of a 1-D array that +* records the minimum and maximum value of each element of the coordinate +* vector in each row of the coordinate array, treated as though it were +* defined as +* +* double extrema[K_M]...[K_2][2][M] +* +* The minimum is recorded in the first element of the compressed K_1 +* dimension, then the maximum. +*---------------------------------------------------------------------------*/ + +int tabrow(struct tabprm* tab, const double *wp) + +{ + const double tol = 1e-10; + + int M = tab->M; + + // The number of corners in a "voxel". We need examine only half this + // number of rows. The extra factor of two will be used to select between + // the minimal and maximal values in each row. + unsigned int nv = 1 << M; + + unsigned int eq = 0; + unsigned int lt = 0; + unsigned int gt = 0; + for (unsigned int iv = 0; iv < nv; iv++) { + // Find the index into tabprm::extrema for this row. + int offset = 0; + for (int m = M-1; m > 0; m--) { + offset *= tab->K[m]; + offset += tab->p0[m]; + + // Select the row. + if (iv & (1 << m)) { + if (tab->K[m] > 1) offset++; + } + } + + // The K_1 dimension has length 2 (see prologue). + offset *= 2; + + // Select the minimum on even numbered iterations, else the maximum. + if (iv & 1) offset++; + + // The last dimension has length M (see prologue). + offset *= M; + + // Address of the extremal elements (min or max) for this row. + double *cp = tab->extrema + offset; + + // For each coordinate element, we only need to find one row where its + // minimum value is less than that of wp, and one row where the maximum + // value is greater. That doesn't mean that there is a solution, only + // that there might be. + for (int m = 0; m < M; m++, cp++) { + // Apply the axis mapping. + double w = wp[tab->map[m]]; + + // Finally the test itself; set bits in the bitmask. + if (fabs(*cp - w) < tol) { + eq |= (1 << m); + } else if (*cp < w) { + lt |= (1 << m); + } else if (*cp > w) { + gt |= (1 << m); + } + } + + // Have all bits been switched on? + if ((lt | eq) == nv-1 && (gt | eq) == nv-1) { + // A solution could lie within this row of voxels. + return 0; + } + } + + // No solution in this row. + return 1; +} + +/*---------------------------------------------------------------------------- +* Does the world coordinate indicated by wp lie within the voxel indexed by +* tabprm::p0? If so, do a binary chop of the interior of the voxel to find +* it and return 0, with tabprm::delta set to the solution. Else return 1. +* +* As in tabrow(), a "voxel" is formed by incrementing the elements of +* tabprm::p0 in all binary combinations. Note that these are not the same as +* the voxels (pixels) that are indexed by, and centred on, integral pixel +* coordinates in FITS. +* +* tabvox() calls itself recursively. When called from outside, level, being +* the level of recursion, should be given as zero. tabcoord is an array +* holding the addresses of the coordinates for each corner of the voxel. +* vox is the address of a work array (vox2) used during recursive calls to +* dissect the voxel. It is ignored when tabvox() is called from outside +* (level == 0). +* +* It is assumed that the image dimensions are no greater than 32. +----------------------------------------------------------------------------*/ + +int tabvox( + struct tabprm* tab, + const double *wp, + int level, + double **tabcoord, + unsigned int *vox) + +{ + const double tol = 1e-10; + + int M = tab->M; + + // The number of corners in a voxel. + unsigned int nv = 1 << M; + + double dv = 1.0; + for (int i = 0; i < level; i++) { + dv /= 2.0; + } + + // Could the coordinate lie within this voxel (level == 0) or sub-voxel + // (level > 0)? We use the fact that with linear interpolation the + // coordinate elements are extremal in a corner and test each one. + unsigned int lt = 0; + unsigned int gt = 0; + unsigned int eq = 0; + for (unsigned int iv = 0; iv < nv; iv++) { + // Select a corner of the sub-voxel. + double coord[32]; + for (int m = 0; m < M; m++) { + coord[m] = 0.0; + tab->delta[m] = level ? dv*vox[m] : 0.0; + + if (iv & (1 << m)) { + tab->delta[m] += dv; + } + } + + // Compute the coordinates of this corner of the sub-voxel by linear + // interpolation using the weighting algorithm described in Sect. 3.4 of + // WCS Paper IV. + for (unsigned int jv = 0; jv < nv; jv++) { + // Find the weight for this corner of the parent voxel. + double wgt = 1.0; + for (int m = 0; m < M; m++) { + if (jv & (1 << m)) { + wgt *= tab->delta[m]; + } else { + wgt *= 1.0 - tab->delta[m]; + } + } + + if (wgt == 0.0) continue; + + // Add its contribution to each coordinate element. + double *cp = tabcoord[jv]; + for (int m = 0; m < M; m++) { + coord[m] += *(cp++) * wgt; + } + + if (wgt == 1.0) break; + } + + // Coordinate elements are minimal or maximal in a corner. + unsigned int et = 0; + for (int m = 0; m < M; m++) { + // Apply the axis mapping. + double w = wp[tab->map[m]]; + + // Finally the test itself; set bits in the bitmask. + if (fabs(coord[m] - w) < tol) { + et |= (1 << m); + } else if (coord[m] < w) { + lt |= (1 << m); + } else if (coord[m] > w) { + gt |= (1 << m); + } + } + + if (et == nv-1) { + // We've stumbled across a solution in this corner of the sub-voxel. + return 0; + } + + eq |= et; + } + + // Could the coordinate lie within this sub-voxel? + if ((lt | eq) == nv-1 && (gt | eq) == nv-1) { + // Yes it could, but does it? + + // Is it time to stop the recursion? + if (level == 31) { + // We have a solution, squeeze out the last bit of juice. + dv /= 2.0; + for (int m = 0; m < M; m++) { + tab->delta[m] = dv * (2.0*vox[m] + 1.0); + } + + return 0; + } + + // Subdivide the sub-voxel and try again for each subdivision. + for (unsigned int iv = 0; iv < nv; iv++) { + // Select the subdivision. + unsigned int vox2[32]; + for (int m = 0; m < M; m++) { + vox2[m] = level ? 2*vox[m] : 0; + if (iv & (1 << m)) { + vox2[m]++; + } + } + + // Recurse. + if (tabvox(tab, wp, level+1, tabcoord, vox2) == 0) { + return 0; + } + } + } + + // No solution in this sub-voxel. + return 1; +} diff --git a/deps/wcslib/C/tab.h b/deps/wcslib/C/tab.h new file mode 100644 index 0000000..413cd68 --- /dev/null +++ b/deps/wcslib/C/tab.h @@ -0,0 +1,706 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tab.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the tab routines +* --------------------------- +* Routines in this suite implement the part of the FITS World Coordinate +* System (WCS) standard that deals with tabular coordinates, i.e. coordinates +* that are defined via a lookup table, as described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of spectral coordinates in FITS", += Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. += 2006, A&A, 446, 747 (WCS Paper III) +* +* These routines define methods to be used for computing tabular world +* coordinates from intermediate world coordinates (a linear transformation +* of image pixel coordinates), and vice versa. They are based on the tabprm +* struct which contains all information needed for the computations. The +* struct contains some members that must be set by the user, and others that +* are maintained by these routines, somewhat like a C++ class but with no +* encapsulation. +* +* tabini(), tabmem(), tabcpy(), and tabfree() are provided to manage the +* tabprm struct, tabsize() computes its total size including allocated memory, +* tabenq() returns information about the state of the struct, and tabprt() +* prints its contents. +* +* tabperr() prints the error message(s) (if any) stored in a tabprm struct. +* +* A setup routine, tabset(), computes intermediate values in the tabprm struct +* from parameters in it that were supplied by the user. The struct always +* needs to be set up by tabset() but it need not be called explicitly - refer +* to the explanation of tabprm::flag. +* +* tabx2s() and tabs2x() implement the WCS tabular coordinate transformations. +* +* Accuracy: +* --------- +* No warranty is given for the accuracy of these routines (refer to the +* copyright notice); intending users must satisfy for themselves their +* adequacy for the intended purpose. However, closure effectively to within +* double precision rounding error was demonstrated by test routine ttab.c +* which accompanies this software. +* +* +* tabini() - Default constructor for the tabprm struct +* ---------------------------------------------------- +* tabini() allocates memory for arrays in a tabprm struct and sets all members +* of the struct to default values. +* +* PLEASE NOTE: every tabprm struct should be initialized by tabini(), possibly +* repeatedly. On the first invokation, and only the first invokation, the +* flag member of the tabprm struct must be set to -1 to initialize memory +* management, regardless of whether tabini() will actually be used to allocate +* memory. +* +* Given: +* alloc int If true, allocate memory unconditionally for arrays in +* the tabprm struct. +* +* If false, it is assumed that pointers to these arrays +* have been set by the user except if they are null +* pointers in which case memory will be allocated for +* them regardless. (In other words, setting alloc true +* saves having to initalize these pointers to zero.) +* +* M int The number of tabular coordinate axes. +* +* K const int[] +* Vector of length M whose elements (K_1, K_2,... K_M) +* record the lengths of the axes of the coordinate array +* and of each indexing vector. M and K[] are used to +* determine the length of the various tabprm arrays and +* therefore the amount of memory to allocate for them. +* Their values are copied into the tabprm struct. +* +* It is permissible to set K (i.e. the address of the +* array) to zero which has the same effect as setting +* each element of K[] to zero. In this case no memory +* will be allocated for the index vectors or coordinate +* array in the tabprm struct. These together with the +* K vector must be set separately before calling +* tabset(). +* +* Given and returned: +* tab struct tabprm* +* Tabular transformation parameters. Note that, in +* order to initialize memory management tabprm::flag +* should be set to -1 when tab is initialized for the +* first time (memory leaks may result if it had already +* been initialized). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid tabular parameters. +* +* For returns > 1, a detailed error message is set in +* tabprm::err if enabled, see wcserr_enable(). +* +* +* tabmem() - Acquire tabular memory +* --------------------------------- +* tabmem() takes control of memory allocated by the user for arrays in the +* tabprm struct. +* +* Given and returned: +* tab struct tabprm* +* Tabular transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* 2: Memory allocation failed. +* +* For returns > 1, a detailed error message is set in +* tabprm::err if enabled, see wcserr_enable(). +* +* +* tabcpy() - Copy routine for the tabprm struct +* --------------------------------------------- +* tabcpy() does a deep copy of one tabprm struct to another, using tabini() to +* allocate memory for its arrays if required. Only the "information to be +* provided" part of the struct is copied; a call to tabset() is required to +* set up the remainder. +* +* Given: +* alloc int If true, allocate memory unconditionally for arrays in +* the tabprm struct. +* +* If false, it is assumed that pointers to these arrays +* have been set by the user except if they are null +* pointers in which case memory will be allocated for +* them regardless. (In other words, setting alloc true +* saves having to initalize these pointers to zero.) +* +* tabsrc const struct tabprm* +* Struct to copy from. +* +* Given and returned: +* tabdst struct tabprm* +* Struct to copy to. tabprm::flag should be set to -1 +* if tabdst was not previously initialized (memory leaks +* may result if it was previously initialized). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* 2: Memory allocation failed. +* +* For returns > 1, a detailed error message is set in +* tabprm::err (associated with tabdst) if enabled, see +* wcserr_enable(). +* +* +* tabcmp() - Compare two tabprm structs for equality +* -------------------------------------------------- +* tabcmp() compares two tabprm structs for equality. +* +* Given: +* cmp int A bit field controlling the strictness of the +* comparison. At present, this value must always be 0, +* indicating a strict comparison. In the future, other +* options may be added. +* +* tol double Tolerance for comparison of floating-point values. +* For example, for tol == 1e-6, all floating-point +* values in the structs must be equal to the first 6 +* decimal places. A value of 0 implies exact equality. +* +* tab1 const struct tabprm* +* The first tabprm struct to compare. +* +* tab2 const struct tabprm* +* The second tabprm struct to compare. +* +* Returned: +* equal int* Non-zero when the given structs are equal. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null pointer passed. +* +* +* tabfree() - Destructor for the tabprm struct +* -------------------------------------------- +* tabfree() frees memory allocated for the tabprm arrays by tabini(). +* tabini() records the memory it allocates and tabfree() will only attempt to +* free this. +* +* PLEASE NOTE: tabfree() must not be invoked on a tabprm struct that was not +* initialized by tabini(). +* +* Returned: +* tab struct tabprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* +* +* tabsize() - Compute the size of a tabprm struct +* ----------------------------------------------- +* tabsize() computes the full size of a tabprm struct, including allocated +* memory. +* +* Given: +* tab const struct tabprm* +* Tabular transformation parameters. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct tabprm). The second element +* is the total allocated size, in bytes, assuming that +* the allocation was done by tabini(). This figure +* includes memory allocated for the constituent struct, +* tabprm::err. +* +* It is not an error for the struct not to have been set +* up via tabset(), which normally results in additional +* memory allocation. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* tabenq() - enquire about the state of a tabprm struct +* ----------------------------------------------------- +* tabenq() may be used to obtain information about the state of a tabprm +* struct. The function returns a true/false answer for the enquiry asked. +* +* Given: +* tab const struct tabprm* +* Tabular transformation parameters. +* +* enquiry int Enquiry according to the following parameters: +* TABENQ_MEM: memory in the struct is being managed by +* WCSLIB (see tabini()). +* TABENQ_SET: the struct has been set up by tabset(). +* TABENQ_BYP: the struct is in bypass mode (see +* tabset()). +* These may be combined by logical OR, e.g. +* TABENQ_MEM | TABENQ_SET. The enquiry result will be +* the logical AND of the individual results. +* +* Function return value: +* int Enquiry result: +* 0: No. +* 1: Yes. +* +* +* tabprt() - Print routine for the tabprm struct +* ---------------------------------------------- +* tabprt() prints the contents of a tabprm struct using wcsprintf(). Mainly +* intended for diagnostic purposes. +* +* Given: +* tab const struct tabprm* +* Tabular transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* +* +* tabperr() - Print error messages from a tabprm struct +* ----------------------------------------------------- +* tabperr() prints the error message(s) (if any) stored in a tabprm struct. +* If there are no errors then nothing is printed. It uses wcserr_prt(), q.v. +* +* Given: +* tab const struct tabprm* +* Tabular transformation parameters. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* +* +* tabset() - Setup routine for the tabprm struct +* ----------------------------------------------- +* tabset() allocates memory for work arrays in the tabprm struct and sets up +* the struct according to information supplied within it. +* +* Note that this routine need not be called directly; it will be invoked by +* tabx2s() and tabs2x() if tabprm::flag is anything other than a predefined +* magic value. +* +* tabset() normally operates regardless of the value of tabprm::flag; i.e. +* even if a struct was previously set up it will be reset unconditionally. +* However, a tabprm struct may be put into "bypass" mode by invoking tabset() +* initially with tabprm::flag == 1 (rather than 0). tabset() will return +* immediately if invoked on a struct in that state. To take a struct out of +* bypass mode, simply reset tabprm::flag to zero. See also tabenq(). +* +* Given and returned: +* tab struct tabprm* +* Tabular transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* 3: Invalid tabular parameters. +* +* For returns > 1, a detailed error message is set in +* tabprm::err if enabled, see wcserr_enable(). +* +* +* tabx2s() - Pixel-to-world transformation +* ---------------------------------------- +* tabx2s() transforms intermediate world coordinates to world coordinates +* using coordinate lookup. +* +* Given and returned: +* tab struct tabprm* +* Tabular transformation parameters. +* +* Given: +* ncoord, +* nelem int The number of coordinates, each of vector length +* nelem. +* +* x const double[ncoord][nelem] +* Array of intermediate world coordinates, SI units. +* +* Returned: +* world double[ncoord][nelem] +* Array of world coordinates, in SI units. +* +* stat int[ncoord] +* Status return value status for each coordinate: +* 0: Success. +* 1: Invalid intermediate world coordinate. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* 3: Invalid tabular parameters. +* 4: One or more of the x coordinates were invalid, +* as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* tabprm::err if enabled, see wcserr_enable(). +* +* +* tabs2x() - World-to-pixel transformation +* ---------------------------------------- +* tabs2x() transforms world coordinates to intermediate world coordinates. +* +* Given and returned: +* tab struct tabprm* +* Tabular transformation parameters. +* +* Given: +* ncoord, +* nelem int The number of coordinates, each of vector length +* nelem. +* world const double[ncoord][nelem] +* Array of world coordinates, in SI units. +* +* Returned: +* x double[ncoord][nelem] +* Array of intermediate world coordinates, SI units. +* stat int[ncoord] +* Status return value status for each vector element: +* 0: Success. +* 1: Invalid world coordinate. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null tabprm pointer passed. +* 3: Invalid tabular parameters. +* 5: One or more of the world coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* tabprm::err if enabled, see wcserr_enable(). +* +* +* tabprm struct - Tabular transformation parameters +* ------------------------------------------------- +* The tabprm struct contains information required to transform tabular +* coordinates. It consists of certain members that must be set by the user +* ("given") and others that are set by the WCSLIB routines ("returned"). Some +* of the latter are supplied for informational purposes while others are for +* internal use only. +* +* int flag +* (Given and returned) This flag must be set to zero (or 1, see tabset()) +* whenever any of the following tabprm members are set or changed: +* +* - tabprm::M (q.v., not normally set by the user), +* - tabprm::K (q.v., not normally set by the user), +* - tabprm::map, +* - tabprm::crval, +* - tabprm::index, +* - tabprm::coord. +* +* This signals the initialization routine, tabset(), to recompute the +* returned members of the tabprm struct. tabset() will reset flag to +* indicate that this has been done. +* +* PLEASE NOTE: flag should be set to -1 when tabini() is called for the +* first time for a particular tabprm struct in order to initialize memory +* management. It must ONLY be used on the first initialization otherwise +* memory leaks may result. +* +* int M +* (Given or returned) Number of tabular coordinate axes. +* +* If tabini() is used to initialize the tabprm struct (as would normally +* be the case) then it will set M from the value passed to it as a +* function argument. The user should not subsequently modify it. +* +* int *K +* (Given or returned) Pointer to the first element of a vector of length +* tabprm::M whose elements (K_1, K_2,... K_M) record the lengths of the +* axes of the coordinate array and of each indexing vector. +* +* If tabini() is used to initialize the tabprm struct (as would normally +* be the case) then it will set K from the array passed to it as a +* function argument. The user should not subsequently modify it. +* +* int *map +* (Given) Pointer to the first element of a vector of length tabprm::M +* that defines the association between axis m in the M-dimensional +* coordinate array (1 <= m <= M) and the indices of the intermediate world +* coordinate and world coordinate arrays, x[] and world[], in the argument +* lists for tabx2s() and tabs2x(). +* +* When x[] and world[] contain the full complement of coordinate elements +* in image-order, as will usually be the case, then map[m-1] == i-1 for +* axis i in the N-dimensional image (1 <= i <= N). In terms of the FITS +* keywords +* +* map[PVi_3a - 1] == i - 1. +* +* However, a different association may result if x[], for example, only +* contains a (relevant) subset of intermediate world coordinate elements. +* For example, if M == 1 for an image with N > 1, it is possible to fill +* x[] with the relevant coordinate element with nelem set to 1. In this +* case map[0] = 0 regardless of the value of i. +* +* double *crval +* (Given) Pointer to the first element of a vector of length tabprm::M +* whose elements contain the index value for the reference pixel for each +* of the tabular coordinate axes. +* +* double **index +* (Given) Pointer to the first element of a vector of length tabprm::M of +* pointers to vectors of lengths (K_1, K_2,... K_M) of 0-relative indexes +* (see tabprm::K). +* +* The address of any or all of these index vectors may be set to zero, +* i.e. +* += index[m] == 0; +* +* this is interpreted as default indexing, i.e. +* += index[m][k] = k; +* +* double *coord +* (Given) Pointer to the first element of the tabular coordinate array, +* treated as though it were defined as +* += double coord[K_M]...[K_2][K_1][M]; +* +* (see tabprm::K) i.e. with the M dimension varying fastest so that the +* M elements of a coordinate vector are stored contiguously in memory. +* +* int nc +* (Returned) Total number of coordinate vectors in the coordinate array +* being the product K_1 * K_2 * ... * K_M (see tabprm::K). +* +* int padding +* (An unused variable inserted for alignment purposes only.) +* +* int *sense +* (Returned) Pointer to the first element of a vector of length tabprm::M +* whose elements indicate whether the corresponding indexing vector is +* monotonic increasing (+1), or decreasing (-1). +* +* int *p0 +* (Returned) Pointer to the first element of a vector of length tabprm::M +* of interpolated indices into the coordinate array such that Upsilon_m, +* as defined in Paper III, is equal to (p0[m] + 1) + tabprm::delta[m]. +* +* double *delta +* (Returned) Pointer to the first element of a vector of length tabprm::M +* of interpolated indices into the coordinate array such that Upsilon_m, +* as defined in Paper III, is equal to (tabprm::p0[m] + 1) + delta[m]. +* +* double *extrema +* (Returned) Pointer to the first element of an array that records the +* minimum and maximum value of each element of the coordinate vector in +* each row of the coordinate array, treated as though it were defined as +* += double extrema[K_M]...[K_2][2][M] +* +* (see tabprm::K). The minimum is recorded in the first element of the +* compressed K_1 dimension, then the maximum. This array is used by the +* inverse table lookup function, tabs2x(), to speed up table searches. +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* int m_flag +* (For internal use only.) +* int m_M +* (For internal use only.) +* int m_N +* (For internal use only.) +* int set_M +* (For internal use only.) +* int m_K +* (For internal use only.) +* int m_map +* (For internal use only.) +* int m_crval +* (For internal use only.) +* int m_index +* (For internal use only.) +* int m_indxs +* (For internal use only.) +* int m_coord +* (For internal use only.) +* +* +* Global variable: const char *tab_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_TAB +#define WCSLIB_TAB + +#ifdef __cplusplus +extern "C" { +#endif + +enum tabenq_enum { + TABENQ_MEM = 1, // tabprm struct memory is managed by WCSLIB. + TABENQ_SET = 2, // tabprm struct has been set up. + TABENQ_BYP = 4, // tabprm struct is in bypass mode. +}; + +extern const char *tab_errmsg[]; + +enum tab_errmsg_enum { + TABERR_SUCCESS = 0, // Success. + TABERR_NULL_POINTER = 1, // Null tabprm pointer passed. + TABERR_MEMORY = 2, // Memory allocation failed. + TABERR_BAD_PARAMS = 3, // Invalid tabular parameters. + TABERR_BAD_X = 4, // One or more of the x coordinates were + // invalid. + TABERR_BAD_WORLD = 5 // One or more of the world coordinates were + // invalid. +}; + +struct tabprm { + // Initialization flag (see the prologue above). + //-------------------------------------------------------------------------- + int flag; // Set to zero to force initialization. + + // Parameters to be provided (see the prologue above). + //-------------------------------------------------------------------------- + int M; // Number of tabular coordinate axes. + int *K; // Vector of length M whose elements + // (K_1, K_2,... K_M) record the lengths of + // the axes of the coordinate array and of + // each indexing vector. + int *map; // Vector of length M usually such that + // map[m-1] == i-1 for coordinate array + // axis m and image axis i (see above). + double *crval; // Vector of length M containing the index + // value for the reference pixel for each + // of the tabular coordinate axes. + double **index; // Vector of pointers to M indexing vectors + // of lengths (K_1, K_2,... K_M). + double *coord; // (1+M)-dimensional tabular coordinate + // array (see above). + + // Information derived from the parameters supplied. + //-------------------------------------------------------------------------- + int nc; // Number of coordinate vectors (of length + // M) in the coordinate array. + int padding; // (Dummy inserted for alignment purposes.) + int *sense; // Vector of M flags that indicate whether + // the Mth indexing vector is monotonic + // increasing, or else decreasing. + int *p0; // Vector of M indices. + double *delta; // Vector of M increments. + double *extrema; // (1+M)-dimensional array of coordinate + // extrema. + + // Error messaging, if enabled. + //-------------------------------------------------------------------------- + struct wcserr *err; + + //-------------------------------------------------------------------------- + // Private - the remainder are for internal use. + //-------------------------------------------------------------------------- + // Memory management. + int m_flag, m_M, m_N; + int set_M; + int *m_K, *m_map; + double *m_crval, **m_index, **m_indxs, *m_coord; +}; + +// Size of the tabprm struct in int units, used by the Fortran wrappers. +#define TABLEN (sizeof(struct tabprm)/sizeof(int)) + + +int tabini(int alloc, int M, const int K[], struct tabprm *tab); + +int tabmem(struct tabprm *tab); + +int tabcpy(int alloc, const struct tabprm *tabsrc, struct tabprm *tabdst); + +int tabcmp(int cmp, double tol, const struct tabprm *tab1, + const struct tabprm *tab2, int *equal); + +int tabfree(struct tabprm *tab); + +int tabsize(const struct tabprm *tab, int size[2]); + +int tabenq(const struct tabprm *tab, int enquiry); + +int tabprt(const struct tabprm *tab); + +int tabperr(const struct tabprm *tab, const char *prefix); + +int tabset(struct tabprm *tab); + +int tabx2s(struct tabprm *tab, int ncoord, int nelem, const double x[], + double world[], int stat[]); + +int tabs2x(struct tabprm *tab, int ncoord, int nelem, const double world[], + double x[], int stat[]); + + +// Deprecated. +#define tabini_errmsg tab_errmsg +#define tabcpy_errmsg tab_errmsg +#define tabfree_errmsg tab_errmsg +#define tabprt_errmsg tab_errmsg +#define tabset_errmsg tab_errmsg +#define tabx2s_errmsg tab_errmsg +#define tabs2x_errmsg tab_errmsg + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_TAB diff --git a/deps/wcslib/C/test/DSS.keyrec b/deps/wcslib/C/test/DSS.keyrec new file mode 100644 index 0000000..2a57c1e --- /dev/null +++ b/deps/wcslib/C/test/DSS.keyrec @@ -0,0 +1,244 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: DSS.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing the handling of the Digitized Sky +# Survey (DSS) distortion function by WCSLIB. +# +# This header was adapted from an extract obtained from the STScI archive at +# http://archive.stsci.edu/cgi-bin/dss_form for object 'IC418' (Simbad) with +# an image size of 15 x 15 arcmin. Keyrecords unrelated to coordinates have +# mostly been removed. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < DSS.keyrec > DSS.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 2 / 2 image axes +NAXIS1 = 891 / Length of image axis 1 +NAXIS2 = 893 / Length of image axis 2 + +ORIGIN = 'STScI/MAST' /GSSS: STScI Digitized Sky Survey +SURVEY = 'SERC-ER ' /GSSS: Sky Survey +REGION = 'ER623 ' /GSSS: Region Name +PLATEID = 'A2OP ' /GSSS: Plate ID +SCANNUM = '01 ' /GSSS: Scan Number +DSCNDNUM= '00 ' /GSSS: Descendant Number +TELESCID= 4 /GSSS: Telescope ID +BANDPASS= 36 /GSSS: Bandpass Code +COPYRGHT= 'AAO/ROE ' /GSSS: Copyright Holder + +DATE-OBS= '1996-10-14T17:42:00' /Observation: Date/Time +EXPOSURE= 60.0 /Observation: Exposure Minutes +PLTGRADE= 'A2 ' /Observation: Plate Grade +OBSHA = -0.116667 /Observation: Hour Angle +OBSZD = 16.3556 /Observation: Zenith Distance +AIRMASS = 1.04208 /Observation: Airmass +REFBETA = 66.3196420000 /Observation: Refraction Coeff +REFBETAP= -0.0820000000000 /Observation: Refraction Coeff +REFK1 = -7317.80000000 /Observation: Refraction Coeff +REFK2 = -60474.2200000 /Observation: Refraction Coeff + +PLTSCALE= 67.20 /Detector: Plate Scale arcsec per mm +PLTSIZEX= 355.000 /Detector: Plate X Dimension mm +PLTSIZEY= 355.000 /Detector: Plate Y Dimension mm +PLATERA = 80.5634690000 /Observation: Field centre RA degrees +PLATEDEC= -14.9583230000 /Observation: Field centre Dec degrees +PLTLABEL= 'OR17313 ' /Observation: Plate Label + +CNPIX1 = 6498 /Scan: X Corner +CNPIX2 = 19120 /Scan: Y Corner +XPIXELS = 23040 /Scan: X Dimension +YPIXELS = 23040 /Scan: Y Dimension +XPIXELSZ= 15.0295 /Scan: Pixel Size microns +YPIXELSZ= 15.0000 /Scan: Pixel Size microns +PPO1 = -3069417.00000 /Scan: Orientation Coeff +PPO2 = 0.000000000000 /Scan: Orientation Coeff +PPO3 = 177500.000000 /Scan: Orientation Coeff +PPO4 = 0.000000000000 /Scan: Orientation Coeff +PPO5 = 3069417.00000 /Scan: Orientation Coeff +PPO6 = 177500.000000 /Scan: Orientation Coeff +PLTRAH = 5 /Astrometry: Plate Centre H +PLTRAM = 22 /Astrometry: Plate Centre M +PLTRAS = 16.12 /Astrometry: Plate Centre S +PLTDECSN= '- ' /Astrometry: Plate Centre +/- +PLTDECD = 14 /Astrometry: Plate Centre D +PLTDECM = 57 /Astrometry: Plate Centre M +PLTDECS = 10.8 /Astrometry: Plate Centre S +EQUINOX = 2000.0 /Astrometry: Equinox + +COMMENT ----------------------------------------------------------------------- +COMMENT Guide Star Catalogue 1 coefficients. +COMMENT ----------------------------------------------------------------------- + +AMDX1 = 67.1586924213 /Astrometry: GSC1 Coeff +AMDX2 = -0.319046525929 /Astrometry: GSC1 Coeff +AMDX3 = -307.222397476 /Astrometry: GSC1 Coeff +AMDX4 = -2.94727512097E-005 /Astrometry: GSC1 Coeff +AMDX5 = 3.57034551060E-005 /Astrometry: GSC1 Coeff +AMDX6 = -7.81953205318E-006 /Astrometry: GSC1 Coeff +AMDX7 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX8 = 2.01662503008E-006 /Astrometry: GSC1 Coeff +AMDX9 = -6.78953469514E-008 /Astrometry: GSC1 Coeff +AMDX10 = 2.32375502821E-006 /Astrometry: GSC1 Coeff +AMDX11 = -5.70870090870E-008 /Astrometry: GSC1 Coeff +AMDX12 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX13 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX14 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX15 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX16 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX17 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX18 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX19 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDX20 = 0.000000000000 /Astrometry: GSC1 Coeff + +AMDY1 = 67.1648535547 /Astrometry: GSC1 Coeff +AMDY2 = 0.317194761999 /Astrometry: GSC1 Coeff +AMDY3 = 295.118096783 /Astrometry: GSC1 Coeff +AMDY4 = 1.99924027359E-006 /Astrometry: GSC1 Coeff +AMDY5 = -5.19116622905E-005 /Astrometry: GSC1 Coeff +AMDY6 = 1.19237255768E-005 /Astrometry: GSC1 Coeff +AMDY7 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY8 = 2.02173052273E-006 /Astrometry: GSC1 Coeff +AMDY9 = -6.68994178481E-008 /Astrometry: GSC1 Coeff +AMDY10 = 2.11529862425E-006 /Astrometry: GSC1 Coeff +AMDY11 = -6.66974464403E-008 /Astrometry: GSC1 Coeff +AMDY12 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY13 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY14 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY15 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY16 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY17 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY18 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY19 = 0.000000000000 /Astrometry: GSC1 Coeff +AMDY20 = 0.000000000000 /Astrometry: GSC1 Coeff + +COMMENT ----------------------------------------------------------------------- +COMMENT Guide Star Catalogue 2 coefficients. +COMMENT ----------------------------------------------------------------------- + +AMDREX1 = 67.1515536626 /Astrometry: GSC2 Coeff +AMDREX2 = -0.321604161010 /Astrometry: GSC2 Coeff +AMDREX3 = -307.070931304 /Astrometry: GSC2 Coeff +AMDREX4 = 3.78456630241E-006 /Astrometry: GSC2 Coeff +AMDREX5 = 9.82753867931E-006 /Astrometry: GSC2 Coeff +AMDREX6 = 4.81926941509E-006 /Astrometry: GSC2 Coeff +AMDREX7 = 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX8 = 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX9 = 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX10= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX11= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX12= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX13= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX14= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX15= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX16= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX17= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX18= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX19= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREX20= 0.000000000000 /Astrometry: GSC2 Coeff + +AMDREY1 = 67.1523286931 /Astrometry: GSC2 Coeff +AMDREY2 = 0.314721460695 /Astrometry: GSC2 Coeff +AMDREY3 = 294.917836411 /Astrometry: GSC2 Coeff +AMDREY4 = -9.67594095615E-006 /Astrometry: GSC2 Coeff +AMDREY5 = -1.26770977478E-005 /Astrometry: GSC2 Coeff +AMDREY6 = 8.47198751394E-006 /Astrometry: GSC2 Coeff +AMDREY7 = 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY8 = 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY9 = 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY10= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY11= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY12= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY13= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY14= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY15= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY16= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY17= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY18= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY19= 0.000000000000 /Astrometry: GSC2 Coeff +AMDREY20= 0.000000000000 /Astrometry: GSC2 Coeff +ASTRMASK= 'er.mask ' /Astrometry: GSC2 Mask + +COMMENT ----------------------------------------------------------------------- +COMMENT This representation without distortions, computed by WCSLIB using +COMMENT the method derived in Sect. 5.2 of WCS Paper IV, provides the best +COMMENT approximation to the DSS plate solution in the vicinity of the plate +COMMENT centre, which is the reference point here. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEA= 'DSS approximation without distortions computed by WCSLIB' +WCSAXESA= 2 / Number of coordinate axes +CRPIX1A = 5009.62946648 / Pixel coordinate of reference point +CRPIX2A = -7580.52942578 / Pixel coordinate of reference point +PC1_1A = 0.0150286420582 / Coordinate transformation matrix element +PC1_2A = 7.12554775909E-05 / Coordinate transformation matrix element +PC2_1A = -7.09812292194E-05 / Coordinate transformation matrix element +PC2_2A = 0.0150005197625 / Coordinate transformation matrix element +CDELT1A = -0.0186562573103 / [deg] Coordinate increment at reference point +CDELT2A = 0.0186562573103 / [deg] Coordinate increment at reference point +CUNIT1A = 'deg' / Units of coordinate increment and value +CUNIT2A = 'deg' / Units of coordinate increment and value +CTYPE1A = 'RA---TAN' / Right ascension, gnomonic projection +CTYPE2A = 'DEC--TAN' / Declination, gnomonic projection +CRVAL1A = 80.5671666667 / [deg] Coordinate value at reference point +CRVAL2A = -14.953 / [deg] Coordinate value at reference point +LONPOLEA= 180.0 / [deg] Native longitude of celestial pole +LATPOLEA= -14.953 / [deg] Native latitude of celestial pole + +COMMENT ----------------------------------------------------------------------- +COMMENT This representation without distortions, added by the DSS archive +COMMENT server, provides a solution tailored to the neighbourhood of the +COMMENT extracted subimage, which is towards the corner of the plate. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEB= 'DSS approximation without distortions computed by archive server' +WCSAXESB= 2 /GetImage: Number WCS axes +RADESYSB= 'ICRS ' /GetImage: GSC-II calibration using ICRS system +CTYPE1B = 'RA---TAN ' /GetImage: RA-Gnomic projection +CRPIX1B = 446.000000 /GetImage: X reference pixel +CRVAL1B = 81.867391 /GetImage: RA of reference pixel +CUNIT1B = 'deg ' /GetImage: degrees +CTYPE2B = 'DEC--TAN ' /GetImage: Dec-Gnomic projection +CRPIX2B = 447.000000 /GetImage: Y reference pixel +CRVAL2B = -12.697383 /GetImage: Dec of reference pixel +CUNIT2B = 'deg ' /Getimage: degrees +CD1_1B = -0.0002802725 /GetImage: rotation matrix coefficient +CD1_2B = -0.0000028752 /GetImage: rotation matrix coefficient +CD2_1B = -0.0000028067 /GetImage: rotation matrix coefficient +CD2_2B = 0.0002797643 /GetImage: rotation matrix coefficient + +OBJECT = 'data ' /GetImage: Requested Object Name +DATAMIN = 3813 /GetImage: Minimum returned pixel value +DATAMAX = 21724 /GetImage: Maximum returned pixel value +OBJCTRA = '05 27 28.190 ' /GetImage: Requested Right Ascension (J2000) +OBJCTDEC= '-12 41 50.20 ' /GetImage: Requested Declination (J2000) +OBJCTX = 6943.58 /GetImage: Requested X on plate (pixels) +OBJCTY = 19566.59 /GetImage: Requested Y on plate (pixels) + +END diff --git a/deps/wcslib/C/test/SIP.keyrec b/deps/wcslib/C/test/SIP.keyrec new file mode 100644 index 0000000..523cbcb --- /dev/null +++ b/deps/wcslib/C/test/SIP.keyrec @@ -0,0 +1,107 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: SIP.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords based on the "SIP" (Simple Imaging Polynomial) +# distortion used by tdis2 primarily for testing wcssub(). +# +# This header was adapted from the sample provided at +# http://fits.gsfc.nasa.gov/registry/sip/sipsample.txt +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < SIP.keyrec > SIP.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 4 / 4 image axes +NAXIS1 = 256 / Length of image axis 1 +NAXIS2 = 256 / Length of image axis 2 +NAXIS3 = 2048 / Length of image axis 3 +NAXIS4 = 128 / Length of image axis 4 + +CRPIX1 = 124.0 / Pixel coordinate of reference point +CRPIX2 = 132.0 / Pixel coordinate of reference point +CRPIX3 = 1024.5 / Pixel coordinate of reference point +CRPIX4 = 1.0 / Pixel coordinate of reference point +CD1_1 = 0.00024975688027236 / [deg] CD matrix element +CD1_2 = 0.00023017780974366 / [deg] CD matrix element +CD2_1 = 0.00023042851926542 / [deg] CD matrix element +CD2_2 = -0.00024996577057659 / [deg] CD matrix element +CD3_3 = 1.0E-10 / [m] CD matrix element +CD4_4 = 1.0 / [s] CD matrix element +CTYPE1 = 'RA---TAN-SIP' / TAN (gnomonic) projection + SIP distortions +CTYPE2 = 'DEC--TAN-SIP' / TAN (gnomonic) projection + SIP distortions +CTYPE3 = 'AWAV' / Wavelength in air +CTYPE4 = 'TIME' / Time +CRVAL1 = 202.482322805429 / [deg] Right ascension at the reference point +CRVAL2 = 47.175118930010 / [deg] Declination at the reference point +CRVAL3 = 5006.84E-10 / [m] [OIII]5007 Wavelength +CRVAL4 = 0.0 / [s] Elapsed time + +A_ORDER = 3 / polynomial order, axis 1, pixel-to-sky +A_0_2 = 2.9656E-06 / distortion coefficient +A_0_3 = 3.7746E-09 / distortion coefficient +A_1_1 = 2.1886E-05 / distortion coefficient +A_1_2 = -1.6847E-07 / distortion coefficient +A_2_0 = -2.3863E-05 / distortion coefficient +A_2_1 = -8.5610E-09 / distortion coefficient +A_3_0 = -1.4172E-07 / distortion coefficient +A_DMAX = 1.394 / maximum correction to pixel coordinates + +B_ORDER = 3 / polynomial order, axis 2, pixel-to-sky +B_0_2 = 2.3100E-05 / distortion coefficient +B_0_3 = -1.6168E-07 / distortion coefficient +B_1_1 = -2.4386E-05 / distortion coefficient +B_1_2 = -5.7813E-09 / distortion coefficient +B_2_0 = 2.1197E-06 / distortion coefficient +B_2_1 = -1.6583E-07 / distortion coefficient +B_3_0 = -2.0249E-08 / distortion coefficient +B_DMAX = 1.501 / maximum correction to pixel coordinates + +AP_ORDER= 3 / polynomial order, axis 1, sky-to-pixel +AP_0_1 = -6.4275E-07 / distortion coefficient +AP_0_2 = -2.9425E-06 / distortion coefficient +AP_0_3 = -3.5820E-09 / distortion coefficient +AP_1_0 = -1.4897E-05 / distortion coefficient +AP_1_1 = -2.2250E-05 / distortion coefficient +AP_1_2 = 1.7195E-07 / distortion coefficient +AP_2_0 = 2.4146E-05 / distortion coefficient +AP_2_1 = 6.7090E-09 / distortion coefficient +AP_3_0 = 1.4492E-07 / distortion coefficient + +BP_ORDER= 3 / polynomial order, axis 2, sky-to-pixel +BP_0_1 = -1.6588E-05 / distortion coefficient +BP_0_2 = -2.3424E-05 / distortion coefficient +BP_0_3 = 1.6510E-07 / distortion coefficient +BP_1_0 = -2.6783E-06 / distortion coefficient +BP_1_1 = 2.4753E-05 / distortion coefficient +BP_1_2 = 3.8917E-09 / distortion coefficient +BP_2_0 = -2.1510E-06 / distortion coefficient +BP_2_1 = 1.7000E-07 / distortion coefficient +BP_3_0 = 2.0482E-08 / distortion coefficient + +END diff --git a/deps/wcslib/C/test/SIPTPV.keyrec b/deps/wcslib/C/test/SIPTPV.keyrec new file mode 100644 index 0000000..e76c2cb --- /dev/null +++ b/deps/wcslib/C/test/SIPTPV.keyrec @@ -0,0 +1,901 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: SIPTPV.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing the handling of the "SIP" (Simple +# Imaging Polynomial) and TPV distortions by WCSLIB. +# +# This header was adapted from a pair of FITS files from the Palomar Transient +# Factory (IPAC) provided by David Shupe. The same distortion was encoded in +# two ways, the primary representation uses the SIP convention, and the 'P' +# alternate the TPV projection. Translations of both of these into other +# distortion functions were then added as alternates. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < SIPTPV.keyrec > SIPTPV.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 2 / 2 image axes +NAXIS1 = 2048 / Length of image axis 1 +NAXIS2 = 4096 / Length of image axis 2 + +COMMENT ----------------------------------------------------------------------- +COMMENT Simple Imaging Polynomial (SIP) distortion. +COMMENT SIP does not support alternate representations nor axis mapping. +COMMENT In the keycomments, x and y refer to axes 1 and 2 respectively. +COMMENT ----------------------------------------------------------------------- + +WCSNAME = 'SIPTPV-0: native SIP representation' +CRPIX1 = -3925.16 / Pixel coordinate of reference point +CRPIX2 = 4360.23 / Pixel coordinate of reference point +CD1_1 = 0.00028610265860158 / [deg] CD matrix element +CD1_2 = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1 = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2 = -0.00028152525617189 / [deg] CD matrix element +CTYPE1 = 'RA---TAN-SIP' / TAN (gnomonic) projection + SIP distortions +CTYPE2 = 'DEC--TAN-SIP' / TAN (gnomonic) projection + SIP distortions +CRVAL1 = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2 = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1 = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2 = 'deg ' / Image axis-2 celestial-coordinate units + +A_ORDER = 4 / SIP distortion polynomial order for A +A_2_0 = -4.6101438020313E-06 / SIP coefficient: xx +A_1_1 = 1.4745130969827E-06 / SIP coefficient: xy +A_0_2 = -6.8832077243635E-08 / SIP coefficient: yy +A_3_0 = 5.1080179892854E-10 / SIP coefficient: xxx +A_2_1 = -3.2570122733976E-10 / SIP coefficient: xxy +A_1_2 = -5.4789597808432E-11 / SIP coefficient: xyy +A_0_3 = -3.9165520771852E-11 / SIP coefficient: yyy +A_4_0 = -2.2410038481669E-14 / SIP coefficient: xxxx +A_3_1 = 2.4024589153935E-14 / SIP coefficient: xxxy +A_2_2 = 5.8725301231513E-15 / SIP coefficient: xxyy +A_1_3 = 4.3257176022080E-15 / SIP coefficient: xyyy +A_0_4 = -1.3734790334086E-15 / SIP coefficient: yyyy +A_DMAX = 96.50 / Maximum absolute value of distortion function + +AP_ORDER= 4 / SIP distortion polynomial order for AP +AP_1_0 = 5.9649623134206E-06 / SIP coefficient: x +AP_0_1 = -8.3563633819506E-06 / SIP coefficient: y +AP_2_0 = 4.6391279824110E-06 / SIP coefficient: xx +AP_1_1 = -1.4755159708559E-06 / SIP coefficient: xy +AP_0_2 = 6.4191937073851E-08 / SIP coefficient: yy +AP_3_0 = -5.0301820040373E-10 / SIP coefficient: xxx +AP_2_1 = 3.2299095062767E-10 / SIP coefficient: xxy +AP_1_2 = 5.9682183111397E-11 / SIP coefficient: xyy +AP_0_3 = 3.8257592980128E-11 / SIP coefficient: yyy +AP_4_0 = 2.1394444946766E-14 / SIP coefficient: xxxx +AP_3_1 = -2.3531528160891E-14 / SIP coefficient: xxxy +AP_2_2 = -6.3049777026371E-15 / SIP coefficient: xxyy +AP_1_3 = -4.0743135634870E-15 / SIP coefficient: xyyy +AP_0_4 = 1.3469594159815E-15 / SIP coefficient: yyyy + +B_ORDER = 4 / SIP distortion polynomial order for B +B_2_0 = -6.2926490499120E-06 / SIP coefficient: xx +B_1_1 = 5.9146560187892E-08 / SIP coefficient: xy +B_0_2 = 2.1061956862630E-07 / SIP coefficient: yy +B_3_0 = 8.6240995389586E-10 / SIP coefficient: xxx +B_2_1 = -6.7715107588365E-11 / SIP coefficient: xxy +B_1_2 = -5.1237410950671E-11 / SIP coefficient: xyy +B_0_3 = -5.0622542139077E-12 / SIP coefficient: yyy +B_4_0 = -4.3853697321471E-14 / SIP coefficient: xxxx +B_3_1 = 4.0077335382236E-15 / SIP coefficient: xxxy +B_2_2 = 3.3307943746343E-15 / SIP coefficient: xxyy +B_1_3 = -1.8559485838936E-15 / SIP coefficient: xyyy +B_0_4 = 5.1753961684558E-16 / SIP coefficient: yyyy +B_DMAX = 95.54 / Maximum absolute value of distortion function + +BP_ORDER= 4 / SIP distortion polynomial order for BP +BP_1_0 = 2.2440627219345E-05 / SIP coefficient: x +BP_0_1 = -5.3534179990933E-06 / SIP coefficient: y +BP_2_0 = 6.3381348251001E-06 / SIP coefficient: xx +BP_1_1 = -5.7866326487642E-08 / SIP coefficient: xy +BP_0_2 = -2.1754801138237E-07 / SIP coefficient: yy +BP_3_0 = -8.5509468876083E-10 / SIP coefficient: xxx +BP_2_1 = 5.9962354835928E-11 / SIP coefficient: xxy +BP_1_2 = 5.4445150144274E-11 / SIP coefficient: xyy +BP_0_3 = 3.4614188483640E-12 / SIP coefficient: yyy +BP_4_0 = 4.2670473211337E-14 / SIP coefficient: xxxx +BP_3_1 = -2.7332730855666E-15 / SIP coefficient: xxxy +BP_2_2 = -3.3053766170687E-15 / SIP coefficient: xxyy +BP_1_3 = 2.2994237554827E-15 / SIP coefficient: xyyy +BP_0_4 = -5.5022506030438E-16 / SIP coefficient: yyyy + +COMMENT ----------------------------------------------------------------------- +COMMENT The WCSLIB header parser handles a SIP distortion (as above) by +COMMENT translating its keyrecords internally into a 'SIP' distortion type +COMMENT for later analysis. That translation may also be written directly +COMMENT in a header as done here. +COMMENT +COMMENT Note the addition of renormalization parameters, explained below: +COMMENT DP1A.OFFSET.1 = CRPIX1, +COMMENT DP1A.OFFSET.2 = CRPIX2, +COMMENT DP2A.OFFSET.1 = CRPIX1, +COMMENT DP2A.OFFSET.2 = CRPIX2. +COMMENT These are added to the distortion parameters since the WCSLIB +COMMENT routines that implement distortions do not have access to CRPIXja. +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEA= 'SIPTPV-1: SIP translated to a ''SIP'' distortion' +CRPIX1A = -3925.16 / Pixel coordinate of reference point +CRPIX2A = 4360.23 / Pixel coordinate of reference point +CD1_1A = 0.00028610265860158 / [deg] CD matrix element +CD1_2A = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1A = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2A = -0.00028152525617189 / [deg] CD matrix element +CTYPE1A = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2A = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1A = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2A = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1A = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2A = 'deg ' / Image axis-2 celestial-coordinate units + +CPDIS1A = 'SIP ' / P = prior distortion, Simple Imaging Polynomial +DP1A = 'NAXES: 2' / Two independent variables +DP1A = 'OFFSET.1: -3925.16' +DP1A = 'OFFSET.2: 4360.23' +DP1A = 'SIP.FWD.2_0: -4.6101438020313E-06' / SIP coefficient: xx +DP1A = 'SIP.FWD.1_1: 1.4745130969827E-06' / SIP coefficient: xy +DP1A = 'SIP.FWD.0_2: -6.8832077243635E-08' / SIP coefficient: yy +DP1A = 'SIP.FWD.3_0: 5.1080179892854E-10' / SIP coefficient: xxx +DP1A = 'SIP.FWD.2_1: -3.2570122733976E-10' / SIP coefficient: xxy +DP1A = 'SIP.FWD.1_2: -5.4789597808432E-11' / SIP coefficient: xyy +DP1A = 'SIP.FWD.0_3: -3.9165520771852E-11' / SIP coefficient: yyy +DP1A = 'SIP.FWD.4_0: -2.2410038481669E-14' / SIP coefficient: xxxx +DP1A = 'SIP.FWD.3_1: 2.4024589153935E-14' / SIP coefficient: xxxy +DP1A = 'SIP.FWD.2_2: 5.8725301231513E-15' / SIP coefficient: xxyy +DP1A = 'SIP.FWD.1_3: 4.3257176022080E-15' / SIP coefficient: xyyy +DP1A = 'SIP.FWD.0_4: -1.3734790334086E-15' / SIP coefficient: yyyy +CPERR1A = 96.50 / Maximum absolute value of distortion function + +DP1A = 'SIP.REV.1_0: 5.9649623134206E-06' / SIP coefficient: x +DP1A = 'SIP.REV.0_1: -8.3563633819506E-06' / SIP coefficient: y +DP1A = 'SIP.REV.2_0: 4.6391279824110E-06' / SIP coefficient: xx +DP1A = 'SIP.REV.1_1: -1.4755159708559E-06' / SIP coefficient: xy +DP1A = 'SIP.REV.0_2: 6.4191937073851E-08' / SIP coefficient: yy +DP1A = 'SIP.REV.3_0: -5.0301820040373E-10' / SIP coefficient: xxx +DP1A = 'SIP.REV.2_1: 3.2299095062767E-10' / SIP coefficient: xxy +DP1A = 'SIP.REV.1_2: 5.9682183111397E-11' / SIP coefficient: xyy +DP1A = 'SIP.REV.0_3: 3.8257592980128E-11' / SIP coefficient: yyy +DP1A = 'SIP.REV.4_0: 2.1394444946766E-14' / SIP coefficient: xxxx +DP1A = 'SIP.REV.3_1: -2.3531528160891E-14' / SIP coefficient: xxxy +DP1A = 'SIP.REV.2_2: -6.3049777026371E-15' / SIP coefficient: xxyy +DP1A = 'SIP.REV.1_3: -4.0743135634870E-15' / SIP coefficient: xyyy +DP1A = 'SIP.REV.0_4: 1.3469594159815E-15' / SIP coefficient: yyyy + +CPDIS2A = 'SIP ' / P = prior distortion, Simple Imaging Polynomial +DP2A = 'NAXES: 2' / Two independent variables +DP2A = 'OFFSET.1: -3925.16' +DP2A = 'OFFSET.2: 4360.23' +DP2A = 'SIP.FWD.2_0: -6.2926490499120E-06' / SIP coefficient: xx +DP2A = 'SIP.FWD.1_1: 5.9146560187892E-08' / SIP coefficient: xy +DP2A = 'SIP.FWD.0_2: 2.1061956862630E-07' / SIP coefficient: yy +DP2A = 'SIP.FWD.3_0: 8.6240995389586E-10' / SIP coefficient: xxx +DP2A = 'SIP.FWD.2_1: -6.7715107588365E-11' / SIP coefficient: xxy +DP2A = 'SIP.FWD.1_2: -5.1237410950671E-11' / SIP coefficient: xyy +DP2A = 'SIP.FWD.0_3: -5.0622542139077E-12' / SIP coefficient: yyy +DP2A = 'SIP.FWD.4_0: -4.3853697321471E-14' / SIP coefficient: xxxx +DP2A = 'SIP.FWD.3_1: 4.0077335382236E-15' / SIP coefficient: xxxy +DP2A = 'SIP.FWD.2_2: 3.3307943746343E-15' / SIP coefficient: xxyy +DP2A = 'SIP.FWD.1_3: -1.8559485838936E-15' / SIP coefficient: xyyy +DP2A = 'SIP.FWD.0_4: 5.1753961684558E-16' / SIP coefficient: yyyy +CPERR2A = 95.54 / Maximum absolute value of distortion function + +DP2A = 'SIP.REV.1_0: 2.2440627219345E-05' / SIP coefficient: x +DP2A = 'SIP.REV.0_1: -5.3534179990933E-06' / SIP coefficient: y +DP2A = 'SIP.REV.2_0: 6.3381348251001E-06' / SIP coefficient: xx +DP2A = 'SIP.REV.1_1: -5.7866326487642E-08' / SIP coefficient: xy +DP2A = 'SIP.REV.0_2: -2.1754801138237E-07' / SIP coefficient: yy +DP2A = 'SIP.REV.3_0: -8.5509468876083E-10' / SIP coefficient: xxx +DP2A = 'SIP.REV.2_1: 5.9962354835928E-11' / SIP coefficient: xxy +DP2A = 'SIP.REV.1_2: 5.4445150144274E-11' / SIP coefficient: xyy +DP2A = 'SIP.REV.0_3: 3.4614188483640E-12' / SIP coefficient: yyy +DP2A = 'SIP.REV.4_0: 4.2670473211337E-14' / SIP coefficient: xxxx +DP2A = 'SIP.REV.3_1: -2.7332730855666E-15' / SIP coefficient: xxxy +DP2A = 'SIP.REV.2_2: -3.3053766170687E-15' / SIP coefficient: xxyy +DP2A = 'SIP.REV.1_3: 2.2994237554827E-15' / SIP coefficient: xyyy +DP2A = 'SIP.REV.0_4: -5.5022506030438E-16' / SIP coefficient: yyyy + +COMMENT ----------------------------------------------------------------------- +COMMENT WCSLIB implements the 'SIP' distortion (as above), including its +COMMENT polynomial approximation to the inverse, as a special case of the +COMMENT more general 'TPD' distortion. +COMMENT +COMMENT TPD supports all of the constructs defined in WCS Paper IV, and +COMMENT follows it in computing distortion corrections from pixel coordinates. +COMMENT However, the independent variables of the SIP polynomial are offsets +COMMENT from the reference pixel. This is handled here by setting the +COMMENT renormalization parameters: +COMMENT DP1B.OFFSET.1 = CRPIX1, +COMMENT DP1B.OFFSET.2 = CRPIX2, +COMMENT DP2B.OFFSET.1 = CRPIX1, +COMMENT DP2B.OFFSET.2 = CRPIX2. +COMMENT +COMMENT Keycomments show the mapping between SIP keywords and TPD coefficient +COMMENT indices. +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEB= 'SIPTPV-2: SIP translated to a ''TPD'' distortion' +CRPIX1B = -3925.16 / Pixel coordinate of reference point +CRPIX2B = 4360.23 / Pixel coordinate of reference point +CD1_1B = 0.00028610265860158 / [deg] CD matrix element +CD1_2B = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1B = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2B = -0.00028152525617189 / [deg] CD matrix element +CTYPE1B = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2B = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1B = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2B = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1B = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2B = 'deg ' / Image axis-2 celestial-coordinate units + +CPDIS1B = 'TPD' / P = prior, Template Polynomial Distortion +DP1B = 'NAXES: 2' / Two independent variables +DP1B = 'OFFSET.1: -3925.16' +DP1B = 'OFFSET.2: 4360.23' +DP1B = 'TPD.FWD.0: 0.0' / TPD coefficient: 1 +DP1B = 'TPD.FWD.1: 0.0' / TPD coefficient: x A_1_0 +DP1B = 'TPD.FWD.4: -4.6101438020313E-06' / TPD coefficient: xx A_2_0 +DP1B = 'TPD.FWD.5: 1.4745130969827E-06' / TPD coefficient: xy A_1_1 +DP1B = 'TPD.FWD.6: -6.8832077243635E-08' / TPD coefficient: yy A_0_2 +DP1B = 'TPD.FWD.7: 5.1080179892854E-10' / TPD coefficient: xxx A_3_0 +DP1B = 'TPD.FWD.8: -3.2570122733976E-10' / TPD coefficient: xxy A_2_1 +DP1B = 'TPD.FWD.9: -5.4789597808432E-11' / TPD coefficient: xyy A_1_2 +DP1B = 'TPD.FWD.10: -3.9165520771852E-11' / TPD coefficient: yyy A_0_3 +DP1B = 'TPD.FWD.12: -2.2410038481669E-14' / TPD coefficient: xxxx A_4_0 +DP1B = 'TPD.FWD.13: 2.4024589153935E-14' / TPD coefficient: xxxy A_3_1 +DP1B = 'TPD.FWD.14: 5.8725301231513E-15' / TPD coefficient: xxyy A_2_2 +DP1B = 'TPD.FWD.15: 4.3257176022080E-15' / TPD coefficient: xyyy A_1_3 +DP1B = 'TPD.FWD.16: -1.3734790334086E-15' / TPD coefficient: yyyy A_0_4 +CPERR1B = 96.50 / Maximum absolute value of distortion function + +DP1B = 'TPD.REV.0: 0.0' / TPD coefficient: 1 +DP1B = 'TPD.REV.1: 5.9649623134206E-06' / TPD coefficient: x AP_1_0 +DP1B = 'TPD.REV.2: -8.3563633819506E-06' / TPD coefficient: y AP_0_1 +DP1B = 'TPD.REV.4: 4.6391279824110E-06' / TPD coefficient: xx AP_2_0 +DP1B = 'TPD.REV.5: -1.4755159708559E-06' / TPD coefficient: xy AP_1_1 +DP1B = 'TPD.REV.6: 6.4191937073851E-08' / TPD coefficient: yy AP_0_2 +DP1B = 'TPD.REV.7: -5.0301820040373E-10' / TPD coefficient: xxx AP_3_0 +DP1B = 'TPD.REV.8: 3.2299095062767E-10' / TPD coefficient: xxy AP_2_1 +DP1B = 'TPD.REV.9: 5.9682183111397E-11' / TPD coefficient: xyy AP_1_2 +DP1B = 'TPD.REV.10: 3.8257592980128E-11' / TPD coefficient: yyy AP_0_3 +DP1B = 'TPD.REV.12: 2.1394444946766E-14' / TPD coefficient: xxxx AP_4_0 +DP1B = 'TPD.REV.13: -2.3531528160891E-14' / TPD coefficient: xxxy AP_3_1 +DP1B = 'TPD.REV.14: -6.3049777026371E-15' / TPD coefficient: xxyy AP_2_2 +DP1B = 'TPD.REV.15: -4.0743135634870E-15' / TPD coefficient: xyyy AP_1_3 +DP1B = 'TPD.REV.16: 1.3469594159815E-15' / TPD coefficient: yyyy AP_0_4 + +CPDIS2B = 'TPD' / P = prior, Template Polynomial Distortion +DP2B = 'NAXES: 2' / Two independent variables +DP2B = 'OFFSET.1: -3925.16' +DP2B = 'OFFSET.2: 4360.23' +DP2B = 'TPD.FWD.0: 0.0' / TPD coefficient: 1 +DP2B = 'TPD.FWD.2: 0.0' / TPD coefficient: y B_0_1 +DP2B = 'TPD.FWD.4: -6.2926490499120E-06' / TPD coefficient: xx B_2_0 +DP2B = 'TPD.FWD.5: 5.9146560187892E-08' / TPD coefficient: xy B_1_1 +DP2B = 'TPD.FWD.6: 2.1061956862630E-07' / TPD coefficient: yy B_0_2 +DP2B = 'TPD.FWD.7: 8.6240995389586E-10' / TPD coefficient: xxx B_3_0 +DP2B = 'TPD.FWD.8: -6.7715107588365E-11' / TPD coefficient: xxy B_2_1 +DP2B = 'TPD.FWD.9: -5.1237410950671E-11' / TPD coefficient: xyy B_1_2 +DP2B = 'TPD.FWD.10: -5.0622542139077E-12' / TPD coefficient: yyy B_0_3 +DP2B = 'TPD.FWD.12: -4.3853697321471E-14' / TPD coefficient: xxxx B_4_0 +DP2B = 'TPD.FWD.13: 4.0077335382236E-15' / TPD coefficient: xxxy B_3_1 +DP2B = 'TPD.FWD.14: 3.3307943746343E-15' / TPD coefficient: xxyy B_2_2 +DP2B = 'TPD.FWD.15: -1.8559485838936E-15' / TPD coefficient: xyyy B_1_3 +DP2B = 'TPD.FWD.16: 5.1753961684558E-16' / TPD coefficient: yyyy B_0_4 +CPERR2B = 95.54 / Maximum absolute value of distortion function + +DP2B = 'TPD.REV.0: 0.0' / TPD coefficient: 1 +DP2B = 'TPD.REV.1: 2.2440627219345E-05' / TPD coefficient: x BP_1_0 +DP2B = 'TPD.REV.2: -5.3534179990933E-06' / TPD coefficient: y BP_0_1 +DP2B = 'TPD.REV.4: 6.3381348251001E-06' / TPD coefficient: xx BP_2_0 +DP2B = 'TPD.REV.5: -5.7866326487642E-08' / TPD coefficient: xy BP_1_1 +DP2B = 'TPD.REV.6: -2.1754801138237E-07' / TPD coefficient: yy BP_0_2 +DP2B = 'TPD.REV.7: -8.5509468876083E-10' / TPD coefficient: xxx BP_3_0 +DP2B = 'TPD.REV.8: 5.9962354835928E-11' / TPD coefficient: xxy BP_2_1 +DP2B = 'TPD.REV.9: 5.4445150144274E-11' / TPD coefficient: xyy BP_1_2 +DP2B = 'TPD.REV.10: 3.4614188483640E-12' / TPD coefficient: yyy BP_0_3 +DP2B = 'TPD.REV.12: 4.2670473211337E-14' / TPD coefficient: xxxx BP_4_0 +DP2B = 'TPD.REV.13: -2.7332730855666E-15' / TPD coefficient: xxxy BP_3_1 +DP2B = 'TPD.REV.14: -3.3053766170687E-15' / TPD coefficient: xxyy BP_2_2 +DP2B = 'TPD.REV.15: 2.2994237554827E-15' / TPD coefficient: xyyy BP_1_3 +DP2B = 'TPD.REV.16: -5.5022506030438E-16' / TPD coefficient: yyyy BP_0_4 + +COMMENT ----------------------------------------------------------------------- +COMMENT The SIP representation above translated to Polynomial as a prior +COMMENT distortion, including SIP's polynomial approximation to the inverse. +COMMENT +COMMENT The comments above for the translation to TPD apply here as well. +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEC= 'SIPTPV-3: SIP translated to a ''Polynomial'' distortion' +CRPIX1C = -3925.16 / Pixel coordinate of reference point +CRPIX2C = 4360.23 / Pixel coordinate of reference point +CD1_1C = 0.00028610265860158 / [deg] CD matrix element +CD1_2C = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1C = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2C = -0.00028152525617189 / [deg] CD matrix element +CTYPE1C = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2C = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1C = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2C = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1C = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2C = 'deg ' / Image axis-2 celestial-coordinate units + +CPDIS1C = 'Polynomial' / P = prior, Polynomial distortion +DP1C = 'NAXES: 2' / Two independent variables +DP1C = 'OFFSET.1: -3925.16' +DP1C = 'OFFSET.2: 4360.23' +DP1C = 'NTERMS: 14' / Number of terms in the polynomial +DP1C = 'TERM.1.COEFF: 0.0' / Poly coefficient: 1 +DP1C = 'TERM.2.COEFF: 0' / Poly coefficient: x A_1_0 +DP1C = 'TERM.2.VAR.1: 1' / Poly power 1 (x): x +DP1C = 'TERM.3.COEFF: -4.6101438020313E-06' / Poly coefficient: xx A_2_0 +DP1C = 'TERM.3.VAR.1: 2' / Poly power 1 (x): xx +DP1C = 'TERM.4.COEFF: 1.4745130969827E-06' / Poly coefficient: xy A_1_1 +DP1C = 'TERM.4.VAR.1: 1' / Poly power 1 (x): xy +DP1C = 'TERM.4.VAR.2: 1' / Poly power 2 (y): xy +DP1C = 'TERM.5.COEFF: -6.8832077243635E-08' / Poly coefficient: yy A_0_2 +DP1C = 'TERM.5.VAR.2: 2' / Poly power 2 (y): yy +DP1C = 'TERM.6.COEFF: 5.1080179892854E-10' / Poly coefficient: xxx A_3_0 +DP1C = 'TERM.6.VAR.1: 3' / Poly power 1 (x): xxx +DP1C = 'TERM.7.COEFF: -3.2570122733976E-10' / Poly coefficient: xxy A_2_1 +DP1C = 'TERM.7.VAR.1: 2' / Poly power 1 (x): xxy +DP1C = 'TERM.7.VAR.2: 1' / Poly power 2 (y): xxy +DP1C = 'TERM.8.COEFF: -5.4789597808432E-11' / Poly coefficient: xyy A_1_2 +DP1C = 'TERM.8.VAR.1: 1' / Poly power 1 (x): xyy +DP1C = 'TERM.8.VAR.2: 2' / Poly power 2 (y): xyy +DP1C = 'TERM.9.COEFF: -3.9165520771852E-11' / Poly coefficient: yyy A_0_3 +DP1C = 'TERM.9.VAR.2: 3' / Poly power 2 (y): yyy +DP1C = 'TERM.10.COEFF: -2.2410038481669E-14' / Poly coefficient: xxxx A_4_0 +DP1C = 'TERM.10.VAR.1: 4' / Poly power 1 (x): xxxx +DP1C = 'TERM.11.COEFF: 2.4024589153935E-14' / Poly coefficient: xxxy A_3_1 +DP1C = 'TERM.11.VAR.1: 3' / Poly power 1 (x): xxxy +DP1C = 'TERM.11.VAR.2: 1' / Poly power 2 (y): xxxy +DP1C = 'TERM.12.COEFF: 5.8725301231513E-15' / Poly coefficient: xxyy A_2_2 +DP1C = 'TERM.12.VAR.1: 2' / Poly power 1 (x): xxyy +DP1C = 'TERM.12.VAR.2: 2' / Poly power 2 (y): xxyy +DP1C = 'TERM.13.COEFF: 4.3257176022080E-15' / Poly coefficient: xyyy A_1_3 +DP1C = 'TERM.13.VAR.1: 1' / Poly power 1 (x): xyyy +DP1C = 'TERM.13.VAR.2: 3' / Poly power 2 (y): xyyy +DP1C = 'TERM.14.COEFF: -1.3734790334086E-15' / Poly coefficient: yyyy A_0_4 +DP1C = 'TERM.14.VAR.2: 4' / Poly power 2 (y): yyyy +CPERR1C = 96.50 / Maximum absolute value of distortion function + +CPDIS2C = 'Polynomial' / P = prior, Polynomial distortion +DP2C = 'NAXES: 2' / Two independent variables +DP2C = 'OFFSET.1: -3925.16' +DP2C = 'OFFSET.2: 4360.23' +DP2C = 'NTERMS: 14' / Number of terms in the polynomial +DP2C = 'TERM.1.COEFF: 0.0' / Poly coefficient: 1 +DP2C = 'TERM.2.COEFF: 0' / Poly coefficient: y B_0_1 +DP2C = 'TERM.2.VAR.2: 1' / Poly power 2 (y): y +DP2C = 'TERM.3.COEFF: -6.2926490499120E-06' / Poly coefficient: xx B_2_0 +DP2C = 'TERM.3.VAR.1: 2' / Poly power 1 (x): xx +DP2C = 'TERM.4.COEFF: 5.9146560187892E-08' / Poly coefficient: xy B_1_1 +DP2C = 'TERM.4.VAR.1: 1' / Poly power 1 (x): xy +DP2C = 'TERM.4.VAR.2: 1' / Poly power 2 (y): xy +DP2C = 'TERM.5.COEFF: 2.1061956862630E-07' / Poly coefficient: yy B_0_2 +DP2C = 'TERM.5.VAR.2: 2' / Poly power 2 (y): yy +DP2C = 'TERM.6.COEFF: 8.6240995389586E-10' / Poly coefficient: xxx B_3_0 +DP2C = 'TERM.6.VAR.1: 3' / Poly power 1 (x): xxx +DP2C = 'TERM.7.COEFF: -6.7715107588365E-11' / Poly coefficient: xxy B_2_1 +DP2C = 'TERM.7.VAR.1: 2' / Poly power 1 (x): xxy +DP2C = 'TERM.7.VAR.2: 1' / Poly power 2 (y): xxy +DP2C = 'TERM.8.COEFF: -5.1237410950671E-11' / Poly coefficient: xyy B_1_2 +DP2C = 'TERM.8.VAR.1: 1' / Poly power 1 (x): xyy +DP2C = 'TERM.8.VAR.2: 2' / Poly power 2 (y): xyy +DP2C = 'TERM.9.COEFF: -5.0622542139077E-12' / Poly coefficient: yyy B_0_3 +DP2C = 'TERM.9.VAR.2: 3' / Poly power 2 (y): yyy +DP2C = 'TERM.10.COEFF: -4.3853697321471E-14' / Poly coefficient: xxxx B_4_0 +DP2C = 'TERM.10.VAR.1: 4' / Poly power 1 (x): xxxx +DP2C = 'TERM.11.COEFF: 4.0077335382236E-15' / Poly coefficient: xxxy B_3_1 +DP2C = 'TERM.11.VAR.1: 3' / Poly power 1 (x): xxxy +DP2C = 'TERM.11.VAR.2: 1' / Poly power 2 (y): xxxy +DP2C = 'TERM.12.COEFF: 3.3307943746343E-15' / Poly coefficient: xxyy B_2_2 +DP2C = 'TERM.12.VAR.1: 2' / Poly power 1 (x): xxyy +DP2C = 'TERM.12.VAR.2: 2' / Poly power 2 (y): xxyy +DP2C = 'TERM.13.COEFF: -1.8559485838936E-15' / Poly coefficient: xyyy B_1_3 +DP2C = 'TERM.13.VAR.1: 1' / Poly power 1 (x): xyyy +DP2C = 'TERM.13.VAR.2: 3' / Poly power 2 (y): xyyy +DP2C = 'TERM.14.COEFF: 5.1753961684558E-16' / Poly coefficient: yyyy B_0_4 +DP2C = 'TERM.14.VAR.2: 4' / Poly power 2 (y): yyyy +CPERR2C = 95.54 / Maximum absolute value of distortion function + +COMMENT ======================================================================= +COMMENT The above SIP distortion translated to TPV differs only in CTYPEia and +COMMENT the keyrecords relating to the distortion polynomial. The polynomial +COMMENT coefficients differ from SIP because the TPV distortion follows the +COMMENT linear transformation (sequent), rather than preceding it (prior). +COMMENT +COMMENT TPV supports alternate representations, with axis mapping tied to the +COMMENT celestial axes. In the keycomments, x and y for TPV refer to the RA +COMMENT and DEC axes respectively, which are axes 1 and 2 here. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEP= 'SIPTPV-4: native TPV representation' +CRPIX1P = -3925.16 / Pixel coordinate of reference point +CRPIX2P = 4360.23 / Pixel coordinate of reference point +CD1_1P = 0.00028610265860158 / [deg] CD matrix element +CD1_2P = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1P = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2P = -0.00028152525617189 / [deg] CD matrix element +CTYPE1P = 'RA---TPV' / TAN (gnomonic) projection + distortions +CTYPE2P = 'DEC--TPV' / TAN (gnomonic) projection + distortions +CRVAL1P = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2P = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1P = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2P = 'deg ' / Image axis-2 celestial-coordinate units + +PV1_1P = 1.0 / TPV coefficient: x +PV1_4P = -0.01616956178892100 / TPV coefficient: xx +PV1_5P = -0.00517474938746320 / TPV coefficient: xy +PV1_6P = -0.00023850435805678 / TPV coefficient: yy +PV1_7P = 0.00629760478963159 / TPV coefficient: xxx +PV1_8P = 0.00397207946734115 / TPV coefficient: xxy +PV1_9P = -0.00067729620645185 / TPV coefficient: xyy +PV1_10P = 0.00050354679706662 / TPV coefficient: yyy +PV1_12P = -0.00097355342974408 / TPV coefficient: xxxx +PV1_13P = -0.00102312736844768 / TPV coefficient: xxxy +PV1_14P = 0.00025362356834782 / TPV coefficient: xxyy +PV1_15P = -0.00020021192475813 / TPV coefficient: xyyy +PV1_16P = -6.2162660705097E-05 / TPV coefficient: yyyy + +PV2_1P = 1.0 / TPV coefficient: y +PV2_4P = -0.00074364565692291 / TPV coefficient: yy +PV2_5P = 0.00018425002539649 / TPV coefficient: yx +PV2_6P = 0.02197159197666640 / TPV coefficient: xx +PV2_7P = -7.5449775263740E-05 / TPV coefficient: yyy +PV2_8P = 0.00064935718511019 / TPV coefficient: yyx +PV2_9P = -0.00081219646536117 / TPV coefficient: yxx +PV2_10P = -0.01050984336151780 / TPV coefficient: xxx +PV2_12P = -2.1755521894303E-05 / TPV coefficient: yyyy +PV2_13P = -7.9010371768005E-05 / TPV coefficient: yyyx +PV2_14P = -0.00015571170306733 / TPV coefficient: yyxx +PV2_15P = 0.00016933561718011 / TPV coefficient: yxxx +PV2_16P = 0.00186540574051853 / TPV coefficient: xxxx + +COMMENT ----------------------------------------------------------------------- +COMMENT WCSLIB handles a TPV "projection" (as above) by translating its PVi_ma +COMMENT keyrecords internally into a 'TPV' distortion type for later analysis. +COMMENT That translation may also be written directly in a header as done +COMMENT here. +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. Here, identification of the variables associated with +COMMENT the TPV coefficients swaps between DQ1 and DQ2 due to the axis maps: +COMMENT DQ1Q.AXIS.1 = 1, +COMMENT DQ1Q.AXIS.2 = 2, +COMMENT versus +COMMENT DQ2Q.AXIS.1 = 2, +COMMENT DQ2Q.AXIS.2 = 1. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEQ= 'SIPTPV-5: TPV translated to a ''TPV'' distortion' +CRPIX1Q = -3925.16 / Pixel coordinate of reference point +CRPIX2Q = 4360.23 / Pixel coordinate of reference point +CD1_1Q = 0.00028610265860158 / [deg] CD matrix element +CD1_2Q = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1Q = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2Q = -0.00028152525617189 / [deg] CD matrix element +CTYPE1Q = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2Q = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1Q = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2Q = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1Q = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2Q = 'deg ' / Image axis-2 celestial-coordinate units + +CQDIS1Q = 'TPV' / Q = sequent distortion +DQ1Q = 'NAXES: 2' / Two independent variables +DQ1Q = 'AXIS.1: 1' / 1st independent variable: axis 1 = x +DQ1Q = 'AXIS.2: 2' / 2nd independent variable: axis 2 = y +DQ1Q = 'TPV.1: 1.0' / TPV coefficient: x +DQ1Q = 'TPV.4: -0.01616956178892100' / TPV coefficient: xx +DQ1Q = 'TPV.5: -0.00517474938746320' / TPV coefficient: xy +DQ1Q = 'TPV.6: -0.00023850435805678' / TPV coefficient: yy +DQ1Q = 'TPV.7: 0.00629760478963159' / TPV coefficient: xxx +DQ1Q = 'TPV.8: 0.00397207946734115' / TPV coefficient: xxy +DQ1Q = 'TPV.9: -0.00067729620645185' / TPV coefficient: xyy +DQ1Q = 'TPV.10: 0.00050354679706662' / TPV coefficient: yyy +DQ1Q = 'TPV.12: -0.00097355342974408' / TPV coefficient: xxxx +DQ1Q = 'TPV.13: -0.00102312736844768' / TPV coefficient: xxxy +DQ1Q = 'TPV.14: 0.00025362356834782' / TPV coefficient: xxyy +DQ1Q = 'TPV.15: -0.00020021192475813' / TPV coefficient: xyyy +DQ1Q = 'TPV.16: -6.2162660705097E-05' / TPV coefficient: yyyy +CQERR1Q = 96.50 / Maximum absolute value of distortion function + +CQDIS2Q = 'TPV' / Q = sequent distortion +DQ2Q = 'NAXES: 2' / Two independent variables +DQ2Q = 'AXIS.1: 2' / 1st independent variable: axis 2 = y +DQ2Q = 'AXIS.2: 1' / 2nd independent variable: axis 1 = x +DQ2Q = 'TPV.1: 1.0' / TPV coefficient: y +DQ2Q = 'TPV.4: -0.00074364565692291' / TPV coefficient: yy +DQ2Q = 'TPV.5: 0.00018425002539649' / TPV coefficient: yx +DQ2Q = 'TPV.6: 0.02197159197666640' / TPV coefficient: xx +DQ2Q = 'TPV.7: -7.5449775263740E-05' / TPV coefficient: yyy +DQ2Q = 'TPV.8: 0.00064935718511019' / TPV coefficient: yyx +DQ2Q = 'TPV.9: -0.00081219646536117' / TPV coefficient: yxx +DQ2Q = 'TPV.10: -0.01050984336151780' / TPV coefficient: xxx +DQ2Q = 'TPV.12: -2.1755521894303E-05' / TPV coefficient: yyyy +DQ2Q = 'TPV.13: -7.9010371768005E-05' / TPV coefficient: yyyx +DQ2Q = 'TPV.14: -0.00015571170306733' / TPV coefficient: yyxx +DQ2Q = 'TPV.15: 0.00016933561718011' / TPV coefficient: yxxx +DQ2Q = 'TPV.16: 0.00186540574051853' / TPV coefficient: xxxx +CQERR2Q = 95.54 / Maximum absolute value of distortion function + +COMMENT ----------------------------------------------------------------------- +COMMENT WCSLIB implements the 'TPV' distortion as a special case of the more +COMMENT general 'TPD' distortion. +COMMENT +COMMENT Using the same axis mapping as above, the 'TPV' distortion translates +COMMENT straightforwardly to 'TPD' which is a super-set. +COMMENT +COMMENT This transformation is done internally by WCSLIB (by tpvset()) in +COMMENT implementing TPV as TPD. +COMMENT ----------------------------------------------------------------------- + +WCSNAMER= 'SIPTPV-6: TPV translated to a ''TPD'' distortion' +CRPIX1R = -3925.16 / Pixel coordinate of reference point +CRPIX2R = 4360.23 / Pixel coordinate of reference point +CD1_1R = 0.00028610265860158 / [deg] CD matrix element +CD1_2R = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1R = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2R = -0.00028152525617189 / [deg] CD matrix element +CTYPE1R = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2R = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1R = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2R = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1R = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2R = 'deg ' / Image axis-2 celestial-coordinate units + +CQDIS1R = 'TPD' / Q = sequent, Template Polynomial Distortion +DQ1R = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ1R = 'NAXES: 2' / Two independent variables +DQ1R = 'AXIS.1: 1' / 1st independent variable: axis 1 = x +DQ1R = 'AXIS.2: 2' / 2nd independent variable: axis 2 = y +DQ1R = 'TPD.FWD.1: 1.0' / TPD coefficient: x +DQ1R = 'TPD.FWD.4: -0.01616956178892100' / TPD coefficient: xx +DQ1R = 'TPD.FWD.5: -0.00517474938746320' / TPD coefficient: xy +DQ1R = 'TPD.FWD.6: -0.00023850435805678' / TPD coefficient: yy +DQ1R = 'TPD.FWD.7: 0.00629760478963159' / TPD coefficient: xxx +DQ1R = 'TPD.FWD.8: 0.00397207946734115' / TPD coefficient: xxy +DQ1R = 'TPD.FWD.9: -0.00067729620645185' / TPD coefficient: xyy +DQ1R = 'TPD.FWD.10: 0.00050354679706662' / TPD coefficient: yyy +DQ1R = 'TPD.FWD.12: -0.00097355342974408' / TPD coefficient: xxxx +DQ1R = 'TPD.FWD.13: -0.00102312736844768' / TPD coefficient: xxxy +DQ1R = 'TPD.FWD.14: 0.00025362356834782' / TPD coefficient: xxyy +DQ1R = 'TPD.FWD.15: -0.00020021192475813' / TPD coefficient: xyyy +DQ1R = 'TPD.FWD.16: -6.2162660705097E-05' / TPD coefficient: yyyy +CQERR1R = 96.50 / Maximum absolute value of distortion function + +CQDIS2R = 'TPD' / Q = sequent, Template Polynomial Distortion +DQ2R = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ2R = 'NAXES: 2' / Two independent variables +DQ2R = 'AXIS.1: 2' / 1st independent variable: axis 2 = y +DQ2R = 'AXIS.2: 1' / 2nd independent variable: axis 1 = x +DQ2R = 'TPD.FWD.1: 1.0' / TPD coefficient: y +DQ2R = 'TPD.FWD.4: -0.00074364565692291' / TPD coefficient: yy +DQ2R = 'TPD.FWD.5: 0.00018425002539649' / TPD coefficient: yx +DQ2R = 'TPD.FWD.6: 0.02197159197666640' / TPD coefficient: xx +DQ2R = 'TPD.FWD.7: -7.5449775263740E-05' / TPD coefficient: yyy +DQ2R = 'TPD.FWD.8: 0.00064935718511019' / TPD coefficient: yyx +DQ2R = 'TPD.FWD.9: -0.00081219646536117' / TPD coefficient: yxx +DQ2R = 'TPD.FWD.10: -0.01050984336151780' / TPD coefficient: xxx +DQ2R = 'TPD.FWD.12: -2.1755521894303E-05' / TPD coefficient: yyyy +DQ2R = 'TPD.FWD.13: -7.9010371768005E-05' / TPD coefficient: yyyx +DQ2R = 'TPD.FWD.14: -0.00015571170306733' / TPD coefficient: yyxx +DQ2R = 'TPD.FWD.15: 0.00016933561718011' / TPD coefficient: yxxx +DQ2R = 'TPD.FWD.16: 0.00186540574051853' / TPD coefficient: xxxx +CQERR2R = 95.54 / Maximum absolute value of distortion function + +COMMENT ----------------------------------------------------------------------- +COMMENT The TPV representation above translated to TPD as a sequent +COMMENT distortion, but this time without using an axis mapping. Note how +COMMENT the indices of the TPD coefficients for axis 2 now differ from TPV. +COMMENT +COMMENT In the keycomments, as before, x and y refer to axes 1 and 2, which +COMMENT are the RA and DEC axes. +COMMENT ----------------------------------------------------------------------- + +WCSNAMES= 'SIPTPV-7: TPV translated to a ''TPD'' distortion without axis map' +CRPIX1S = -3925.16 / Pixel coordinate of reference point +CRPIX2S = 4360.23 / Pixel coordinate of reference point +CD1_1S = 0.00028610265860158 / [deg] CD matrix element +CD1_2S = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1S = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2S = -0.00028152525617189 / [deg] CD matrix element +CTYPE1S = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2S = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1S = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2S = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1S = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2S = 'deg ' / Image axis-2 celestial-coordinate units + +CQDIS1S = 'TPD' / Q = sequent, Template Polynomial Distortion +DQ1S = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ1S = 'NAXES: 2' / Two independent variables +DQ1S = 'TPD.FWD.1: 1.0' / TPD coefficient: x +DQ1S = 'TPD.FWD.4: -0.01616956178892100' / TPD coefficient: xx +DQ1S = 'TPD.FWD.5: -0.00517474938746320' / TPD coefficient: xy +DQ1S = 'TPD.FWD.6: -0.00023850435805678' / TPD coefficient: yy +DQ1S = 'TPD.FWD.7: 0.00629760478963159' / TPD coefficient: xxx +DQ1S = 'TPD.FWD.8: 0.00397207946734115' / TPD coefficient: xxy +DQ1S = 'TPD.FWD.9: -0.00067729620645185' / TPD coefficient: xyy +DQ1S = 'TPD.FWD.10: 0.00050354679706662' / TPD coefficient: yyy +DQ1S = 'TPD.FWD.12: -0.00097355342974408' / TPD coefficient: xxxx +DQ1S = 'TPD.FWD.13: -0.00102312736844768' / TPD coefficient: xxxy +DQ1S = 'TPD.FWD.14: 0.00025362356834782' / TPD coefficient: xxyy +DQ1S = 'TPD.FWD.15: -0.00020021192475813' / TPD coefficient: xyyy +DQ1S = 'TPD.FWD.16: -6.2162660705097E-05' / TPD coefficient: yyyy +CQERR1S = 96.50 / Maximum absolute value of distortion function + +CQDIS2S = 'TPD' / Q = sequent, Template Polynomial Distortion +DQ2S = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ2S = 'NAXES: 2' / Two independent variables +DQ2S = 'TPD.FWD.2: 1.0' / TPD coefficient: y +DQ2S = 'TPD.FWD.6: -0.00074364565692291' / TPD coefficient: yy +DQ2S = 'TPD.FWD.5: 0.00018425002539649' / TPD coefficient: yx +DQ2S = 'TPD.FWD.4: 0.02197159197666640' / TPD coefficient: xx +DQ2S = 'TPD.FWD.10: -7.5449775263740E-05' / TPD coefficient: yyy +DQ2S = 'TPD.FWD.9: 0.00064935718511019' / TPD coefficient: yyx +DQ2S = 'TPD.FWD.8: -0.00081219646536117' / TPD coefficient: yxx +DQ2S = 'TPD.FWD.7: -0.01050984336151780' / TPD coefficient: xxx +DQ2S = 'TPD.FWD.16: -2.1755521894303E-05' / TPD coefficient: yyyy +DQ2S = 'TPD.FWD.15: -7.9010371768005E-05' / TPD coefficient: yyyx +DQ2S = 'TPD.FWD.14: -0.00015571170306733' / TPD coefficient: yyxx +DQ2S = 'TPD.FWD.13: 0.00016933561718011' / TPD coefficient: yxxx +DQ2S = 'TPD.FWD.12: 0.00186540574051853' / TPD coefficient: xxxx +CQERR2S = 95.54 / Maximum absolute value of distortion function + +COMMENT ----------------------------------------------------------------------- +COMMENT The TPV representation above translated to Polynomial as a sequent +COMMENT distortion using an axis mapping. +COMMENT +COMMENT The comments above for the translation to TPD apply here as well. +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. +COMMENT ----------------------------------------------------------------------- + +WCSNAMET= 'SIPTPV-8: TPV translated to a ''Polynomial'' distortion' +CRPIX1T = -3925.16 / Pixel coordinate of reference point +CRPIX2T = 4360.23 / Pixel coordinate of reference point +CD1_1T = 0.00028610265860158 / [deg] CD matrix element +CD1_2T = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1T = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2T = -0.00028152525617189 / [deg] CD matrix element +CTYPE1T = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2T = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1T = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2T = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1T = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2T = 'deg ' / Image axis-2 celestial-coordinate units + +CQDIS1T = 'Polynomial' / Q = sequent, Polynomial distortion +DQ1T = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ1T = 'NAXES: 2' / Two independent variables +DQ1T = 'AXIS.1: 1' / 1st independent variable: axis 1 = x +DQ1T = 'AXIS.2: 2' / 2nd independent variable: axis 2 = y +DQ1T = 'NTERMS: 13' / Number of terms in the polynomial +DQ1T = 'TERM.1.COEFF: 1' / Poly coefficient: x +DQ1T = 'TERM.1.VAR.1: 1' / Poly power 1 (x): x +DQ1T = 'TERM.2.COEFF: -0.01616956178892100' / Poly coefficient: xx +DQ1T = 'TERM.2.VAR.1: 2' / Poly power 1 (x): xx +DQ1T = 'TERM.3.COEFF: -0.00517474938746320' / Poly coefficient: xy +DQ1T = 'TERM.3.VAR.1: 1' / Poly power 1 (x): xy +DQ1T = 'TERM.3.VAR.2: 1' / Poly power 2 (y): xy +DQ1T = 'TERM.4.COEFF: -0.00023850435805678' / Poly coefficient: yy +DQ1T = 'TERM.4.VAR.2: 2' / Poly power 2 (y): yy +DQ1T = 'TERM.5.COEFF: 0.00629760478963159' / Poly coefficient: xxx +DQ1T = 'TERM.5.VAR.1: 3' / Poly power 1 (x): xxx +DQ1T = 'TERM.6.COEFF: 0.00397207946734115' / Poly coefficient: xxy +DQ1T = 'TERM.6.VAR.1: 2' / Poly power 1 (x): xxy +DQ1T = 'TERM.6.VAR.2: 1' / Poly power 2 (y): xxy +DQ1T = 'TERM.7.COEFF: -0.00067729620645185' / Poly coefficient: xyy +DQ1T = 'TERM.7.VAR.1: 1' / Poly power 1 (x): xyy +DQ1T = 'TERM.7.VAR.2: 2' / Poly power 2 (y): xyy +DQ1T = 'TERM.8.COEFF: 0.00050354679706662' / Poly coefficient: yyy +DQ1T = 'TERM.8.VAR.2: 3' / Poly power 2 (y): yyy +DQ1T = 'TERM.9.COEFF: -0.00097355342974408' / Poly coefficient: xxxx +DQ1T = 'TERM.9.VAR.1: 4' / Poly power 1 (x): xxxx +DQ1T = 'TERM.10.COEFF: -0.00102312736844768' / Poly coefficient: xxxy +DQ1T = 'TERM.10.VAR.1: 3' / Poly power 1 (x): xxxy +DQ1T = 'TERM.10.VAR.2: 1' / Poly power 2 (y): xxxy +DQ1T = 'TERM.11.COEFF: 0.00025362356834782' / Poly coefficient: xxyy +DQ1T = 'TERM.11.VAR.1: 2' / Poly power 1 (x): xxyy +DQ1T = 'TERM.11.VAR.2: 2' / Poly power 2 (y): xxyy +DQ1T = 'TERM.12.COEFF: -0.00020021192475813' / Poly coefficient: xyyy +DQ1T = 'TERM.12.VAR.1: 1' / Poly power 1 (x): xyyy +DQ1T = 'TERM.12.VAR.2: 3' / Poly power 2 (y): xyyy +DQ1T = 'TERM.13.COEFF: -6.2162660705097E-05' / Poly coefficient: yyyy +DQ1T = 'TERM.13.VAR.2: 4' / Poly power 2 (y): yyyy +CQERR1T = 96.50 / Maximum absolute value of distortion function + +CQDIS2T = 'Polynomial' / Q = sequent, Polynomial distortion +DQ2T = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ2T = 'NAXES: 2' / Two independent variables +DQ2T = 'AXIS.1: 2' / 1st independent variable: axis 2 = y +DQ2T = 'AXIS.2: 1' / 2nd independent variable: axis 1 = x +DQ2T = 'NTERMS: 13' / Number of terms in the polynomial +DQ2T = 'TERM.1.COEFF: 1' / Poly coefficient: y +DQ2T = 'TERM.1.VAR.1: 1' / Poly power 1 (x): y +DQ2T = 'TERM.2.COEFF: -0.00074364565692291' / Poly coefficient: yy +DQ2T = 'TERM.2.VAR.1: 2' / Poly power 1 (x): yy +DQ2T = 'TERM.3.COEFF: 0.00018425002539649' / Poly coefficient: yx +DQ2T = 'TERM.3.VAR.1: 1' / Poly power 1 (x): yx +DQ2T = 'TERM.3.VAR.2: 1' / Poly power 2 (y): yx +DQ2T = 'TERM.4.COEFF: 0.02197159197666640' / Poly coefficient: xx +DQ2T = 'TERM.4.VAR.2: 2' / Poly power 2 (y): xx +DQ2T = 'TERM.5.COEFF: -7.5449775263740E-05' / Poly coefficient: yyy +DQ2T = 'TERM.5.VAR.1: 3' / Poly power 1 (x): yyy +DQ2T = 'TERM.6.COEFF: 0.00064935718511019' / Poly coefficient: yyx +DQ2T = 'TERM.6.VAR.1: 2' / Poly power 1 (x): yyx +DQ2T = 'TERM.6.VAR.2: 1' / Poly power 2 (y): yyx +DQ2T = 'TERM.7.COEFF: -0.00081219646536117' / Poly coefficient: yxx +DQ2T = 'TERM.7.VAR.1: 1' / Poly power 1 (x): yxx +DQ2T = 'TERM.7.VAR.2: 2' / Poly power 2 (y): yxx +DQ2T = 'TERM.8.COEFF: -0.01050984336151780' / Poly coefficient: xxx +DQ2T = 'TERM.8.VAR.2: 3' / Poly power 2 (y): xxx +DQ2T = 'TERM.9.COEFF: -2.1755521894303E-05' / Poly coefficient: yyyy +DQ2T = 'TERM.9.VAR.1: 4' / Poly power 1 (x): yyyy +DQ2T = 'TERM.10.COEFF: -7.9010371768005E-05' / Poly coefficient: yyyx +DQ2T = 'TERM.10.VAR.1: 3' / Poly power 1 (x): yyyx +DQ2T = 'TERM.10.VAR.2: 1' / Poly power 2 (y): yyyx +DQ2T = 'TERM.11.COEFF: -0.00015571170306733' / Poly coefficient: yyxx +DQ2T = 'TERM.11.VAR.1: 2' / Poly power 1 (x): yyxx +DQ2T = 'TERM.11.VAR.2: 2' / Poly power 2 (y): yyxx +DQ2T = 'TERM.12.COEFF: 0.00016933561718011' / Poly coefficient: yxxx +DQ2T = 'TERM.12.VAR.1: 1' / Poly power 1 (x): yxxx +DQ2T = 'TERM.12.VAR.2: 3' / Poly power 2 (y): yxxx +DQ2T = 'TERM.13.COEFF: 0.00186540574051853' / Poly coefficient: xxxx +DQ2T = 'TERM.13.VAR.2: 4' / Poly power 2 (y): xxxx +CQERR2T = 95.54 / Maximum absolute value of distortion function + +COMMENT ----------------------------------------------------------------------- +COMMENT The TPV representation above translated to Polynomial as a sequent +COMMENT distortion, this time without using an axis mapping. +COMMENT +COMMENT The auxiliary (radial) variable is not used and was added solely for +COMMENT testing wcshdo(). +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEU= 'SIPTPV-9: TPV translated to ''Polynomial'' without axis mapping' +CRPIX1U = -3925.16 / Pixel coordinate of reference point +CRPIX2U = 4360.23 / Pixel coordinate of reference point +CD1_1U = 0.00028610265860158 / [deg] CD matrix element +CD1_2U = -6.2881662833181E-07 / [deg] CD matrix element +CD2_1U = -5.7720701811452E-06 / [deg] CD matrix element +CD2_2U = -0.00028152525617189 / [deg] CD matrix element +CTYPE1U = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2U = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1U = 274.8069457088980 / [deg] Right ascension at the reference point +CRVAL2U = -25.9746476963393 / [deg] Declination at the reference point +CUNIT1U = 'deg ' / Image axis-1 celestial-coordinate units +CUNIT2U = 'deg ' / Image axis-2 celestial-coordinate units + +CQDIS1U = 'Polynomial' / Q = sequent, Polynomial distortion +DQ1U = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ1U = 'NAXES: 2' / Two independent variables +DQ1U = 'NTERMS: 13' / Number of terms in the polynomial +DQ1U = 'NAUX: 1' / One auxiliary variable (not used) +DQ1U = 'AUX.1.COEFF.1: 1' / Coefficient of first variable +DQ1U = 'AUX.1.POWER.1: 2' / Power of first variable +DQ1U = 'AUX.1.COEFF.2: 1' / Coefficient of second variable +DQ1U = 'AUX.1.POWER.2: 2' / Power of second variable +DQ1U = 'AUX.1.POWER.0: 0.5' / Power of the sum of the terms +DQ1U = 'TERM.1.COEFF: 1' / Poly coefficient: x +DQ1U = 'TERM.1.VAR.1: 1' / Poly power 1 (x): x +DQ1U = 'TERM.2.COEFF: -0.01616956178892100' / Poly coefficient: xx +DQ1U = 'TERM.2.VAR.1: 2' / Poly power 1 (x): xx +DQ1U = 'TERM.3.COEFF: -0.00517474938746320' / Poly coefficient: xy +DQ1U = 'TERM.3.VAR.1: 1' / Poly power 1 (x): xy +DQ1U = 'TERM.3.VAR.2: 1' / Poly power 2 (y): xy +DQ1U = 'TERM.4.COEFF: -0.00023850435805678' / Poly coefficient: yy +DQ1U = 'TERM.4.VAR.2: 2' / Poly power 2 (y): yy +DQ1U = 'TERM.5.COEFF: 0.00629760478963159' / Poly coefficient: xxx +DQ1U = 'TERM.5.VAR.1: 3' / Poly power 1 (x): xxx +DQ1U = 'TERM.6.COEFF: 0.00397207946734115' / Poly coefficient: xxy +DQ1U = 'TERM.6.VAR.1: 2' / Poly power 1 (x): xxy +DQ1U = 'TERM.6.VAR.2: 1' / Poly power 2 (y): xxy +DQ1U = 'TERM.7.COEFF: -0.00067729620645185' / Poly coefficient: xyy +DQ1U = 'TERM.7.VAR.1: 1' / Poly power 1 (x): xyy +DQ1U = 'TERM.7.VAR.2: 2' / Poly power 2 (y): xyy +DQ1U = 'TERM.8.COEFF: 0.00050354679706662' / Poly coefficient: yyy +DQ1U = 'TERM.8.VAR.2: 3' / Poly power 2 (y): yyy +DQ1U = 'TERM.9.COEFF: -0.00097355342974408' / Poly coefficient: xxxx +DQ1U = 'TERM.9.VAR.1: 4' / Poly power 1 (x): xxxx +DQ1U = 'TERM.10.COEFF: -0.00102312736844768' / Poly coefficient: xxxy +DQ1U = 'TERM.10.VAR.1: 3' / Poly power 1 (x): xxxy +DQ1U = 'TERM.10.VAR.2: 1' / Poly power 2 (y): xxxy +DQ1U = 'TERM.11.COEFF: 0.00025362356834782' / Poly coefficient: xxyy +DQ1U = 'TERM.11.VAR.1: 2' / Poly power 1 (x): xxyy +DQ1U = 'TERM.11.VAR.2: 2' / Poly power 2 (y): xxyy +DQ1U = 'TERM.12.COEFF: -0.00020021192475813' / Poly coefficient: xyyy +DQ1U = 'TERM.12.VAR.1: 1' / Poly power 1 (x): xyyy +DQ1U = 'TERM.12.VAR.2: 3' / Poly power 2 (y): xyyy +DQ1U = 'TERM.13.COEFF: -6.2162660705097E-05' / Poly coefficient: yyyy +DQ1U = 'TERM.13.VAR.2: 4' / Poly power 2 (y): yyyy +CQERR1U = 96.50 / Maximum absolute value of distortion function + +CQDIS2U = 'Polynomial' / Q = sequent, Polynomial distortion +DQ2U = 'DOCORR: 0' / Polynomial gives corrected coordinate +DQ2U = 'NAXES: 2' / Two independent variables +DQ2U = 'NAUX: 1' / One auxiliary variable (not used) +DQ2U = 'AUX.1.COEFF.1: 1' / Coefficient of first variable +DQ2U = 'AUX.1.POWER.1: 2' / Power of first variable +DQ2U = 'AUX.1.COEFF.2: 1' / Coefficient of second variable +DQ2U = 'AUX.1.POWER.2: 2' / Power of second variable +DQ2U = 'AUX.1.POWER.0: 0.5' / Power of the sum of the terms +DQ2U = 'NTERMS: 13' / Number of terms in the polynomial +DQ2U = 'TERM.1.COEFF: 1' / Poly coefficient: y +DQ2U = 'TERM.1.VAR.2: 1' / Poly power 1 (y): y +DQ2U = 'TERM.2.COEFF: -0.00074364565692291' / Poly coefficient: yy +DQ2U = 'TERM.2.VAR.2: 2' / Poly power 1 (y): yy +DQ2U = 'TERM.3.COEFF: 0.00018425002539649' / Poly coefficient: xy +DQ2U = 'TERM.3.VAR.1: 1' / Poly power 1 (y): xy +DQ2U = 'TERM.3.VAR.2: 1' / Poly power 2 (x): xy +DQ2U = 'TERM.4.COEFF: 0.02197159197666640' / Poly coefficient: xx +DQ2U = 'TERM.4.VAR.1: 2' / Poly power 2 (x): xx +DQ2U = 'TERM.5.COEFF: -7.5449775263740E-05' / Poly coefficient: yyy +DQ2U = 'TERM.5.VAR.2: 3' / Poly power 1 (y): yyy +DQ2U = 'TERM.6.COEFF: 0.00064935718511019' / Poly coefficient: xyy +DQ2U = 'TERM.6.VAR.1: 1' / Poly power 2 (x): xyy +DQ2U = 'TERM.6.VAR.2: 2' / Poly power 1 (y): xyy +DQ2U = 'TERM.7.COEFF: -0.00081219646536117' / Poly coefficient: xxy +DQ2U = 'TERM.7.VAR.1: 2' / Poly power 2 (x): xxy +DQ2U = 'TERM.7.VAR.2: 1' / Poly power 1 (y): xxy +DQ2U = 'TERM.8.COEFF: -0.01050984336151780' / Poly coefficient: xxx +DQ2U = 'TERM.8.VAR.1: 3' / Poly power 2 (x): xxx +DQ2U = 'TERM.9.COEFF: -2.1755521894303E-05' / Poly coefficient: yyyy +DQ2U = 'TERM.9.VAR.2: 4' / Poly power 1 (y): yyyy +DQ2U = 'TERM.10.COEFF: -7.9010371768005E-05' / Poly coefficient: xyyy +DQ2U = 'TERM.10.VAR.1: 1' / Poly power 2 (x): xyyy +DQ2U = 'TERM.10.VAR.2: 3' / Poly power 1 (y): xyyy +DQ2U = 'TERM.11.COEFF: -0.00015571170306733' / Poly coefficient: xxyy +DQ2U = 'TERM.11.VAR.1: 2' / Poly power 2 (x): xxyy +DQ2U = 'TERM.11.VAR.2: 2' / Poly power 1 (y): xxyy +DQ2U = 'TERM.12.COEFF: 0.00016933561718011' / Poly coefficient: xxxy +DQ2U = 'TERM.12.VAR.1: 3' / Poly power 2 (x): xxxy +DQ2U = 'TERM.12.VAR.2: 1' / Poly power 1 (y): xxxy +DQ2U = 'TERM.13.COEFF: 0.00186540574051853' / Poly coefficient: xxxx +DQ2U = 'TERM.13.VAR.1: 4' / Poly power 2 (x): xxxx +CQERR2U = 95.54 / Maximum absolute value of distortion function + +END diff --git a/deps/wcslib/C/test/TNX.keyrec b/deps/wcslib/C/test/TNX.keyrec new file mode 100644 index 0000000..71cfe6c --- /dev/null +++ b/deps/wcslib/C/test/TNX.keyrec @@ -0,0 +1,65 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing the "TNX" projection. +# +# This header was adapted from the sample provided at +# http://fits.gsfc.nasa.gov/registry/tnx/tnx.txt +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < TNX.keyrec > TNX.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 2 / 2 image axes +NAXIS1 = 400 / Length of image axis 1 +NAXIS2 = 400 / Length of image axis 2 + +CRPIX1 = -160.252723 / Pixel coordinate of reference point +CRPIX2 = -127.798403 / Pixel coordinate of reference point +CD1_1 = -2.7078566E-07 / [deg] CD matrix element +CD2_1 = 7.4507954E-05 / [deg] CD matrix element +CD1_2 = 7.4138771E-05 / [deg] CD matrix element +CD2_2 = -1.7422786E-07 / [deg] CD matrix element +CTYPE1 = 'RA---TNX' / RA in TAN (gnomonic) projection + distortions +CTYPE2 = 'DEC--TNX' / Dec in TAN (gnomonic) projection + distortions +CRVAL1 = 266.703960 / [deg] Right ascension at the reference point +CRVAL2 = -30.160528 / [deg] Declination at the reference point + +WAT0_001= 'system=image' / Distortion coefficients +WAT1_001= 'wtype=tnx axtype=ra lngcor = "1. 4. 4. 2. 0.001557694712335736 0.305' +WAT1_002= '7102603054315 0.005633525451388214 0.1588647710905971 -2.72411800297' +WAT1_003= '7662E-4 -5.016761279169355E-5 -6.340301962177909E-4 -1.0797192943864' +WAT1_004= '45E-4 1.534942429540643E-5 -2.213747676057557E-4 2.327260049467782E-' +WAT1_005= '5 -4.002114665208721E-5 -4.983803710224544E-5 8.510395910450919E-6 "' +WAT2_001= 'wtype=tnx axtype=dec latcor = "1. 4. 4. 2. 0.001557694712335736 0.30' +WAT2_002= '57102603054315 0.005633525451388214 0.1588647710905971 -5.7496618045' +WAT2_003= '44368E-5 2.798727771824332E-5 -8.197621587790417E-5 -4.7555453405034' +WAT2_004= '02E-6 -5.527174083684728E-5 -3.848408247593560E-4 -1.042206172116658' +WAT2_005= 'E-4 -9.938238339522108E-5 1.44544039115055E-5 -1.55190291513441E-5 "' + +END diff --git a/deps/wcslib/C/test/TPV3.keyrec b/deps/wcslib/C/test/TPV3.keyrec new file mode 100644 index 0000000..227e119 --- /dev/null +++ b/deps/wcslib/C/test/TPV3.keyrec @@ -0,0 +1,76 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: TPV3.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing the handling of the "TPV" projection +# by wcsset() and the disprm routines. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < TPV3.keyrec > TPV3.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 2 / 2 image axes +NAXIS1 = 6576 / Length of image axis 1 +NAXIS2 = 4384 / Length of image axis 2 + +CRPIX1 = 3457.58912502 / Pixel coordinate of reference point +CRPIX2 = 3919.07710596 / Pixel coordinate of reference point +CD1_1 = -0.000587002241853 / [deg] CD matrix element +CD1_2 = 0.00360787927542 / [deg] CD matrix element +CD2_1 = -0.00362163438798 / [deg] CD matrix element +CD2_2 = -0.000580351756267 / [deg] CD matrix element +CUNIT1 = 'deg' / Degree units are required +CUNIT2 = 'deg' / Degree units are required +CTYPE1 = 'RA---TPV' / TAN (gnomonic) projection + distortions +CTYPE2 = 'DEC--TPV' / TAN (gnomonic) projection + distortions +CRVAL1 = 10.4952305915 / [deg] Right ascension at the reference point +CRVAL2 = 56.0880413226 / [deg] Declination at the reference point + +PV1_1 = 0.9999999999999999 / TPV distortion coefficient +PV1_2 = -2.7755575615628E-17 / TPV distortion coefficient +PV1_4 = -0.00150750505215681 / TPV distortion coefficient +PV1_5 = 0.000427298584808077 / TPV distortion coefficient +PV1_6 = 8.76972893890681E-05 / TPV distortion coefficient +PV1_7 = 2.29966520990431E-05 / TPV distortion coefficient +PV1_8 = -3.9316829011117E-06 / TPV distortion coefficient +PV1_9 = 1.40867509149248E-05 / TPV distortion coefficient +PV1_10 = 3.33667733204711E-07 / TPV distortion coefficient +PV2_1 = 0.9999999999999999 / TPV distortion coefficient +PV2_4 = 0.000391307204440982 / TPV distortion coefficient +PV2_5 = -0.00168111794704401 / TPV distortion coefficient +PV2_6 = -1.8248158541118E-05 / TPV distortion coefficient +PV2_7 = 1.62848844178357E-05 / TPV distortion coefficient +PV2_8 = -3.5921620201472E-06 / TPV distortion coefficient +PV2_9 = 2.05773235566454E-05 / TPV distortion coefficient +PV2_10 = 1.87652561761008E-06 / TPV distortion coefficient + +LONPOLE = 180.0 / [deg] Native longitude of the NCP +LATPOLE = 0.0 / [deg] Native latitude of the NCP +EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates + +END diff --git a/deps/wcslib/C/test/TPV5.keyrec b/deps/wcslib/C/test/TPV5.keyrec new file mode 100644 index 0000000..7ae5f38 --- /dev/null +++ b/deps/wcslib/C/test/TPV5.keyrec @@ -0,0 +1,98 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: TPV5.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing the handling of the "TPV" projection +# by wcsset() and the disprm routines. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < TPV5.keyrec > TPV5.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 2 / 2 image axes +NAXIS1 = 4096 / Length of image axis 1 +NAXIS2 = 4096 / Length of image axis 2 + +CRPIX1 = 1761.47416875 / Pixel coordinate of reference point +CRPIX2 = 2118.72183151 / Pixel coordinate of reference point +CD1_1 = -0.00283896009841 / [deg] CD matrix element +CD1_2 = -0.0095653881236 / [deg] CD matrix element +CD2_1 = 0.00955414472775 / [deg] CD matrix element +CD2_2 = -0.00281415304361 / [deg] CD matrix element +CUNIT1 = 'deg' / Degree units are required +CUNIT2 = 'deg' / Degree units are required +CTYPE1 = 'RA---TPV' / TAN (gnomonic) projection + distortions +CTYPE2 = 'DEC--TPV' / TAN (gnomonic) projection + distortions +CRVAL1 = 113.761770869 / [deg] Right ascension at the reference point +CRVAL2 = 87.581766681 / [deg] Declination at the reference point + +PV1_1 = 1.0 / TPV distortion coefficient +PV1_2 = 5.55111512312578E-17 / TPV distortion coefficient +PV1_4 = -2.7424804567206E-05 / TPV distortion coefficient +PV1_5 = 0.000790044423408943 / TPV distortion coefficient +PV1_6 = -6.7702947479290E-05 / TPV distortion coefficient +PV1_7 = 3.70858612004436E-05 / TPV distortion coefficient +PV1_8 = 3.09214887882905E-05 / TPV distortion coefficient +PV1_9 = 2.79163997287238E-05 / TPV distortion coefficient +PV1_10 = 7.13153931390477E-06 / TPV distortion coefficient +PV1_12 = 4.06164135849070E-07 / TPV distortion coefficient +PV1_13 = -3.3709743373233E-07 / TPV distortion coefficient +PV1_14 = 1.07485184690584E-06 / TPV distortion coefficient +PV1_15 = 4.22494107427413E-08 / TPV distortion coefficient +PV1_16 = 1.50534608708045E-07 / TPV distortion coefficient +PV1_17 = 2.02319801720636E-10 / TPV distortion coefficient +PV1_18 = -1.1389440637505E-07 / TPV distortion coefficient +PV1_19 = 6.96659712463485E-08 / TPV distortion coefficient +PV1_20 = -9.8664513792757E-08 / TPV distortion coefficient +PV1_21 = 1.41660199031828E-08 / TPV distortion coefficient +PV1_22 = -1.1191659191519E-08 / TPV distortion coefficient +PV2_1 = 1.0 / TPV distortion coefficient +PV2_4 = 0.000520429625694769 / TPV distortion coefficient +PV2_5 = 1.70073086962533E-05 / TPV distortion coefficient +PV2_6 = -0.00013083749436793 / TPV distortion coefficient +PV2_7 = 4.93125956972113E-05 / TPV distortion coefficient +PV2_8 = 1.08675659272460E-05 / TPV distortion coefficient +PV2_9 = 4.01491290764222E-05 / TPV distortion coefficient +PV2_10 = 7.60116090687535E-06 / TPV distortion coefficient +PV2_12 = 6.46213456124236E-07 / TPV distortion coefficient +PV2_13 = 3.12965114936086E-07 / TPV distortion coefficient +PV2_14 = 4.12720356211971E-07 / TPV distortion coefficient +PV2_15 = 4.45167381255974E-07 / TPV distortion coefficient +PV2_16 = -9.9738109842997E-09 / TPV distortion coefficient +PV2_17 = -3.5789354808750E-08 / TPV distortion coefficient +PV2_18 = -2.3750471646988E-08 / TPV distortion coefficient +PV2_19 = -3.5354006023002E-08 / TPV distortion coefficient +PV2_20 = -6.2508850597208E-08 / TPV distortion coefficient +PV2_21 = 7.94831478652252E-09 / TPV distortion coefficient +PV2_22 = -1.7323858285092E-08 / TPV distortion coefficient + +LONPOLE = 180.0 / [deg] Native longitude of the NCP +LATPOLE = 0.0 / [deg] Native latitude of the NCP +EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates + +END diff --git a/deps/wcslib/C/test/TPV7.keyrec b/deps/wcslib/C/test/TPV7.keyrec new file mode 100644 index 0000000..fd71516 --- /dev/null +++ b/deps/wcslib/C/test/TPV7.keyrec @@ -0,0 +1,245 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: TPV7.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing the handling of the "TPV" projection +# by wcsset() and the disprm routines. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < TPV7.keyrec > TPV7.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 2 / 2 image axes +NAXIS1 = 8192 / Length of image axis 1 +NAXIS2 = 8192 / Length of image axis 2 + +CRPIX1 = 4096.0 / Pixel coordinate of reference point +CRPIX2 = 4096.0 / Pixel coordinate of reference point +CD1_1 = -0.01 / [deg] x-scale +CD2_2 = 0.01 / [deg] y-scale +CUNIT1 = 'deg' / Degree units are required +CUNIT2 = 'deg' / Degree units are required +CTYPE1 = 'RA---TPV' / TAN (gnomonic) projection + distortions +CTYPE2 = 'DEC--TPV' / TAN (gnomonic) projection + distortions +CRVAL1 = 150.0 / [deg] Right ascension at the reference point +CRVAL2 = -30.0 / [deg] Declination at the reference point +LONPOLE = 180.0 / [deg] Native longitude of the NCP +EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates + +COMMENT ----------------------------------------------------------------------- +COMMENT TPV coefficients for DEIMOS CCD distortion. +COMMENT +COMMENT TPV's fixed axis mapping is tied to the celestial axes. In the +COMMENT keycomments, x and y refer to the RA and DEC axes respectively, which +COMMENT are axes 1 and 2 here. +COMMENT ----------------------------------------------------------------------- +PV1_0 = 3.0939038E-01 / TPV coefficient: 1 +PV1_1 = 9.8842111E-01 / TPV coefficient: x +PV1_3 = -2.1923537E-03 / TPV coefficient: r +PV1_4 = 2.8380911E-06 / TPV coefficient: xx +PV1_6 = 3.6847677E-06 / TPV coefficient: yy +PV1_7 = 9.6423020E-10 / TPV coefficient: xxx +PV1_9 = 6.0581305E-10 / TPV coefficient: xyy +PV1_11 = -4.0302249E-09 / TPV coefficient: rrr +PV1_12 = 1.7927040E-12 / TPV coefficient: xxxx +PV1_14 = 3.5994619E-12 / TPV coefficient: xxyy +PV1_16 = 1.7547166E-12 / TPV coefficient: yyyy +PV1_17 = -2.0309873E-17 / TPV coefficient: xxxxx +PV1_19 = -2.2638628E-17 / TPV coefficient: xxxyy +PV1_21 = 3.6912827E-18 / TPV coefficient: xyyyy +PV1_23 = -3.7770972E-16 / TPV coefficient: rrrrr +PV1_24 = 4.0080945E-20 / TPV coefficient: xxxxxx +PV1_26 = 1.1799892E-19 / TPV coefficient: xxxxyy +PV1_28 = 1.1810387E-19 / TPV coefficient: xxyyyy +PV1_30 = 4.0113938E-20 / TPV coefficient: yyyyyy +PV1_31 = 3.0321154E-25 / TPV coefficient: xxxxxxx +PV1_33 = 6.3742904E-25 / TPV coefficient: xxxxxyy +PV1_35 = 2.0537657E-25 / TPV coefficient: xxxyyyy +PV1_37 = -1.9848702E-25 / TPV coefficient: xyyyyyy +PV1_39 = -1.6392798E-24 / TPV coefficient: rrrrrrr + +PV2_1 = 9.9348652E-01 / TPV coefficient: y +PV2_5 = -1.8103805E-06 / TPV coefficient: yx +PV2_7 = 4.7932276E-11 / TPV coefficient: yyy +PV2_9 = 6.1848457E-10 / TPV coefficient: yxx +PV2_13 = 1.4059187E-13 / TPV coefficient: yyyx +PV2_15 = 8.7740187E-14 / TPV coefficient: yxxx +PV2_17 = 2.8940294E-17 / TPV coefficient: yyyyy +PV2_19 = 1.5913817E-18 / TPV coefficient: yyyxx +PV2_21 = -1.0279657E-17 / TPV coefficient: yxxxx +PV2_25 = -2.8008330E-21 / TPV coefficient: yyyyyx +PV2_27 = -3.2402087E-21 / TPV coefficient: yyyxxx +PV2_29 = -7.9355520E-22 / TPV coefficient: yxxxxx +PV2_31 = -6.7738093E-25 / TPV coefficient: yyyyyyy +PV2_33 = -3.0173086E-25 / TPV coefficient: yyyyyxx +PV2_35 = 2.8026002E-25 / TPV coefficient: yyyxxxx +PV2_37 = 1.4550459E-25 / TPV coefficient: yxxxxxx + +COMMENT ----------------------------------------------------------------------- +COMMENT The above TPV distortion translated to DQia. +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. +COMMENT ----------------------------------------------------------------------- + +CRPIX1A = 4096.0 / Pixel coordinate of reference point +CRPIX2A = 4096.0 / Pixel coordinate of reference point +CD1_1A = -0.01 / [deg] x-scale +CD2_2A = 0.01 / [deg] y-scale +CUNIT1A = 'deg' / Degree units are required +CUNIT2A = 'deg' / Degree units are required +CTYPE1A = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2A = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1A = 150.0 / [deg] Right ascension at the reference point +CRVAL2A = -30.0 / [deg] Declination at the reference point +LONPOLEA= 180.0 / [deg] Native longitude of the NCP +EQUINOXA= 2000.0 / [yr] Equinox of equatorial coordinates + +CQDIS1A = 'TPV' +DQ1A = 'NAXES: 2' +DQ1A = 'AXIS.1: 1' +DQ1A = 'AXIS.2: 2' +DQ1A = 'TPV.0: 3.0939038E-01' / TPV coefficient: 1 +DQ1A = 'TPV.1: 9.8842111E-01' / TPV coefficient: x +DQ1A = 'TPV.3: -2.1923537E-03' / TPV coefficient: r +DQ1A = 'TPV.4: 2.8380911E-06' / TPV coefficient: xx +DQ1A = 'TPV.6: 3.6847677E-06' / TPV coefficient: yy +DQ1A = 'TPV.7: 9.6423020E-10' / TPV coefficient: xxx +DQ1A = 'TPV.9: 6.0581305E-10' / TPV coefficient: xyy +DQ1A = 'TPV.11: -4.0302249E-09' / TPV coefficient: rrr +DQ1A = 'TPV.12: 1.7927040E-12' / TPV coefficient: xxxx +DQ1A = 'TPV.14: 3.5994619E-12' / TPV coefficient: xxyy +DQ1A = 'TPV.16: 1.7547166E-12' / TPV coefficient: yyyy +DQ1A = 'TPV.17: -2.0309873E-17' / TPV coefficient: xxxxx +DQ1A = 'TPV.19: -2.2638628E-17' / TPV coefficient: xxxyy +DQ1A = 'TPV.21: 3.6912827E-18' / TPV coefficient: xyyyy +DQ1A = 'TPV.23: -3.7770972E-16' / TPV coefficient: rrrrr +DQ1A = 'TPV.24: 4.0080945E-20' / TPV coefficient: xxxxxx +DQ1A = 'TPV.26: 1.1799892E-19' / TPV coefficient: xxxxyy +DQ1A = 'TPV.28: 1.1810387E-19' / TPV coefficient: xxyyyy +DQ1A = 'TPV.30: 4.0113938E-20' / TPV coefficient: yyyyyy +DQ1A = 'TPV.31: 3.0321154E-25' / TPV coefficient: xxxxxxx +DQ1A = 'TPV.33: 6.3742904E-25' / TPV coefficient: xxxxxyy +DQ1A = 'TPV.35: 2.0537657E-25' / TPV coefficient: xxxyyyy +DQ1A = 'TPV.37: -1.9848702E-25' / TPV coefficient: xyyyyyy +DQ1A = 'TPV.39: -1.6392798E-24' / TPV coefficient: rrrrrrr + +CQDIS2A = 'TPV' +DQ2A = 'NAXES: 2' +DQ2A = 'AXIS.1: 2' +DQ2A = 'AXIS.2: 1' +DQ2A = 'TPV.1: 9.9348652E-01' / TPV coefficient: y +DQ2A = 'TPV.5: -1.8103805E-06' / TPV coefficient: yx +DQ2A = 'TPV.7: 4.7932276E-11' / TPV coefficient: yyy +DQ2A = 'TPV.9: 6.1848457E-10' / TPV coefficient: yxx +DQ2A = 'TPV.13: 1.4059187E-13' / TPV coefficient: yyyx +DQ2A = 'TPV.15: 8.7740187E-14' / TPV coefficient: yxxx +DQ2A = 'TPV.17: 2.8940294E-17' / TPV coefficient: yyyyy +DQ2A = 'TPV.19: 1.5913817E-18' / TPV coefficient: yyyxx +DQ2A = 'TPV.21: -1.0279657E-17' / TPV coefficient: yxxxx +DQ2A = 'TPV.25: -2.8008330E-21' / TPV coefficient: yyyyyx +DQ2A = 'TPV.27: -3.2402087E-21' / TPV coefficient: yyyxxx +DQ2A = 'TPV.29: -7.9355520E-22' / TPV coefficient: yxxxxx +DQ2A = 'TPV.31: -6.7738093E-25' / TPV coefficient: yyyyyyy +DQ2A = 'TPV.33: -3.0173086E-25' / TPV coefficient: yyyyyxx +DQ2A = 'TPV.35: 2.8026002E-25' / TPV coefficient: yyyxxxx +DQ2A = 'TPV.37: 1.4550459E-25' / TPV coefficient: yxxxxxx + +COMMENT ----------------------------------------------------------------------- +COMMENT The above TPV distortion translated to TPD. +COMMENT +COMMENT In the keycomments, x and y refer to axes 1 and 2, which are the RA +COMMENT and DEC axes. +COMMENT ----------------------------------------------------------------------- + +CRPIX1B = 4096.0 / Pixel coordinate of reference point +CRPIX2B = 4096.0 / Pixel coordinate of reference point +CD1_1B = -0.01 / [deg] x-scale +CD2_2B = 0.01 / [deg] y-scale +CUNIT1B = 'deg' / Degree units are required +CUNIT2B = 'deg' / Degree units are required +CTYPE1B = 'RA---TAN' / TAN (gnomonic) projection +CTYPE2B = 'DEC--TAN' / TAN (gnomonic) projection +CRVAL1B = 150.0 / [deg] Right ascension at the reference point +CRVAL2B = -30.0 / [deg] Declination at the reference point +LONPOLEB= 180.0 / [deg] Native longitude of the NCP +EQUINOXB= 2000.0 / [yr] Equinox of equatorial coordinates + +CQDIS1B = 'TPD' +DQ1B = 'NAXES: 2' +DQ1B = 'AXIS.1: 1' +DQ1B = 'AXIS.2: 2' +DQ1B = 'DOCORR: 0' +DQ1B = 'TPD.FWD.0: 3.0939038E-01' / TPD coefficient: 1 +DQ1B = 'TPD.FWD.1: 9.8842111E-01' / TPD coefficient: x +DQ1B = 'TPD.FWD.3: -2.1923537E-03' / TPD coefficient: r +DQ1B = 'TPD.FWD.4: 2.8380911E-06' / TPD coefficient: xx +DQ1B = 'TPD.FWD.6: 3.6847677E-06' / TPD coefficient: yy +DQ1B = 'TPD.FWD.7: 9.6423020E-10' / TPD coefficient: xxx +DQ1B = 'TPD.FWD.9: 6.0581305E-10' / TPD coefficient: xyy +DQ1B = 'TPD.FWD.11: -4.0302249E-09' / TPD coefficient: rrr +DQ1B = 'TPD.FWD.12: 1.7927040E-12' / TPD coefficient: xxxx +DQ1B = 'TPD.FWD.14: 3.5994619E-12' / TPD coefficient: xxyy +DQ1B = 'TPD.FWD.16: 1.7547166E-12' / TPD coefficient: yyyy +DQ1B = 'TPD.FWD.17: -2.0309873E-17' / TPD coefficient: xxxxx +DQ1B = 'TPD.FWD.19: -2.2638628E-17' / TPD coefficient: xxxyy +DQ1B = 'TPD.FWD.21: 3.6912827E-18' / TPD coefficient: xyyyy +DQ1B = 'TPD.FWD.23: -3.7770972E-16' / TPD coefficient: rrrrr +DQ1B = 'TPD.FWD.24: 4.0080945E-20' / TPD coefficient: xxxxxx +DQ1B = 'TPD.FWD.26: 1.1799892E-19' / TPD coefficient: xxxxyy +DQ1B = 'TPD.FWD.28: 1.1810387E-19' / TPD coefficient: xxyyyy +DQ1B = 'TPD.FWD.30: 4.0113938E-20' / TPD coefficient: yyyyyy +DQ1B = 'TPD.FWD.31: 3.0321154E-25' / TPD coefficient: xxxxxxx +DQ1B = 'TPD.FWD.33: 6.3742904E-25' / TPD coefficient: xxxxxyy +DQ1B = 'TPD.FWD.35: 2.0537657E-25' / TPD coefficient: xxxyyyy +DQ1B = 'TPD.FWD.37: -1.9848702E-25' / TPD coefficient: xyyyyyy +DQ1B = 'TPD.FWD.39: -1.6392798E-24' / TPD coefficient: rrrrrrr + +CQDIS2B = 'TPD' +DQ2B = 'NAXES: 2' +DQ2B = 'AXIS.1: 2' +DQ2B = 'AXIS.2: 1' +DQ2B = 'DOCORR: 0' +DQ2B = 'TPD.FWD.1: 9.9348652E-01' / TPD coefficient: y +DQ2B = 'TPD.FWD.5: -1.8103805E-06' / TPD coefficient: yx +DQ2B = 'TPD.FWD.7: 4.7932276E-11' / TPD coefficient: yyy +DQ2B = 'TPD.FWD.9: 6.1848457E-10' / TPD coefficient: yxx +DQ2B = 'TPD.FWD.13: 1.4059187E-13' / TPD coefficient: yyyx +DQ2B = 'TPD.FWD.15: 8.7740187E-14' / TPD coefficient: yxxx +DQ2B = 'TPD.FWD.17: 2.8940294E-17' / TPD coefficient: yyyyy +DQ2B = 'TPD.FWD.19: 1.5913817E-18' / TPD coefficient: yyyxx +DQ2B = 'TPD.FWD.21: -1.0279657E-17' / TPD coefficient: yxxxx +DQ2B = 'TPD.FWD.25: -2.8008330E-21' / TPD coefficient: yyyyyx +DQ2B = 'TPD.FWD.27: -3.2402087E-21' / TPD coefficient: yyyxxx +DQ2B = 'TPD.FWD.29: -7.9355520E-22' / TPD coefficient: yxxxxx +DQ2B = 'TPD.FWD.31: -6.7738093E-25' / TPD coefficient: yyyyyyy +DQ2B = 'TPD.FWD.33: -3.0173086E-25' / TPD coefficient: yyyyyxx +DQ2B = 'TPD.FWD.35: 2.8026002E-25' / TPD coefficient: yyyxxxx +DQ2B = 'TPD.FWD.37: 1.4550459E-25' / TPD coefficient: yxxxxxx + +END diff --git a/deps/wcslib/C/test/ZPX.keyrec b/deps/wcslib/C/test/ZPX.keyrec new file mode 100644 index 0000000..2d0b262 --- /dev/null +++ b/deps/wcslib/C/test/ZPX.keyrec @@ -0,0 +1,66 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: ZPX.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing the "ZPX" projection. +# +# This header was adapted from the sample provided at +# http://fits.gsfc.nasa.gov/registry/zpxwcs/zpx-hdr.txt +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < ZPX.keyrec > ZPX.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 2 / 2 image axes +NAXIS1 = 512 / Length of image axis 1 +NAXIS2 = 512 / Length of image axis 2 + +CRPIX1 = 4167.56175625891 / Pixel coordinate of reference point +CRPIX2 = 4120.25894749731 / Pixel coordinate of reference point +CD1_1 = -5.2588308681025E-8 / [deg] CD matrix element +CD2_1 = -7.2772379161132E-5 / [deg] CD matrix element +CD1_2 = -7.2753930850119E-5 / [deg] CD matrix element +CD2_2 = -1.8637632244742E-8 / [deg] CD matrix element +CTYPE1 = 'RA---ZPX' / RA in ZPN projection with distortions +CTYPE2 = 'DEC--ZPX' / Dec in ZPN projection with distortions +CRVAL1 = 320.687374999995 / [deg] Right ascension at the reference point +CRVAL2 = 36.908555555556 / [deg] Declination at the reference point + +WAT0_001= 'system=image' / ZPN parameters and distortion coefficients +WAT1_001= 'wtype=zpx axtype=ra projp0=0. projp1=1. projp2=0. projp3=337.74 proj' +WAT1_002= 'p4=0. projp5=632052. lngcor = "3. 3. 3. 2. 0.001876397956622823 0.29' +WAT1_003= '99113930557312 0.1542460039112511 0.3032873851581314 1.9247409545894' +WAT1_004= '95E-5 -1.348328290485618E-5 1.414186703253352E-4 -1.792784764381400E' +WAT1_005= '-4 -1.276226238774833E-4 4.339217671825231E-4 "' +WAT2_001= 'wtype=zpx axtype=dec projp0=0. projp1=1. projp2=0. projp3=337.74 pro' +WAT2_002= 'jp4=0. projp5=632052. latcor = "3. 3. 3. 2. 0.001876397956622823 0.2' +WAT2_003= '999113930557312 0.1542460039112511 0.3032873851581314 9.963957331149' +WAT2_004= '402E-5 -1.378185066830135E-4 1.559892401479664E-4 -8.280442729203771' +WAT2_005= 'E-4 3.966701903249366E-4 0.001678960379199465 "' + +END diff --git a/deps/wcslib/C/test/bth.keyrec b/deps/wcslib/C/test/bth.keyrec new file mode 100644 index 0000000..bb81cba --- /dev/null +++ b/deps/wcslib/C/test/bth.keyrec @@ -0,0 +1,495 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: bth.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing by tbth1. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < bth.keyrec > bth.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +XTENSION= 'BINTABLE' / Binary table extension +BITPIX = 8 / 8-bit bytes +NAXIS = 2 / 2-dimensional binary table +NAXIS1 = 3330 / Width of table in bytes +NAXIS2 = 68 / Number of rows in table +PCOUNT = 0 / Size of special data area +GCOUNT = 1 / One data group (required keyword) +TFIELDS = 33 / Number of fields in each row + +COMMENT wcsbth() ignores all of the above keywords except for TFIELDS which it +COMMENT only considers to be advisory. In fact, TFIELDS here is incorrect +COMMENT (deliberately) since WCS keywords are present below for column numbers +COMMENT greater than 33. + +COMMENT WARNING WARNING WARNING +COMMENT ------------------------- +COMMENT This header has been developed for test purposes. It contains a mix +COMMENT of WCS keywords whose presence within a single FITS header extends or +COMMENT violates the FITS WCS standard. +COMMENT +COMMENT The main extension to the standard is the presence of image header +COMMENT keywords in what is meant to be a binary table extension header. The +COMMENT usage notes for wcsbth() in wcshdr.h explains how it interprets these +COMMENT keywords. +COMMENT ----------------------------------------------------------------------- + +COMMENT ======================================================================= +COMMENT The primary image header keywords define a coordinate representation +COMMENT using AIPS-convention WCS keywords. As it happens, no binary table +COMMENT image array inherits these keywords and consequently they define an +COMMENT "unattached" representation, one that is not associated with any +COMMENT particular table column(s). Human intervention is required to form +COMMENT such an association based on a priori knowledge. +COMMENT +COMMENT An old FITS WCS interpreter that only understood the AIPS convention +COMMENT would most likely be confused by this header because NAXIS = 2 (above) +COMMENT is fixed for a binary table. wcsbth() ignores NAXIS and deduces that +COMMENT there are four coordinate axes by looking at the highest axis number +COMMENT encoded in the WCS keywords themselves. +COMMENT +COMMENT An old FITS WCS interpreter also would not recognize the new WCSNAMEa +COMMENT keyword, though its presence should not cause it any harm. It is set +COMMENT here solely for identification purposes. +COMMENT +COMMENT This representation contains only standard image header keywords, but +COMMENT their use in a binary table header is non-standard. +COMMENT ----------------------------------------------------------------------- + +COMMENT The following keyrecord is not part of the AIPS convention. +WCSNAME = 'AIPS convention: TAN projection' / Name of this coordinate system + +CRPIX1 = 513.0 / Pixel coordinate of reference point +CRPIX2 = 513.0 / Pixel coordinate of reference point +CRPIX3 = 1025.0 / Pixel coordinate of reference point +CRPIX4 = 1.0 / Pixel coordinate of reference point + +CDELT1 = -0.10 / x-scale +CDELT2 = 0.10 / y-scale +CROTA2 = 15.0 / Bulk image rotation +CTYPE1 = 'RA---TAN' / Right ascension in a gnomonic projection +CRVAL1 = 150.0 / [deg] Right ascension at the reference point +CTYPE2 = 'DEC--TAN' / Declination in a gnomonic projection +CRVAL2 = -30.0 / [deg] Declination at the reference point +EPOCH = 2000.0 / Equinox of equatorial coordinates + +CDELT3 = 62.5e3 / Frequency scale +CTYPE3 = 'FREQ ' / Frequency axis +CRVAL3 = 1.3945e9 / [Hz] Reference frequency +VELREF = 258 / Barycentric radio velocity +ALTRPIX = 0.0 / Alternate reference pixel (not handled) +ALTRVAL = 0.0 / Alternate reference value (not handled) +RESTFREQ= 1.42040575e9 / HI rest frequency + +CDELT4 = 1.0 / Stokes increment +CTYPE4 = 'STOKES ' / Stokes convention axis (I, Q, U, V) +CRVAL4 = 1.0 / Stokes I + +COMMENT ======================================================================= +COMMENT This coordinate representation utilizing a PCi_ja matrix expresses the +COMMENT above AIPS convention header using standard WCS keywords. This set of +COMMENT image header keywords with alternate representation 'I' is defined for +COMMENT the purpose of inheritance (below) and so does not result in an +COMMENT unattached representation as did the primary image header +COMMENT representation above. +COMMENT +COMMENT This representation contains only standard image header keywords but +COMMENT their use in a binary table header is non-standard. +COMMENT ----------------------------------------------------------------------- + +WCSAXESI= 4 / Number of coordinate axes + +CRPIX1I = 513 / Pixel coordinate of reference point +CRPIX2I = 513 / Pixel coordinate of reference point +CRPIX3I = 1025 / Pixel coordinate of reference point +CRPIX4I = 1 / Pixel coordinate of reference point + +PC1_1I = 0.965925826289 / Coordinate transformation matrix element +PC1_2I = 0.258819045103 / Coordinate transformation matrix element +PC2_1I = -0.258819045103 / Coordinate transformation matrix element +PC2_2I = 0.965925826289 / Coordinate transformation matrix element + +CDELT1I = -0.1 / [deg] Coordinate increment at reference point +CDELT2I = 0.1 / [deg] Coordinate increment at reference point +CDELT3I = 62500 / [Hz] Coordinate increment at reference point +CDELT4I = 1 / Coordinate increment at reference point + +CUNIT1I = 'deg' / Units of coordinate increment and value +CUNIT2I = 'deg' / Units of coordinate increment and value +CUNIT3I = 'Hz' / Units of coordinate increment and value + +CTYPE1I = 'RA---TAN' / Right ascension, gnomonic projection +CTYPE2I = 'DEC--TAN' / Declination, gnomonic projection +CTYPE3I = 'FREQ' / Frequency (linear) +CTYPE4I = 'STOKES' / Coordinate type code + +CRVAL1I = 150 / [deg] Coordinate value at reference point +CRVAL2I = -30 / [deg] Coordinate value at reference point +CRVAL3I = 1394500000 / [Hz] Coordinate value at reference point +CRVAL4I = 1 / Stokes I + +LONPOLEI= 180 / [deg] Native longitude of celestial pole +LATPOLEI= -30 / [deg] Native latitude of celestial pole +RESTFRQI= 1420405750 / [Hz] Line rest frequency +RESTWAVI= 0 / [Hz] Line rest wavelength + +WCSNAMEI= 'AIPS convention: TAN projection' / Coordinate system title +EQUINOXI= 2000 / [yr] Equinox of equatorial coordinates +SPECSYSI= 'BARYCENT' / Reference frame of spectral coordinates + +COMMENT ======================================================================= +COMMENT Binary table column 33 contains an image array, most of whose WCS +COMMENT keywords would be inherited from the preceding image header keywords +COMMENT with a = "I" provided that wcsbth() is invoked with an option that +COMMENT allows it (i.e. by setting the WCSHDR_ALLIMG flag in its 'relax' +COMMENT argument). +COMMENT +COMMENT Without full inheritance enabled, the presence of a single binary +COMMENT table image array keyword, WCSN33I, would not be sufficient to cause +COMMENT wcsbth() to create a wcsprm struct for this representation. However, +COMMENT with inheritance enabled, WCSN33I is sufficient to trigger this +COMMENT mechanism, in which case it overrides WCSNAMEI. +COMMENT +COMMENT Setting WCSHDR_AUXIMG alone only allows inheritance of the auxiliary +COMMENT image header keywords. In this case it would not be sufficient to +COMMENT cause wcsbth() to create a wcsprm struct for this representation +COMMENT because there are no WCS keywords, either direct or inherited, that +COMMENT allow the dimensionality of the coordinate system to be determined. +COMMENT +COMMENT The keyword is standard but such inheritance is non-standard. +COMMENT ----------------------------------------------------------------------- +WCSN33I = 'All WCS keywords inherited except for this one' / WCS title + +COMMENT ======================================================================= +COMMENT Binary table column 44 is analogous to column 33 except with extra +COMMENT binary table image array keywords that may override the image-header +COMMENT equivalent if inheritance is enabled. +COMMENT +COMMENT wcsbth() would always create at least a 2D coordinate representation +COMMENT for column 44, regardless of what other keywords were inherited. If +COMMENT WCSHDR_ALLIMG was set, then a 4D representation would be constructed +COMMENT from inherited keywords. WCSHDR_AUXIMG would not be sufficient for +COMMENT this; however it would cause LONPOLEI and LATPOLEI to be inherited +COMMENT (and four others) and these would affect the interpretation of the +COMMENT coordinate system. +COMMENT +COMMENT The keywords are standard but such inheritance is non-standard. +COMMENT ----------------------------------------------------------------------- +WCSN44I = 'Most WCS keywords inherited' / WCS title +1CTY44I = 'RA---SIN' / Right ascension, orthographic projection +2CTY44I = 'DEC--SIN' / Declination, orthographic projection + +COMMENT ======================================================================= +COMMENT Binary table keywords for the image array in column 77 with alternate +COMMENT representation 'B'. +COMMENT +COMMENT This coordinate representation utilizing a PC (ijPCna) matrix +COMMENT expresses the above gnomonic (TAN) projection as a slant zenithal +COMMENT perspective projection (SZP) in order to test the reading of a number +COMMENT of PVi_ma keywords. It also includes a linear time axis. +COMMENT +COMMENT This representation contains only standard keywords and usage. In +COMMENT particular, it is is self-contained, i.e. no inheritance. +COMMENT ----------------------------------------------------------------------- +WCAX77B = 4 / Number of coordinate axes + +1CRP77B = 513 / Pixel coordinate of reference point +2CRP77B = 513 / Pixel coordinate of reference point +3CRP77B = 1025 / Pixel coordinate of reference point +4CRP77B = 1 / Pixel coordinate of reference point + +11PC77B = 0.866025404 / Coordinate transformation matrix element +12PC77B = 0.5 / Coordinate transformation matrix element +21PC77B = -0.5 / Coordinate transformation matrix element +22PC77B = 0.866025404 / Coordinate transformation matrix element + +1CDE77B = -0.1 / [deg] Coordinate increment at reference point +2CDE77B = 0.1 / [deg] Coordinate increment at reference point +3CDE77B = -9.635265432e-06 / [m] Coordinate increment at reference point +4CDE77B = 1 / [s] Coordinate increment at reference point + +1CUN77B = 'deg' / Units of coordinate increment and value +2CUN77B = 'deg' / Units of coordinate increment and value +3CUN77B = 'm' / Units of coordinate increment and value +4CUN77B = 's' / Units of coordinate increment and value + +1CTY77B = 'RA---SZP' / Right ascension, slant zenithal perspective pro +2CTY77B = 'DEC--SZP' / Declination, slant zenithal perspective project +3CTY77B = 'WAVE-F2W' / Vacuum wavelength (linear in frequency) +4CTY77B = 'TIME' / Coordinate type code + +1CRV77B = 150 / [deg] Coordinate value at reference point +2CRV77B = -30 / [deg] Coordinate value at reference point +3CRV77B = 0.214982042 / [m] Coordinate value at reference point +4CRV77B = -2000 / [s] Coordinate value at reference point + +1V77_1B = 0 / [deg] Native longitude of the reference point +1V77_2B = 90 / [deg] Native latitude of the reference point +1V77_3B = 195 / [deg] alias for LONP77A (has precedence) +1V77_4B = -30 / [deg] alias for LATP77A (has precedence) +2V77_1B = 0 / SZP projection parameter +2V77_2B = 180 / SZP projection parameter +2V77_3B = 45 / SZP projection parameter +4S77_0B = 'UTC' / Coordinate transformation parameter + +LONP77B = 195 / [deg] Native longitude of celestial pole +LATP77B = -30 / [deg] Native latitude of celestial pole +RFRQ77B = 1420405750 / [Hz] Line rest frequency +RWAV77B = 0.211061141 / [Hz] Line rest wavelength + +WCSN77B = 'St''d representation: SZP projection' / Coordinate system title +1CNA77B = 'Right ascension (J2000)' / Axis name for labelling purposes +2CNA77B = 'Declination (J2000)' / Axis name for labelling purposes +3CNA77B = 'Wavelength' / Axis name for labelling purposes +4CNA77B = 'Time offset' / Axis name for labelling purposes +3CRD77B = 1e-11 / [m] Random error in coordinate +3CSY77B = 1e-12 / [m] Systematic error in coordinate + +DOBS77 = '1957-02-14T15:00:00' / ISO-8601 observation date +MJDOB77 = 35883.625000 / [d] MJD of observation +DAVG77 = '1957-02-14T16:48:00' / ISO-8601 time at midpoint of observation +MJDA77 = 35883.700000 / [d] MJD at midpoint of observation + +OBSGX77 = -4554231.5 / [m] observatory X-coordinate +COMMENT OBSGEO-Y (below) should be inherited for OBSGY77. +OBSGZ77 = -3454036.3 / [m] observatory Z-coordinate +RADE77B = 'FK5' / Equatorial coordinate system +EQUI77B = 2000 / [yr] Equinox of equatorial coordinates +SPEC77B = 'BARYCENT' / Reference frame of spectral coordinates +SOBS77B = 'TOPOCENT' / Reference frame of spectral observation +VSYS77B = 1500 / [m/s] Velocity towards source +ZSOU77B = 0.0025 / Redshift of the source +SSRC77B = 'LSRK' / Reference frame of source redshift +VANG77B = 0.00 / [deg] Velocity orientation angle + +COMMENT ======================================================================= +COMMENT Pixel list keywords with axes in columns 8, 9 and 10 and alternate +COMMENT representation 'P'. +COMMENT +COMMENT In the IRAF representation, if one CDi_ja (TCDn_ka) keyword is given +COMMENT then the default is zero for any that are omitted. CDELTia (TCDLTna) +COMMENT and CROTAn (TCROTna) keywords are included for informational purposes +COMMENT only and otherwise are to be ignored. +COMMENT +COMMENT This representation uses the non-standard long form for some pixel +COMMENT list keywords with non-blank alternate version specifier (these forms +COMMENT are standard for a = ' ' only): +COMMENT TCRPXna instead of TCRPna +COMMENT TCDn_ka TCn_ka +COMMENT TCDLTna TCDEna +COMMENT TCUNIna TCUNna +COMMENT TCTYPna TCTYna +COMMENT TCRVLna TCRVna +COMMENT TPVn_ma TVn_ma +COMMENT TCNAMna TCNAna +COMMENT TCRDEna TCRDna +COMMENT TCSYEna TCSYna +COMMENT Also, strictly speaking, alternate version codes are not defined for +COMMENT TCROTn (e.g. TCROT9P below), and WCSNna should be TWCSna. However, +COMMENT these are considered to be natural extensions that all FITS WCS +COMMENT interpreters should support. Apart from that, this representation +COMMENT contains standard keywords and usage. +COMMENT +COMMENT For reasons explained in the usage notes for wcsbth() in wcshdr.h, +COMMENT OBSGX99, OBSGEO-Y, and OBSGZ77, which appears above, apply to the +COMMENT pixel list image in this header. +COMMENT ----------------------------------------------------------------------- +TCRPX8P = 513 / Pixel coordinate of reference point +TCRPX9P = 513 / Pixel coordinate of reference point +TCRPX10P= 1025 / Pixel coordinate of reference point + +TCD8_8P = -0.08660254 / Coordinate transformation matrix element +TCD8_9P = -0.05 / Coordinate transformation matrix element +TCD9_8P = -0.05 / Coordinate transformation matrix element +TCD9_9P = 0.08660254 / Coordinate transformation matrix element +TC10_10P= -4.565153674e-5 / Coordinate transformation matrix element + +TCDLT8P = -0.10 / [deg] Coordinate increment at reference point +TCDLT9P = 0.10 / [deg] Coordinate increment at reference point +TCDLT10P= -4.565153674e-5 / Coordinate increment at reference point +TCROT9P = 30.0 / [deg] Bulk image rotation + +TCUNI8P = 'deg' / Units of coordinate increment and value +TCUNI9P = 'deg' / Units of coordinate increment and value + +TCTYP8P = 'RA---ZPN' / Right ascension, zenithal/azimuthal polynomial +TCTYP9P = 'DEC--ZPN' / Declination, zenithal/azimuthal polynomial proj +TCTYP10P= 'ZOPT-F2W' / Redshift (linear in frequency) + +TCRVL8P = 150 / [deg] Coordinate value at reference point +TCRVL9P = -30 / [deg] Coordinate value at reference point +TCRVL10P= 0.018577089 / Coordinate value at reference point + +TPV9_1P = 1 / ZPN projection parameter +TPV9_3P = 0.333333333 / ZPN projection parameter +TPV9_5P = 0.133333333 / ZPN projection parameter +TPV9_7P = 0.053968254 / ZPN projection parameter +TPV9_9P = 0.021869489 / ZPN projection parameter +TPV9_11P= 0.008863236 / ZPN projection parameter +TPV9_13P= 0.003592128 / ZPN projection parameter +TPV9_15P= 0.001455834 / ZPN projection parameter +TPV9_17P= 0.000590027 / ZPN projection parameter +TPV9_19P= 0.000239129 / ZPN projection parameter + +LONP8P = 195 / [deg] Native longitude of celestial pole +LATP8P = -30 / [deg] Native latitude of celestial pole +RFRQ8P = 1420405750 / [Hz] Line rest frequency +RWAV8P = 0.211061141 / [Hz] Line rest wavelength + +WCSN8P = 'IRAF representation: ZPN projection' / Coordinate system title +TCNAM8P = 'Right ascension (J2000)' / Axis name for labelling purposes +TCNAM9P = 'Declination (J2000)' / Axis name for labelling purposes +TCNAM10P= 'Redshift' / Axis name for labelling purposes +TCRDE10P= 5e-11 / Random error in coordinate +TCSYE10P= 5e-12 / Systematic error in coordinate + +DOBS8 = '1957-02-14T15:00:00' / ISO-8601 time of observation +MJDOB8 = 35883.625000 / [d] MJD of observation +DAVG8 = '1957-02-14T16:48:00' / ISO-8601 time at midpoint of observation +MJDA8 = 35883.700000 / [d] MJD at midpoint of observation + +OBSGX99 = -4554231.53 / [m] observatory X-coordinate +RADE8P = 'FK5' / Equatorial coordinate system +EQUI8P = 2000 / [yr] Equinox of equatorial coordinates +SPEC8P = 'BARYCENT' / Reference frame of spectral coordinates +SOBS8P = 'TOPOCENT' / Reference frame of spectral observation +VSYS8P = 1500 / [m/s] Velocity towards source +ZSOU8P = 0.00250000001174 / Redshift of the source +SSRC8P = 'LSRK' / Reference frame of source redshift +VANG8P = 0.00 / [deg] Velocity orientation angle + +COMMENT ======================================================================= +COMMENT By themselves, these primary image header auxiliary WCS keywords +COMMENT should not be sufficient to cause a wcsprm struct to be created for +COMMENT representation X, nor should they affect any of the others. +COMMENT ----------------------------------------------------------------------- + +LONPOLEX= 180.0 / [deg] Native longitude of the NCP +LATPOLEX= 999.0 / [deg] Native latitude of the NCP +RESTFRQX= 1.42040575e9 / [Hz] HI rest frequency +RESTWAVX= 0.211061141 / [m] HI rest wavelength +WCSNAMEX= 'eXtraneous' / Name of this coordinate system +RADESYSX= 'ICRS' / Mean equatorial coordinates, IAU 1984 system +EQUINOXX= 2000.0 / [yr] Equinox of equatorial coordinates +SPECSYSX= 'BARYCENT' / Reference frame of spectral coordinates +SSYSOBSX= 'TOPOCENT' / Reference frame of observation +VELOSYSX= 1500.0 / [m/s] Bary-topo velocity towards the source +ZSOURCEX= 0.0025 / Redshift of the source +SSYSSRCX= 'LSRK' / Reference frame of source redshift +VELANGLX= 35.25 / [deg] Velocity orientation angle + +COMMENT ======================================================================= +COMMENT The following global keywords have no alternates. Except where +COMMENT overridden by their binary table equivalents, they apply to each +COMMENT coordinate representation, even that of the AIPS convention for +COMMENT which, strictly, only the DATE-OBS keyword should be recognized. +COMMENT +COMMENT For test purposes, the remaining standard global WCS-related keywords +COMMENT are included here, even though there is considerable overlap between +COMMENT them. Specifically, the keywords in the following groups all convey +COMMENT the same information, only one need be given: +COMMENT - MJDREF, MJDREFI + MJDREFF, JDREF, and JDREFI + JDREFF; +COMMENT - DATE-OBS, MJD-OBS, JEPOCH, and BEPOCH; +COMMENT - DATE-AVG and MJD-AVG; +COMMENT - DATE-BEG, MJD-BEG, and TSTART; +COMMENT - DATE-END, MJD-END, and TSTOP; +COMMENT - OBSGEO-[XYZ] and OBSGEO-[LBH]; +COMMENT - TELAPSE, DATE-END - DATE-BEG, MJD-END - MJD-BEG, and +COMMENT TSTOP - TSTART. +COMMENT Interpretation is undefined if there are any inconsistencies between +COMMENT them. +COMMENT +COMMENT The keycomments for OBSGEO-Y and OBSGEO-Z have been omitted +COMMENT deliberately for test purposes. +COMMENT ----------------------------------------------------------------------- + +TIMESYS = 'UTC' / Time scale +TREFPOS = 'TOPOCENTRE' / Time reference position, with OBSGEO-[XYZLBH] +TREFDIR = 'RA_NOM,DEC_NOM' / Time reference direction +PLEPHEM = 'DE405' / Ephemerides used for pathlength delays + +TIMEUNIT= 's' / Time units +DATEREF = '1957-02-14T15:00:00'/ ISO-8601 fiducial time +MJDREF = 35883.625000 / [d] MJD of fiducial time +MJDREFI = 35883 / [d] MJD of fiducial time, integer part +MJDREFF = 0.625000 / [d] MJD of fiducial time, fractional part +JDREF = 2435884.125000 / [d] JD of fiducial time +JDREFI = 2435884 / [d] JD of fiducial time, integer part +JDREFF = 0.125000 / [d] JD of fiducial time, fractional part +TIMEOFFS= 0.010 / [s] Clock correction + +DATE-OBS= '1957-02-14T15:00:00'/ ISO-8601 time of observation +MJD-OBS = 35883.625000 / [d] MJD of observation +JEPOCH = 1957.125598905 / [a] Julian epoch of observation +BEPOCH = 1957.125960663 / [a] Besselian epoch of observation + +DATE-BEG= '1957-02-14T15:00:00'/ ISO-8601 time at start of observation +MJD-BEG = 35883.625000 / [d] MJD at start of observation +TSTART = 0.0 / [s] Time elapsed since fiducial time at start + +DATE-AVG= '1957-02-14T16:48:00'/ ISO-8601 time at midpoint of observation +MJD-AVG = 35883.700000 / [d] MJD at midpoint of observation + +DATE-END= '1957-02-14T18:36:00'/ ISO-8601 time at end of observation +MJD-END = 35883.775000 / [d] MJD at end of observation +TSTOP = 12960.0 / [s] Time elapsed since fiducial time at end + +XPOSURE = 12960.0 / [s] Exposure (integration) time +TELAPSE = 12960.0 / [s] Elapsed time (start to stop) + +TIMSYER = 5E-5 / [s] Systematic error in time measurements +TIMRDER = 1E-9 / [s] Relative error in time measurements +TIMEDEL = 1.0 / [s] Time resolution +TIMEPIXR= 0.5 / Reference position of timestamp in binned data + +OBSGEO-X= -4554231.533 / [m] WGS84 coordinates of Parkes radiotelescope +OBSGEO-Y= 2816759.109 / +OBSGEO-Z= -3454036.323 +OBSGEO-L= 148.263510 / [deg] WGS84, IAU(1976) ellipsoid, longitude +OBSGEO-B= -32.998406 / [deg] WGS84, IAU(1976) ellipsoid, latitude +OBSGEO-H= 411.793 / [m] WGS84, IAU(1976) ellipsoid, height +OBSORBIT= 'sputnik-1957.eph' / Spacecraft orbit ephemeris file + +COMMENT ======================================================================= +COMMENT The following global auxiliary keywords are non-standard but widely +COMMENT used in particular fields of astronomy. They reside within the +COMMENT auxprm struct in wcsprm. Their presence here should cause that +COMMENT struct to be allocated and filled. +COMMENT ----------------------------------------------------------------------- + +RSUN_REF= 696E+6 / [m] Solar radius +DSUN_OBS= 150.7E+9 / [m] Distance from centre of Sun to observer +CRLN_OBS= 120.0 / [deg] Carrington heliographic lng of observer +HGLN_OBS= 0.0 / [deg] Stonyhurst heliographic lng of observer +HGLT_OBS= 7.25 / [deg] Heliographic latitude of the observer +A_RADIUS= 12.0E+7 / [m] Object ellipsoid semi-major axis +B_RADIUS= 11.0E+7 / [m] Object ellipsoid semi-intermediate axis +C_RADIUS= 10.0E+7 / [m] Object ellipsoid semi-minor axis +BLON_OBS= 155.0 / [deg] Bodycentric longitude of observer +BLAT_OBS= -33.0 / [deg] Bodycentric latitude of observer +BDIS_OBS= 137E+9 / [m] Bodycentric distance of observer + +END diff --git a/deps/wcslib/C/test/fitshdr.keyrec b/deps/wcslib/C/test/fitshdr.keyrec new file mode 100644 index 0000000..64ed169 --- /dev/null +++ b/deps/wcslib/C/test/fitshdr.keyrec @@ -0,0 +1,160 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: fitshdr.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing by tfitshdr. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < fitshdr.keyrec > fitshdr.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = F / Conforms to FITS standard? NO! +BITPIX = -32 / IEEE single precision floating point +NAXIS = 0 / No image data + +CRPIX1A = 513.0 / Pixel coordinate of reference point +CRPIX2A = 513.0 / Pixel coordinate of reference point +CRPIX3A = 1025.0 / Pixel coordinate of reference point +CRPIX4A = 1.0 / Pixel coordinate of reference point +PC1_1A = 0.866025404 / Linear transformation matrix element +PC1_2A = 0.500000000 / Linear transformation matrix element +PC2_1A = -0.500000000 / Linear transformation matrix element +PC2_2A = 0.866025404 / Linear transformation matrix element + +CDELT1A = -0.10 / [deg] x-scale +CUNIT1A = 'deg' / Degree units are required +CTYPE1A = 'RA---SZP' / Right ascension in slant zenithal projection +CRVAL1A = 150.0 / [deg] Right ascension at the reference point +CNAME1A = 'Right ascension (J2000)' / Axis name for labelling purposes +CDELT2A = 0.10 / [deg] y-scale +CUNIT2A = 'deg' / Degree units are required +CTYPE2A = 'DEC--SZP' / Declination in a slant zenithal projection +CRVAL2A = -30.0 / [deg] Declination at the reference point +CNAME2A = 'Declination (J2000)' / Axis name for labelling purposes +PV1_1A = 0.0 / [deg] Native longitude of the reference point +PV1_2A = 90.0 / [deg] Native latitude of the reference point +PV1_3A = 195.0 / [deg] LONPOLEa by another name (precedence) +PV1_4A = 999.0 / [deg] LATPOLEa by another name (precedence) +PV2_1A = 0.0 / SZP distance, in spherical radii +PV2_2A = 180.0 / [deg] SZP P-longitude +PV2_3A = 45.0 / [deg] SZP P-latitude +LONPOLEA= 195.0 / [deg] Native longitude of the NCP +LATPOLEA= 999.0 / [deg] Native latitude of the NCP +RADESYSA= 'FK5' / Mean equatorial coordinates, IAU 1984 system +EQUINOXA= 2000.0 / [yr] Equinox of equatorial coordinates + +CDELT3A = -9.635265432e-6 / [m] Wavelength scale +CUNIT3A = 'm' / Wavelength units +CTYPE3A = 'WAVE-F2W' / Frequency axis expressed as wavelength +CRVAL3A = 0.214982042 / [m] Reference wavelength +CNAME3A = 'Wavelength' / Axis name for labelling purposes +CRDER3A = 1.0e-11 / [m] Wavelength calibration, random error +CSYER3A = 1.0e-12 / [m] Wavelength calibration, systematic error +RESTFRQA= 1.42040575e9 / [Hz] HI rest frequency +RESTWAVA= 0.211061141 / [m] HI rest wavelength +SPECSYSA= 'BARYCENT' / Reference frame of spectral coordinates +SSYSOBSA= 'TOPOCENT' / Reference frame of observation +VELOSYSA= 1500.0 / [m/s] Bary-topo velocity towards the source +SSYSSRCA= 'LSRK' / Reference frame of source redshift +ZSOURCEA= 0.0025 / Redshift of the source + +CDELT4A = 1.0 / [s] Time scale +CUNIT4A = 's' / Time units +CTYPE4A = 'TIME''x''' / String value and comment containing quotes (') +CRVAL4A = -2e3 / [s] Time at the reference point +CNAME4A = 'Time offset' / Axis name for labelling purposes +PS4_0A = 'UTC' / Time measurement system + +UNDEF = / Undefined keyvalue +TRUE = T / Logical +FALSE = F / Logical +INT32 = 00000012345 / Not a 64-bit integer +INT32 = -000000123456789 / Not a 64-bit integer +INT32 = -2147483648 / Not a 64-bit integer (INT_MIN) +INT32 = 2147483647 / Not a 64-bit integer (INT_MAX) +INT32 = 0000000000000000000000000000000000012345 / Not a very long integer +INT32 = -000000000000000000000000000123456789 / Not a very long integer +INT64 = -2147483649 / 64-bit integer (INT_MIN - 1) +INT64 = +2147483648 / 64-bit integer (INT_MAX + 1) +INT64 = +100000000000000000 / 64-bit integer +INT64 = -876543210987654321 / 64-bit integer +INT64 = -9223372036854775808 / Not a very long integer (LONG_MIN) +INT64 = +9223372036854775807 / Not a very long integer (LONG_MAX) +INT64 = -000000000000000000000000000000876543210987654321 / 64-bit integer +INTVL = -9223372036854775809 / Very long integer (LONG_MIN - 1) +INTVL = +9223372036854775808 / Very long integer (LONG_MAX + 1) +INTVL = -100000000000000000000000000000876543210987654321 / Very-long integer +INTVL = +123456789012345678901234567890123456789012345678901234567890123456789 +INTVL = 1234567890123456789012345678901234567890123456789012345678901234567890 +FLOAT = 3.14159265358 / Floating point +FLOAT = 1.602176565e-19 / Floating point, lower-case exp allowed +FLOAT = 2.99792458E8 / Floating point +FLOAT = 6.62606957d-34 / Floating point, lower-case exp allowed +FLOAT = 6.02214129D23 / Floating point +COMPLEX = (137, -1) / An integer complex keyvalue +COMPLEX = (10e5, -0.1) / A floating point complex keyvalue +GOODSTR = '"G''DAY" ' / A valid string keyvalue +BLANKS = ' ' / An all-blank string equals a single blank +LONGSTR = 'The loooooongest possible non-continued string value, 68 characters.' +CONTSTR = 'The quick brown & ' / Continued string, with & (will be stripped off) +CONTINUE 'fox jumps over the' Relaxed handling of invalid keycomment +CONTINUE ' lazy dog' +PI = 3.14159265358929323 / [!?] is not a valid units specification +CONTINUE 'Not a valid string continuation' + +COMMENT ----------------------------------------------------------------------- +COMMENT The following are all deliberate syntax errors: +COMMENT ----------------------------------------------------------------------- + +BADREC = 1 / Illegal, "= " not in columns 9-10 +BADREC = 1 / Illegal, "= " not in columns 9-10 +BADREC =1 / Illegal, "= " not in columns 9-10 +BADREC 1 / Illegal, "= " not in columns 9-10 +BadKey = 111 / Example of a syntax error, invalid keyword +BADKEY! = 222 / Example of a syntax error, invalid keyword +BAD KEY = 333 / Example of a syntax error, invalid keyword +BADVAL = BAD / Example of a syntax error, invalid keyvalue +BADVAL = "BAD" / Example of a syntax error, invalid keyvalue +BADVAL = 'BAD' 'STR' / Example of a syntax error, invalid keyvalue +BADVAL = 49 + 94 / Example of a syntax error, invalid keyvalue +BADVAL = 1934-638 / Example of a syntax error, invalid keyvalue +BADVAL = 1.2.3 / Example of a syntax error, invalid keyvalue +BADVAL = 12h34m56s / Example of a syntax error, invalid keyvalue +BADVAL = 0xFF / Example of a syntax error, invalid keyvalue +BADVAL = 58 - 21 / Example of a syntax error, invalid keyvalue +BADVAL = J2000 / Example of a syntax error, invalid keyvalue +BADVAL = B1950.0 / Example of a syntax error, invalid keyvalue +BADVAL = 180:00:00 / Example of a syntax error, invalid keyvalue +BADVAL = $9.99 / Example of a syntax error, invalid keyvalue +BADCOMM = 1 Example of a syntax error, invalid keycomment +BADCOMM = 1 1/8 = 0.125 + +END = 'ILLEGAL' / Illegal END keyrecord +END + +DANGLE1 Keyrecords following the END keyrecord should be flagged. +DANGLE2 +DANGLE3 diff --git a/deps/wcslib/C/test/pih.keyrec b/deps/wcslib/C/test/pih.keyrec new file mode 100644 index 0000000..3f3acf4 --- /dev/null +++ b/deps/wcslib/C/test/pih.keyrec @@ -0,0 +1,411 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: pih.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing by tpih1 and tpih2. See also +# wcslint.keyrec which tests wcspih() for its ability to recognise syntax +# errors in WCS keyrecords. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < pih.keyrec > pih.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = F / Conforms to FITS standard? NO! +BITPIX = -32 / IEEE single precision floating point +NAXIS = 0 / No image data + +COMMENT WARNING WARNING WARNING +COMMENT ------------------------- +COMMENT This header has been developed for test purposes and as such contains +COMMENT all standard WCS keywords. Combining certain of them (e.g. PCi_ja, +COMMENT CDi_ja, and CROTAn) within a single FITS header violates certain WCS +COMMENT standards. However, taken individually, each representation is legal, +COMMENT except as indicated. +COMMENT +COMMENT The three alternate representations define essentially the same +COMMENT coordinate system in three different ways. The older AIPS convention +COMMENT is necessarily used for the primary representation because the +COMMENT alternate version code (e.g. the "a" in CTYPEia) is not applicable in +COMMENT that convention. +COMMENT +COMMENT For compatibility testing, the header also contains a number of non- +COMMENT standard keywords and constructs: the AIPS keywords CROTAn, EPOCH, and +COMMENT VELREF retrofitted with alternate version codes, and PROJPn, a +COMMENT forerunner of PVi_ma. However, non-standard CD00i00j and PC00i00j +COMMENT keywords, while recognized, are not included since they can only apply +COMMENT to the primary representation which is used here to test the AIPS +COMMENT convention. +COMMENT +COMMENT A simple TAN projection used in the primary representation is +COMMENT expressed as an equivalent SZP projection in the "A" representation, +COMMENT and approximated by a ZPN in the "I" representation. A bulk image +COMMENT rotation of 15 deg applied by the defunct CROTAn keyword in the AIPS +COMMENT convention is replaced in the alternates by an equivalent bulk image +COMMENT rotation of 30 deg applied by the linear transformation matrix, +COMMENT together with an effective bulk rotation of -15 deg applied by +COMMENT LONPOLE (this is only possible for zenithal projections). +COMMENT +COMMENT Similarly, the spectral axis in the primary representation, a simple +COMMENT linear frequency axis, is recast as non-linear wavelength and redshift +COMMENT axes in the alternates. +COMMENT +COMMENT Although the parser handles free-format character string, integer, and +COMMENT floating-point keyvalues (NOST 100-2.0, Sect. 5.2) most numeric values +COMMENT in this header are given in the conventional fixed-format, with only +COMMENT CROTA2I, EPOCHI, and VELREFI as exceptions for testing. Most string +COMMENT values are free-format, only those in the "A" representation are fixed. + +COMMENT ======================================================================= +COMMENT Primary representation +COMMENT ---------------------- +COMMENT +COMMENT In the AIPS convention CROTAn associated with the latitude axis +COMMENT defines a bulk image rotation. Strictly speaking, the representation +COMMENT here is illegal since it mixes new WCS keywords (WCSAXESa and +COMMENT WCSNAMEa) with CROTAn, an older AIPS convention keyword. WCSAXES is +COMMENT used here because setting NAXIS non-zero would require that this FITS +COMMENT file contain a data section. +COMMENT +COMMENT Several PROJPn keyrecords (non-standard) are also included here for +COMMENT test purposes; they were never part of the AIPS convention and only +COMMENT appeared in early drafts of the WCS papers. Their values are not +COMMENT actually used in the TAN projection. +COMMENT ----------------------------------------------------------------------- + +COMMENT The following two keyrecords are not part of the AIPS convention. +WCSAXES = 4 / Four coordinate axes +WCSNAME = 'AIPS convention: TAN projection' / Name of this coordinate system + +CRPIX1 = 513.0 / Pixel coordinate of reference point +CRPIX2 = 513.0 / Pixel coordinate of reference point +CRPIX3 = 1025.0 / Pixel coordinate of reference point +CRPIX4 = 1.0 / Pixel coordinate of reference point + +CDELT1 = -0.10 / x-scale +CDELT2 = 0.10 / y-scale +CROTA2 = 15.0 / Bulk image rotation +CTYPE1 = 'RA---TAN' / Right ascension in a gnomonic projection +CRVAL1 = 150.0 / [deg] Right ascension at the reference point +CTYPE2 = 'DEC--TAN' / Declination in a gnomonic projection +CRVAL2 = -30.0 / [deg] Declination at the reference point +EPOCH = 2000.0 / Equinox of equatorial coordinates + +CDELT3 = 62.5E3 / Frequency scale +CTYPE3 = 'FREQ ' / Frequency axis +CRVAL3 = 1.3945E9 / [Hz] Reference frequency +VELREF = 258 / Barycentric radio velocity +ALTRPIX = 0.0 / Alternate reference pixel (not handled) +ALTRVAL = 0.0 / Alternate reference value (not handled) +RESTFREQ= 1.42040575E9 / HI rest frequency + +CDELT4 = 1.0 / Stokes increment +CTYPE4 = 'STOKES ' / Stokes convention axis (I, Q, U, V) +CRVAL4 = 1.0 / Stokes I + +COMMENT As explained above, the following keyrecords are non-standard. +PROJP0 = 0.0 / Projection parameter (not used) +PROJP1 = 0.0 / Projection parameter (not used) +PROJP2 = 0.0 / Projection parameter (not used) + +COMMENT ======================================================================= +COMMENT Alternate representation 'A' +COMMENT ---------------------------- +COMMENT +COMMENT This coordinate representation utilizing a PCi_ja matrix expresses the +COMMENT above gnomonic (TAN) projection as a slant zenithal perspective +COMMENT projection (SZP) in order to test the reading of a number of PVi_ma +COMMENT keywords. +COMMENT +COMMENT The third, spectral, axis, which is linear in frequency, is here +COMMENT re-expressed as a non-linear wavelength axis. +COMMENT +COMMENT For testing purposes, the fourth axis, STOKES, here becomes a linear +COMMENT TIME axis, which would be impossible in the real world. +COMMENT +COMMENT This representation contains only standard keywords and usage. +COMMENT ----------------------------------------------------------------------- + +WCSAXESA= 4 / Four coordinate axes +WCSNAMEA= 'Standard representation: SZP projection' / Name of this system + +CRPIX1A = 513.0 / Pixel coordinate of reference point +CRPIX2A = 513.0 / Pixel coordinate of reference point +CRPIX3A = 1025.0 / Pixel coordinate of reference point +CRPIX4A = 1.0 / Pixel coordinate of reference point +PC1_1A = 0.866025404 / Linear transformation matrix element +PC1_2A = 0.500000000 / Linear transformation matrix element +PC2_1A = -0.500000000 / Linear transformation matrix element +PC2_2A = 0.866025404 / Linear transformation matrix element + +CDELT1A = -0.10 / [deg] x-scale +CUNIT1A = 'deg' / Degree units are required +CTYPE1A = 'RA---SZP' / Right ascension in slant zenithal projection +CRVAL1A = 150.0 / [deg] Right ascension at the reference point +CNAME1A = 'Right ascension (J2000)' / Axis name for labelling purposes +CDELT2A = 0.10 / [deg] y-scale +CUNIT2A = 'deg' / Degree units are required +CTYPE2A = 'DEC--SZP' / Declination in a slant zenithal projection +CRVAL2A = -30.0 / [deg] Declination at the reference point +CNAME2A = 'Declination (J2000)' / Axis name for labelling purposes +PV1_1A = 0.0 / [deg] Native longitude of the reference point +PV1_2A = 90.0 / [deg] Native latitude of the reference point +PV1_3A = 195.0 / [deg] LONPOLEa by another name (precedence) +PV1_4A = 999.0 / [deg] LATPOLEa by another name (precedence) +PV2_1A = 0.0 / SZP distance, in spherical radii +PV2_2A = 180.0 / [deg] SZP P-longitude +PV2_3A = 45.0 / [deg] SZP P-latitude +LONPOLEA= 195.0 / [deg] Native longitude of the NCP +LATPOLEA= 999.0 / [deg] Native latitude of the NCP +RADESYSA= 'FK5' / Mean equatorial coordinates, IAU 1984 system +EQUINOXA= 2000.0 / [yr] Equinox of equatorial coordinates + +CDELT3A = -9.635265432E-6 / [m] Wavelength scale +CUNIT3A = 'm' / Wavelength units +CTYPE3A = 'WAVE-F2W' / Frequency axis expressed as wavelength +CRVAL3A = 0.214982042 / [m] Reference wavelength +CNAME3A = 'Wavelength' / Axis name for labelling purposes +CRDER3A = 1.0E-11 / [m] Wavelength calibration, random error +CSYER3A = 1.0E-12 / [m] Wavelength calibration, systematic error +RESTFRQA= 1.42040575E9 / [Hz] HI rest frequency +RESTWAVA= 0.211061141 / [m] HI rest wavelength +SPECSYSA= 'BARYCENT' / Reference frame of spectral coordinates +SSYSOBSA= 'TOPOCENT' / Reference frame of observation +VELOSYSA= 1500.0 / [m/s] Bary-topo velocity towards the source +ZSOURCEA= 0.0025 / Redshift of the source +SSYSSRCA= 'LSRK' / Reference frame of source redshift + +CDELT4A = 1.0 / [s] Time scale +CUNIT4A = 's' / Time units +CTYPE4A = 'TIME''x''' / String value and comment containing quotes (') +CRVAL4A = -2E3 / [s] Time at the reference point +CNAME4A = 'Time offset' / Axis name for labelling purposes +PS4_0A = 'UTC' / Time scale + +COMMENT ======================================================================= +COMMENT Alternate representation 'I' +COMMENT ---------------------------- +COMMENT +COMMENT While encoding a TAN projection as SZP may be good for testing +COMMENT purposes, approximating it by a zenithal polynomial projection (ZPN) +COMMENT is even better! The polynomial coefficients are accurate to the +COMMENT number of decimal places given (but don't ever do this in a real +COMMENT header). +COMMENT +COMMENT The third, spectral, axis, which is linear in frequency, is here +COMMENT re-expressed as a non-linear redshift. +COMMENT +COMMENT The fourth axis, TIME in the A representation, is here re-expressed +COMMENT as a PHASE axis in order to test the CZPHSia and CPERIia keywords. +COMMENT +COMMENT In the IRAF representation, if one CDi_ja keyword is given then the +COMMENT default is zero for any that are omitted. CDELTia and CROTAn +COMMENT keywords are included for informational purposes only and otherwise +COMMENT are to be ignored. +COMMENT +COMMENT Strictly speaking, alternate version codes are not defined for CROTAn +COMMENT (e.g. CROTA2I below), EPOCHa or VELREFa. The latter two should be +COMMENT overridden by EQUINOXa and SPECSYSa even though they occur later in +COMMENT the header. +COMMENT ----------------------------------------------------------------------- + +WCSAXESI= 4 / Three coordinate axes +WCSNAMEI= 'IRAF representation: ZPN projection' / Name of this coordinate system + +CRPIX1I = 513.0 / Pixel coordinate of reference point +CRPIX2I = 513.0 / Pixel coordinate of reference point +CRPIX3I = 1025.0 / Pixel coordinate of reference point +CRPIX4I = 1.0 / Pixel coordinate of reference point +CD1_1I = -0.086602540 / [deg] CD matrix element +CD1_2I = -0.050000000 / [deg] CD matrix element +CD2_1I = -0.050000000 / [deg] CD matrix element +CD2_2I = 0.086602540 / [deg] CD matrix element +CD3_3I = -4.565153674E-5 / Redshift scale +CD4_4I = 0.01 / [turn] Phase scale + +CDELT1I = -0.10 / [deg] x-scale (informational) +CUNIT1I = 'deg' / Degree units are required +CTYPE1I = 'RA---ZPN' / Right ascension in slant zenithal projection +CRVAL1I = 150.0 / [deg] Right ascension at the reference point +CNAME1I = 'Right ascension (J2000)' / Axis name for labelling purposes +CDELT2I = 0.10 / [deg] y-scale (informational) +CUNIT2I = 'deg' / Degree units are required +CTYPE2I = 'DEC--ZPN' / Declination in a slant zenithal projection +CRVAL2I = -30.0 / [deg] Declination at the reference point +CNAME2I = 'Declination (J2000)' / Axis name for labelling purposes +PV2_1I = 1.000000000 / ZPN P1 coefficient for approximating TAN +PV2_3I = 0.333333333 / ZPN P3 coefficient for approximating TAN +PV2_5I = 0.133333333 / ZPN P5 coefficient for approximating TAN +PV2_7I = 0.053968254 / ZPN P7 coefficient for approximating TAN +PV2_9I = 0.021869489 / ZPN P9 coefficient for approximating TAN +PV2_11I = 0.008863236 / ZPN P11 coefficient for approximating TAN +PV2_13I = 0.003592128 / ZPN P13 coefficient for approximating TAN +PV2_15I = 0.001455834 / ZPN P15 coefficient for approximating TAN +PV2_17I = 0.000590027 / ZPN P17 coefficient for approximating TAN +PV2_19I = 0.000239129 / ZPN P19 coefficient for approximating TAN +LONPOLEI= 195.0 / [deg] Native longitude of the NCP +LATPOLEI= 999.0 / [deg] Native latitude of the NCP +RADESYSI= 'FK5' / Mean equatorial coordinates, IAU 1984 system +EQUINOXI= 2000.0 / [yr] Equinox of equatorial coordinates + +CDELT3I = -4.565153674E-5 / Redshift scale (informational) +CTYPE3I = 'ZOPT-F2W' / Frequency axis expressed as redshift +CRVAL3I = 0.018577089 / Reference redshift +CNAME3I = 'Redshift' / Axis name for labelling purposes +CRDER3I = 5.0E-11 / Redshift calibration, random error +CSYER3I = 5.0E-12 / Redshift calibration, systematic error +RESTFRQI= 1.42040575E9 / [Hz] HI rest frequency +RESTWAVI= 0.211061141 / [m] HI rest wavelength +SSYSOBSI= 'TOPOCENT' / Reference frame of observation +VELOSYSI= 1500.0 / [m/s] Bary-topo velocity towards the source +VSOURCEI= 748544.3 / [m/s] Apparent radial velocity of the source +SSYSSRCI= 'LSRK' / Reference frame of source redshift +VELANGLI= 0.00 / [deg] Velocity orientation angle + +CDELT4I = 0.01 / [turn] Phase scale +CUNIT4I = 'turn' / Phase units +CTYPE4I = 'PHASE' / Phase associated with the time axis +CRVAL4I = 0.0 / [turn] Phase at the reference point +CZPHS4I = 0.0 / [s] Time elapsed from MJDREF at zero phase +CPERI4I = 100.0 / [s] Period +CNAME4I = 'Phase' / Axis name for labelling purposes + +COMMENT As explained above, the following keyrecords are non-standard. +CROTA2I = 30.0 / [deg] Bulk image rotation +EPOCHI = 2000 / [yr] Equinox of equatorial coordinates +VELREFI = 258 / Barycentric radio velocity + +COMMENT ======================================================================= +COMMENT By themselves, these primary image header auxiliary WCS keywords +COMMENT should not be sufficient to cause a wcsprm struct to be created for +COMMENT representation X, nor should they affect any of the others. +COMMENT ----------------------------------------------------------------------- + +LONPOLEX= 180.0 / [deg] Native longitude of the celestial pole +LATPOLEX= -999.0 / [deg] Native latitude of the celestial pole +RESTFRQX= 1667.3590E6 / [Hz] OH maser line rest frequency +RESTWAVX= 0.17980079 / [m] OH maser line rest wavelength + +WCSNAMEX= 'eXtraneous' / Name of this coordinate system + +RADESYSX= 'ICRS' / Mean equatorial coordinates, IAU 1984 system +EQUINOXX= 1950.0 / [yr] Equinox of equatorial coordinates +SPECSYSX= 'HELIOCEN' / Reference frame of spectral coordinates +SSYSOBSX= 'GEOCENTR' / Reference frame of observation +VELOSYSX= 30000.0 / [m/s] Bary-topo velocity towards the source +ZSOURCEX= 0.0456 / Redshift of the source +SSYSSRCX= 'LSRK' / Reference frame of source redshift +VELANGLX= 35.25 / Velocity orientation angle + +COMMENT ======================================================================= +COMMENT The following auxiliary keywords have no alternates; they apply to +COMMENT each coordinate representation, even that of the AIPS convention for +COMMENT which, strictly, only the DATE-OBS keyword should be recognized. +COMMENT +COMMENT For test purposes, the remaining standard global WCS-related keywords +COMMENT are included here, even though there is considerable overlap between +COMMENT them. Specifically, the keywords in the following groups all convey +COMMENT the same information, only one need be given: +COMMENT - MJDREF, MJDREFI+MJDREFF, JDREF, and JDREFI+JDREFF; +COMMENT - DATE-OBS, MJD-OBS, JEPOCH, and BEPOCH; +COMMENT - DATE-AVG and MJD-AVG; +COMMENT - DATE-BEG, MJD-BEG, and TSTART; +COMMENT - DATE-END, MJD-END, and TSTOP; +COMMENT - OBSGEO-[XYZ] and OBSGEO-[LBH]; +COMMENT - TELAPSE and TSTOP-TSTART (END-BEG equivalents). +COMMENT Interpretation is undefined if there are any inconsistencies between +COMMENT them. +COMMENT +COMMENT The keycomments for OBSGEO-Y and OBSGEO-Z have been omitted +COMMENT deliberately for test purposes. +COMMENT ----------------------------------------------------------------------- + +TIMESYS = 'UTC' / Time scale +TREFPOS = 'TOPOCENTRE' / Time reference position, with OBSGEO-[XYZLBH] +TREFDIR = 'RA_NOM,DEC_NOM' / Time reference direction +PLEPHEM = 'DE405' / Ephemerides used for pathlength delays + +TIMEUNIT= 's' / Time units +DATEREF = '1957-02-14T15:00:00'/ ISO-8601 fiducial time +MJDREF = 35883.625000 / [d] MJD of fiducial time +MJDREFI = 35883 / [d] MJD of fiducial time, integer part +MJDREFF = 0.625000 / [d] MJD of fiducial time, fractional part +JDREF = 2435884.125000 / [d] JD of fiducial time +JDREFI = 2435884 / [d] JD of fiducial time, integer part +JDREFF = 0.125000 / [d] JD of fiducial time, fractional part +TIMEOFFS= 0.010 / [s] Clock correction + +DATE-OBS= '1957-02-14T15:00:00'/ ISO-8601 time of observation +MJD-OBS = 35883.625000 / [d] MJD of observation +JEPOCH = 1957.125598905 / [a] Julian epoch of observation +BEPOCH = 1957.125960663 / [a] Besselian epoch of observation + +DATE-BEG= '1957-02-14T15:00:00'/ ISO-8601 time at start of observation +MJD-BEG = 35883.625000 / [d] MJD at start of observation +TSTART = 0.0 / [s] Time elapsed since fiducial time at start + +DATE-AVG= '1957-02-14T16:48:00'/ ISO-8601 time at midpoint of observation +MJD-AVG = 35883.700000 / [d] MJD at midpoint of observation + +DATE-END= '1957-02-14T18:36:00'/ ISO-8601 time at end of observation +MJD-END = 35883.775000 / [d] MJD at end of observation +TSTOP = 12960.0 / [s] Time elapsed since fiducial time at end + +XPOSURE = 12960.0 / [s] Exposure (integration) time +TELAPSE = 12960.0 / [s] Elapsed time (start to stop) + +TIMSYER = 5E-5 / [s] Systematic error in time measurements +TIMRDER = 1E-9 / [s] Relative error in time measurements +TIMEDEL = 1.0 / [s] Time resolution +TIMEPIXR= 0.5 / Reference position of timestamp in binned data + +OBSGEO-X= -4554231.533 / [m] WGS84 coordinates of Parkes radiotelescope +OBSGEO-Y= 2816759.109 / +OBSGEO-Z= -3454036.323 +OBSGEO-L= 148.263510 / [deg] WGS84, IAU(1976) ellipsoid, longitude +OBSGEO-B= -32.998406 / [deg] WGS84, IAU(1976) ellipsoid, latitude +OBSGEO-H= 411.793 / [m] WGS84, IAU(1976) ellipsoid, height +OBSORBIT= 'sputnik-1957.eph' / Spacecraft orbit ephemeris file + +COMMENT ======================================================================= +COMMENT The following global auxiliary keywords are non-standard but widely +COMMENT used in particular fields of astronomy. They reside within the +COMMENT auxprm struct in wcsprm. Their presence here should cause that +COMMENT struct to be allocated and filled. +COMMENT ----------------------------------------------------------------------- + +RSUN_REF= 696E+6 / [m] Solar radius +DSUN_OBS= 150.7E+9 / [m] Distance from centre of Sun to observer +CRLN_OBS= 120.0 / [deg] Carrington heliographic lng of observer +HGLN_OBS= 0.0 / [deg] Stonyhurst heliographic lng of observer +HGLT_OBS= 7.25 / [deg] Heliographic latitude of the observer +A_RADIUS= 12.0E+7 / [m] Object ellipsoid semi-major axis +B_RADIUS= 11.0E+7 / [m] Object ellipsoid semi-intermediate axis +C_RADIUS= 10.0E+7 / [m] Object ellipsoid semi-minor axis +BLON_OBS= 155.0 / [deg] Bodycentric longitude of observer +BLAT_OBS= -33.0 / [deg] Bodycentric latitude of observer +BDIS_OBS= 137E+9 / [m] Bodycentric distance of observer + +END diff --git a/deps/wcslib/C/test/tbth1.c b/deps/wcslib/C/test/tbth1.c new file mode 100644 index 0000000..188b135 --- /dev/null +++ b/deps/wcslib/C/test/tbth1.c @@ -0,0 +1,290 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tbth1.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tbth1 tests wcsbth(), the WCS FITS parser for binary table headers, and +* wcsfix(), which translates non-standard constructs. It reads a test header +* and uses wcsprt() to print the resulting wcsprm structs. +* +* Input comes from file "bth.fits" using either fits_hdr2str() from CFITSIO +* if the DO_CFITSIO preprocessor is defined, or read directly using fgets() +* otherwise. +* +*---------------------------------------------------------------------------*/ + +#include + +#include +#include + +#if defined HAVE_CFITSIO && defined DO_CFITSIO +#include +#endif + +#include +#include +#include + +int main() + +{ + char infile[] = "bth.fits"; + char a, *hptr; + short alts[1000][28]; + int colsel[8], ctrl, ialt, iblock, icol, ifix, ikeyrec, iwcs, keysel, + nkeyrec, nreject, nwcs, relax, stat[NWCSFIX], status; + struct wcsprm *wcs; +#if defined HAVE_CFITSIO && defined DO_CFITSIO + char *header; + fitsfile *fptr; +#else + char keyrec[81], header[288001]; + int gotend, k; + FILE *fptr; +#endif + + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + printf("Testing WCSLIB parser for FITS binary table headers (tbth1.c)\n" + "-------------------------------------------------------------\n\n"); + + // Read in the FITS header, excluding COMMENT and HISTORY keyrecords. +#if defined HAVE_CFITSIO && defined DO_CFITSIO + status = 0; + if (fits_open_file(&fptr, infile, READONLY, &status)) { + fits_report_error(stderr, status); + return 1; + } + + if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { + fits_report_error(stderr, status); + return 1; + } + + fits_close_file(fptr, &status); +#else + if ((fptr = fopen(infile, "r")) == 0) { + fprintf(stderr, "ERROR opening %s\n", infile); + return 1; + } + + k = 0; + nkeyrec = 0; + gotend = 0; + for (iblock = 0; iblock < 100; iblock++) { + for (ikeyrec = 0; ikeyrec < 36; ikeyrec++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + if (strncmp(keyrec, " ", 8) == 0) continue; + if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; + if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; + + memcpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 8) == 0) { + // An END keyrecord was read, but read the rest of the block. + gotend = 1; + } + } + + if (gotend) break; + } + fclose(fptr); +#endif + + fprintf(stderr, "Found %d non-comment header keyrecords.\n\n", nkeyrec); + + + // Parse the header, allowing all recognized non-standard WCS keywords and + // usage. WCS keyrecords that are used are culled from the header, illegal + // ones are reported. + relax = WCSHDR_all; + ctrl = -2; + keysel = 0; + colsel[0] = 0; + + fprintf(stderr, "\nIllegal or extraneous WCS header keyrecords rejected " + "by wcsbth():\n"); + if ((status = wcsbth(header, nkeyrec, relax, ctrl, keysel, colsel, + &nreject, &nwcs, &wcs))) { + fprintf(stderr, "wcsbth ERROR %d: %s.\n", status, wcs_errmsg[status]); + } + if (!nreject) fprintf(stderr, "(none)\n"); + + + // List the remaining keyrecords. + printf("\n\nNon-WCS header keyrecords ignored by wcsbth():\n"); + hptr = header; + while (*hptr) { + printf("%.80s\n", hptr); + hptr += 80; + } +#if defined HAVE_CFITSIO && defined DO_CFITSIO + fits_free_memory(header, &status); +#endif + + + // Summarize what was found. + printf("\n\nExtracted %d coordinate description%s:\n", nwcs, + (nwcs == 1) ? "" : "s"); + + printf("\n Unattached image header(s)"); + status = wcsbdx(nwcs, &wcs, 0, alts); + if (alts[0][27]) { + printf(" with indices:\n -"); + for (a = 'A'; a <= 'Z'; a++) { + printf("%2c", a); + } + + printf("\n "); + for (ialt = 0; ialt < 27; ialt++) { + if (alts[0][ialt] < 0) { + printf(" -"); + } else { + printf("%2d", alts[0][ialt]); + } + } + printf("\n"); + } else { + printf(": (none)\n"); + } + + + printf("\n Binary table image array(s)"); + for (icol = 1; icol <= 999; icol++) { + if (alts[icol][27]) { + printf(" with indices:\n Col. -"); + for (a = 'A'; a <= 'Z'; a++) { + printf("%2c", a); + } + printf("\n"); + + for (icol = 1; icol <= 999; icol++) { + for (ialt = 0; ialt < 27; ialt++) { + if (alts[icol][ialt] >= 0) { + printf("%5d: ", icol); + for (ialt = 0; ialt < 27; ialt++) { + if (alts[icol][ialt] < 0) { + printf(" -"); + } else { + printf("%2d", alts[icol][ialt]); + } + } + printf("\n"); + break; + } + } + } + + icol = 9999; + } + } + + if (icol < 9999) { + printf(": (none)\n"); + } + + + printf("\n Pixel list(s)"); + status = wcsbdx(nwcs, &wcs, 1, alts); + for (icol = 1; icol <= 999; icol++) { + if (alts[icol][27]) { + printf(" with indices:\n Col. -"); + for (a = 'A'; a <= 'Z'; a++) { + printf("%2c", a); + } + printf("\n"); + + for (icol = 1; icol <= 999; icol++) { + for (ialt = 0; ialt < 27; ialt++) { + if (alts[icol][ialt] >= 0) { + printf("%5d: ", icol); + for (ialt = 0; ialt < 27; ialt++) { + if (alts[icol][ialt] < 0) { + printf(" -"); + } else { + printf("%2d", alts[icol][ialt]); + } + } + printf("\n"); + break; + } + } + } + + icol = 9999; + } + } + + if (icol < 9999) { + printf(": (none)\n"); + } + + + // Fix non-standard usage and print each of the wcsprm structs. + for (iwcs = 0; iwcs < nwcs; iwcs++) { + printf("\n------------------------------------" + "------------------------------------\n"); + + // Fix non-standard WCS keyvalues. + if ((status = wcsfix(7, 0, wcs+iwcs, stat))) { + printf("wcsfix ERROR, status returns: ("); + for (ifix = 0; ifix < NWCSFIX; ifix++) { + printf(ifix ? ", %d" : "%d", stat[ifix]); + } + printf(")\n\n"); + } + + if ((status = wcsset(wcs+iwcs))) { + fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); + continue; + } + + if ((status = wcsprt(wcs+iwcs))) { + fprintf(stderr, "wcsprt ERROR %d: %s.\n", status, wcs_errmsg[status]); + } + } + + status = wcsvfree(&nwcs, &wcs); + + + // Do it again to check that wcsbth() can handle multiple invokations. + printf("\nInvoking wcsbth() a second time on the same header...\n"); + ctrl = 0; + if ((status = wcsbth(header, nkeyrec, relax, 0, keysel, colsel, &nreject, + &nwcs, &wcs))) { + fprintf(stderr, "wcsbth ERROR %d: %s.\n", status, wcs_errmsg[status]); + } else { + printf("OK, extracted %d coordinate description%s.\n", nwcs, + (nwcs == 1) ? "" : "s"); + } + + return 0; +} diff --git a/deps/wcslib/C/test/tbth1.out b/deps/wcslib/C/test/tbth1.out new file mode 100644 index 0000000..f15616b --- /dev/null +++ b/deps/wcslib/C/test/tbth1.out @@ -0,0 +1,1291 @@ +Testing WCSLIB parser for FITS binary table headers (tbth1.c) +------------------------------------------------------------- + +Found 240 non-comment header keyrecords. + + +Illegal or extraneous WCS header keyrecords rejected by wcsbth(): +LONPOLEX= 180.0 / [deg] Native longitude of the NCP + Rejected (1), syntactically valid WCS keyrecord has no effect. +LATPOLEX= 999.0 / [deg] Native latitude of the NCP + Rejected (2), syntactically valid WCS keyrecord has no effect. +RESTFRQX= 1.42040575e9 / [Hz] HI rest frequency + Rejected (3), syntactically valid WCS keyrecord has no effect. +RESTWAVX= 0.211061141 / [m] HI rest wavelength + Rejected (4), syntactically valid WCS keyrecord has no effect. +WCSNAMEX= 'eXtraneous' / Name of this coordinate system + Rejected (5), syntactically valid WCS keyrecord has no effect. +RADESYSX= 'ICRS' / Mean equatorial coordinates, IAU 1984 system + Rejected (6), syntactically valid WCS keyrecord has no effect. +EQUINOXX= 2000.0 / [yr] Equinox of equatorial coordinates + Rejected (7), syntactically valid WCS keyrecord has no effect. +SPECSYSX= 'BARYCENT' / Reference frame of spectral coordinates + Rejected (8), syntactically valid WCS keyrecord has no effect. +SSYSOBSX= 'TOPOCENT' / Reference frame of observation + Rejected (9), syntactically valid WCS keyrecord has no effect. +VELOSYSX= 1500.0 / [m/s] Bary-topo velocity towards the source + Rejected (10), syntactically valid WCS keyrecord has no effect. +ZSOURCEX= 0.0025 / Redshift of the source + Rejected (11), syntactically valid WCS keyrecord has no effect. +SSYSSRCX= 'LSRK' / Reference frame of source redshift + Rejected (12), syntactically valid WCS keyrecord has no effect. +VELANGLX= 35.25 / [deg] Velocity orientation angle + Rejected (13), syntactically valid WCS keyrecord has no effect. + + +Non-WCS header keyrecords ignored by wcsbth(): +XTENSION= 'BINTABLE' / Binary table extension +BITPIX = 8 / 8-bit bytes +NAXIS = 2 / 2-dimensional binary table +NAXIS1 = 3330 / Width of table in bytes +NAXIS2 = 68 / Number of rows in table +PCOUNT = 0 / Size of special data area +GCOUNT = 1 / One data group (required keyword) +ALTRPIX = 0.0 / Alternate reference pixel (not handled) +ALTRVAL = 0.0 / Alternate reference value (not handled) +END + + +Extracted 5 coordinate descriptions: + + Unattached image header(s) with indices: + - 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 + 0 - - - - - - - - - - - - - - - - - - - - - - - - - - + + Binary table image array(s) with indices: + Col. - 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 + 33: - - - - - - - - - 1 - - - - - - - - - - - - - - - - - + 44: - - - - - - - - - 2 - - - - - - - - - - - - - - - - - + 77: - - 3 - - - - - - - - - - - - - - - - - - - - - - - - + + Pixel list(s) with indices: + Col. - 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 + 8: - - - - - - - - - - - - - - - - 4 - - - - - - - - - - + 9: - - - - - - - - - - - - - - - - 4 - - - - - - - - - - + 10: - - - - - - - - - - - - - - - - 4 - - - - - - - - - - + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + crval: 0x
+ 150.00 -30.000 1.3945e+09 1.0000 + cunit: 0x
+ "deg" + "deg" + "Hz" + "" + ctype: 0x
+ "RA---TAN" + "DEC--TAN" + "FREQ" + "STOKES" + lonpole: 180.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 0 + npvmax: 0 + pv: 0x0 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 15.000 0.0000 0.0000 + altlin: 4 + velref: 258 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "AIPS convention: TAN projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 1100 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x0 (= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.096593 -0.025882 -0.0000 -0.0000 +piximg[1][]: -0.025882 0.096593 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 62500. 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -9.6593 -2.5882 -0.0000 -0.0000 +imgpix[1][]: -2.5882 9.6593 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.6000e-05 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 180.00 -30.000 + prj: (see below) + euler: 150.00 120.00 180.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 103 + code: "TAN" + r0: 57.295780 + pv: (not used) + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "gnomonic" + category: 1 (zenithal) + pvrange: 0 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + crval: 0x
+ 150.00 -30.000 1.3945e+09 1.0000 + cunit: 0x
+ "deg" + "deg" + "Hz" + "" + ctype: 0x
+ "RA---TAN" + "DEC--TAN" + "FREQ" + "STOKES" + lonpole: 180.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 0 + npvmax: 0 + pv: 0x0 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 1 + velref: 0 + alt: 'I' + colnum: 33 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "All WCS keywords inherited except for this one" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 1100 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x0 (= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.096593 -0.025882 -0.0000 -0.0000 +piximg[1][]: -0.025882 0.096593 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 62500. 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -9.6593 -2.5882 -0.0000 -0.0000 +imgpix[1][]: -2.5882 9.6593 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.6000e-05 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 180.00 -30.000 + prj: (see below) + euler: 150.00 120.00 180.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 103 + code: "TAN" + r0: 57.295780 + pv: (not used) + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "gnomonic" + category: 1 (zenithal) + pvrange: 0 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + crval: 0x
+ 150.00 -30.000 1.3945e+09 1.0000 + cunit: 0x
+ "deg" + "deg" + "Hz" + "" + ctype: 0x
+ "RA---SIN" + "DEC--SIN" + "FREQ" + "STOKES" + lonpole: 180.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 0 + npvmax: 0 + pv: 0x0 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 0 + velref: 0 + alt: 'I' + colnum: 44 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "Most WCS keywords inherited" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 1100 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x0 (= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.096593 -0.025882 -0.0000 -0.0000 +piximg[1][]: -0.025882 0.096593 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 62500. 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -9.6593 -2.5882 -0.0000 -0.0000 +imgpix[1][]: -2.5882 9.6593 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.6000e-05 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 180.00 -30.000 + prj: (see below) + euler: 150.00 120.00 180.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 105 + code: "SIN" + r0: 57.295780 + pv: (0) + 0.0000 0.0000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "orthographic/synthesis" + category: 1 (zenithal) + pvrange: 102 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 0.0000 1.0000 -1.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + crval: 0x
+ 150.00 -30.000 0.21498 -2000.0 + cunit: 0x
+ "deg" + "deg" + "m" + "s" + ctype: 0x
+ "RA---SZP" + "DEC--SZP" + "WAVE-F2W" + "TIME" + lonpole: 195.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.211061 + npv: 7 + npvmax: 7 + pv: 0x
+ 1 1 0.0000 + 1 2 90.000 + 1 3 195.00 + 1 4 -30.000 + 2 1 0.0000 + 2 2 180.00 + 2 3 45.000 + nps: 1 + npsmax: 1 + ps: 0x
+ 4 0 UTC + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 1 + velref: 0 + alt: 'B' + colnum: 77 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Wavelength" + "Time offset" + crder: 0x
+ UNDEFINED UNDEFINED 1.0000e-11 UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED 1.0000e-12 UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "St'd representation: SZP projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.500000 2816759.109000 -3454036.300000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: "TOPOCENT" + velosys: 1500.000000000 + zsource: 0.002500000 + ssyssrc: "LSRK" + velangl: 0.000000000 + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: 3 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 4000 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.086603 -0.050000 -0.0000 -0.0000 +piximg[1][]: -0.050000 0.086603 0.0000 0.0000 +piximg[2][]: -0.0000 -0.0000 -9.6353e-06 -0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -8.6603 -5.0000 -0.0000 -0.0000 +imgpix[1][]: -5.0000 8.6603 0.0000 0.0000 +imgpix[2][]: -0.0000 -0.0000 -1.0379e+05 -0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 195.00 -30.000 + prj: (see below) + euler: 150.00 120.00 195.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 102 + code: "SZP" + r0: 57.295780 + pv: (0) + 0.0000 180.00 45.000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "slant zenithal perspective" + category: 1 (zenithal) + pvrange: 103 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 -0.0000 -0.0000 1.0000 -0.0000 + -0.0000 57.296 -1.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 110 + type: "WAVE" + code: "F2W" + crval: 0.21498 + restfrq: 1420405750.000000 + restwav: 0.211061 + pv: (not used) + w: 0.0000 1.3945e+09 -6.4866e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x
+ +------------------------------------------------------------------------ + flag: 137 + naxis: 3 + crpix: 0x
+ 513.00 513.00 1025.0 + pc: 0x
+ pc[0][]: -0.086603 -0.050000 0.0000 + pc[1][]: -0.050000 0.086603 0.0000 + pc[2][]: 0.0000 0.0000 -4.5652e-05 + cdelt: 0x
+ 1.0000 1.0000 1.0000 + crval: 0x
+ 150.00 -30.000 0.018577 + cunit: 0x
+ "deg" + "deg" + "" + ctype: 0x
+ "RA---ZPN" + "DEC--ZPN" + "ZOPT-F2W" + lonpole: 195.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.211061 + npv: 10 + npvmax: 10 + pv: 0x
+ 2 1 1.0000 + 2 3 0.33333 + 2 5 0.13333 + 2 7 0.053968 + 2 9 0.021869 + 2 11 0.0088632 + 2 13 0.0035921 + 2 15 0.0014558 + 2 17 0.00059003 + 2 19 0.00023913 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: -0.086603 -0.050000 0.0000 + cd[1][]: -0.050000 0.086603 0.0000 + cd[2][]: 0.0000 0.0000 -4.5652e-05 + crota: 0x
+ 0.0000 30.000 0.0000 + altlin: 6 + velref: 0 + alt: 'P' + colnum: 0 + colax: 0x
+ 8 9 10 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Redshift" + crder: 0x
+ UNDEFINED UNDEFINED 5.0000e-11 + csyer: 0x
+ UNDEFINED UNDEFINED 5.0000e-12 + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED + wcsname: "IRAF representation: ZPN projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.530000 2816759.109000 -3454036.300000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: "TOPOCENT" + velosys: 1500.000000000 + zsource: 0.002500000 + ssyssrc: "LSRK" + velangl: 0.000000000 + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 3 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 3 + crpix: 0x
+ 513.00 513.00 1025.0 + pc: 0x
+ pc[0][]: -0.086603 -0.050000 0.0000 + pc[1][]: -0.050000 0.086603 0.0000 + pc[2][]: 0.0000 0.0000 -4.5652e-05 + cdelt: 0x
+ 1.0000 1.0000 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.086603 -0.050000 0.0000 +piximg[1][]: -0.050000 0.086603 0.0000 +piximg[2][]: 0.0000 0.0000 -4.5652e-05 +imgpix[0][]: -8.6603 -5.0000 -0.0000 +imgpix[1][]: -5.0000 8.6603 0.0000 +imgpix[2][]: -0.0000 -0.0000 -21905. + i_naxis: 3 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 195.00 -30.000 + prj: (see below) + euler: 150.00 120.00 195.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 107 + code: "ZPN" + r0: 57.295780 + pv: 0.0000 + 1.0000 0.0000 0.33333 0.0000 0.13333 + 0.0000 0.053968 0.0000 0.021869 0.0000 + 0.0088632 0.0000 0.0035921 0.0000 0.0014558 + 0.0000 0.00059003 0.0000 0.00023913 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "zenithal/azimuthal polynomial" + category: 1 (zenithal) + pvrange: 30 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 1 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 3.1416 8.9006e+05 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 19 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 112 + type: "ZOPT" + code: "F2W" + crval: 0.018577 + restfrq: 1420405750.000000 + restwav: 0.211061 + pv: (not used) + w: 0.21106 1.3945e+09 -1.3691e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x
+ spxS2P: 0x
+ spxP2X: 0x
+ +Invoking wcsbth() a second time on the same header... +OK, extracted 0 coordinate descriptions. diff --git a/deps/wcslib/C/test/tcel1.c b/deps/wcslib/C/test/tcel1.c new file mode 100644 index 0000000..eaec5d3 --- /dev/null +++ b/deps/wcslib/C/test/tcel1.c @@ -0,0 +1,327 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tcel1.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tcel1 tests the spherical projection driver routines supplied with WCSLIB by +* drawing native and celestial coordinate graticules for Bonne's projection. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include + +int main() + +{ + char text[80]; + int ci, crval1, crval2, ilat, ilng, j, k, latpole, lonpole, stat[361], + status; + float xr[512], yr[512]; + double lat[181], lng[361], phi[361], theta[361], x[361], y[361]; + struct celprm native, celestial; + + + printf( + "Testing WCSLIB celestial coordinate transformation routines (tcel1.c)\n" + "---------------------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of cel status return values:\n"); + for (status = 1; status <= 6; status++) { + printf("%4d: %s.\n", status, cel_errmsg[status]); + } + + printf("\n"); + + + // Initialize. + celini(&native); + + // Reference angles for the native graticule (in fact, the defaults). + native.ref[0] = 0.0; + native.ref[1] = 0.0; + + // Set up Bonne's projection with conformal latitude at +35. + strcpy(native.prj.code, "BON"); + native.prj.pv[1] = 35.0; + + + // Celestial graticule. + celini(&celestial); + celestial.prj = native.prj; + + + // PGPLOT initialization. + strcpy(text, "/xwindow"); + cpgbeg(0, text, 1, 1); + + // Define pen colours. + cpgscr(0, 0.0f, 0.0f, 0.0f); + cpgscr(1, 1.0f, 1.0f, 0.0f); + cpgscr(2, 1.0f, 1.0f, 1.0f); + cpgscr(3, 0.5f, 0.5f, 0.8f); + cpgscr(4, 0.8f, 0.5f, 0.5f); + cpgscr(5, 0.8f, 0.8f, 0.8f); + cpgscr(6, 0.5f, 0.5f, 0.8f); + cpgscr(7, 0.8f, 0.5f, 0.5f); + cpgscr(8, 0.3f, 0.5f, 0.3f); + + // Define PGPLOT viewport. + cpgenv(-180.0f, 180.0f, -90.0f, 140.0f, 1, -2); + + // Loop over CRVAL2, LONPOLE, and LATPOLE with CRVAL1 incrementing by + // 15 degrees each time (it has an uninteresting effect). + crval1 = -180; + for (crval2 = -90; crval2 <= 90; crval2 += 30) { + for (lonpole = -180; lonpole <= 180; lonpole += 30) { + for (latpole = -1; latpole <= 1; latpole += 2) { + // For the celestial graticule, set the celestial coordinates of the + // reference point of the projection (which for Bonne's projection is + // at the intersection of the native equator and prime meridian), the + // native longitude of the celestial pole, and extra information + // needed to determine the celestial latitude of the native pole. + // These correspond to FITS keywords CRVAL1, CRVAL2, LONPOLE, and + // LATPOLE. + celestial.ref[0] = (double)crval1; + celestial.ref[1] = (double)crval2; + celestial.ref[2] = (double)lonpole; + celestial.ref[3] = (double)latpole; + + // Skip invalid values of LONPOLE. + if (celset(&celestial)) { + continue; + } + + // Skip redundant values of LATPOLE. + if (latpole == 1 && fabs(celestial.ref[3]) < 0.1) { + continue; + } + + // Buffer PGPLOT output. + cpgbbuf(); + cpgeras(); + + // Write a descriptive title. + sprintf(text, "Bonne's projection (BON) - 15 degree graticule"); + printf("\n%s\n", text); + cpgtext(-180.0f, -100.0f, text); + + sprintf(text, "centred on celestial coordinates (%7.2f,%6.2f)", + celestial.ref[0], celestial.ref[1]); + printf("%s\n", text); + cpgtext (-180.0f, -110.0f, text); + + sprintf(text, "with north celestial pole at native coordinates " + "(%7.2f,%7.2f)", celestial.ref[2], celestial.ref[3]); + printf("%s\n", text); + cpgtext(-180.0f, -120.0f, text); + + + // Draw the native graticule faintly in the background. + cpgsci(8); + + // Draw native meridians of longitude. + for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { + lat[j] = (double)ilat; + } + + for (ilng = -180; ilng <= 180; ilng += 15) { + lng[0] = (double)ilng; + if (ilng == -180) lng[0] = -179.99; + if (ilng == 180) lng[0] = 179.99; + + // Dash the longitude of the celestial pole. + if ((ilng-lonpole)%360 == 0) { + cpgsls(2); + cpgslw(5); + } + + cels2x(&native, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); + + k = 0; + for (j = 0; j < 181; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + cpgsls(1); + cpgslw(1); + } + + // Draw native parallels of latitude. + lng[0] = -179.99; + lng[360] = 179.99; + for (j = 1, ilng = -179; ilng < 180; ilng++, j++) { + lng[j] = (double)ilng; + } + + for (ilat = -90; ilat <= 90; ilat += 15) { + lat[0] = (double)ilat; + + cels2x(&native, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); + + k = 0; + for (j = 0; j < 361; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + } + + + // Draw a colour-coded celestial coordinate graticule. + ci = 1; + + // Draw celestial meridians of longitude. + for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { + lat[j] = (double)ilat; + } + + for (ilng = -180; ilng <= 180; ilng += 15) { + lng[0] = (double)ilng; + + if (++ci > 7) ci = 2; + cpgsci(ilng?ci:1); + + // Dash the reference longitude. + if ((ilng-crval1)%360 == 0) { + cpgsls(2); + cpgslw(5); + } + + cels2x(&celestial, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); + + k = 0; + for (j = 0; j < 181; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + // Test for discontinuities. + if (j > 0) { + if (fabs(x[j]-x[j-1]) > 4.0 || fabs(y[j]-y[j-1]) > 4.0) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + } + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + cpgsls(1); + cpgslw(1); + } + + // Draw celestial parallels of latitude. + for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { + lng[j] = (double)ilng; + } + + ci = 1; + for (ilat = -90; ilat <= 90; ilat += 15) { + lat[0] = (double)ilat; + + if (++ci > 7) ci = 2; + cpgsci(ilat?ci:1); + + // Dash the reference latitude. + if (ilat == crval2) { + cpgsls(2); + cpgslw(5); + } + + cels2x(&celestial, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); + + k = 0; + for (j = 0; j < 361; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + // Test for discontinuities. + if (j > 0) { + if (fabs(x[j]-x[j-1]) > 4.0 || fabs(y[j]-y[j-1]) > 4.0) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + } + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + cpgsls(1); + cpgslw(1); + } + + // Flush PGPLOT buffer. + cpgebuf(); + printf(" Type for next page: "); + getc(stdin); + + // Cycle through celestial longitudes. + if ((crval1 += 15) > 180) crval1 = -180; + + // Skip boring celestial latitudes. + if (crval2 == 0) break; + } + + if (crval2 == 0) break; + } + } + + cpgask(0); + cpgend(); + + return 0; +} diff --git a/deps/wcslib/C/test/tcel2.c b/deps/wcslib/C/test/tcel2.c new file mode 100644 index 0000000..e14ebc3 --- /dev/null +++ b/deps/wcslib/C/test/tcel2.c @@ -0,0 +1,582 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tcel2.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tcel2 thoroughly tests the WCSLIB celestial coordinate transformation +* routines, particularly celset(), by plotting oblique test grids for a wide +* variety of transformation parameters. A simple user interface provides +* limited control of the path taken through this parameter space. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include + +#define nint(x) ((int)(x + (((x) > 0.0) ? 0.5 : -0.5))) + +int main() + +{ + char answer[16], ctrl, text[128]; + int ci, crval1, crval1_j, crval2, crval2_i, first, ilat, ilng, iprj, j, + k, latpole, lonpole, lonpole_i, lonpole_j, phi_p, stat[361], status; + float xr[512], yr[512]; + double alpha_p, lat[181], lng[361], phi[361], theta[361], x[361], y[361]; + struct celprm native, celestial; + + + printf( + "Testing WCSLIB celestial coordinate transformation routines (tcel2.c)\n" + "---------------------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of cel status return values:\n"); + for (status = 1; status <= 6; status++) { + printf("%4d: %s.\n", status, cel_errmsg[status]); + } + + printf("\n\nLegend (in the order drawn)\n---------------------------\n"); + + printf("Native graticule in dark green with the meridian containing the " + "celestial\n pole (LONPOLE) thicker and in green. Also tagged " + "beyond the perimeter.\n"); + + printf("Celestial graticule colour-coded, the direction of increasing " + "celestial\n longitude and latitude is white -> blue -> red, " + "with the equator and\n prime meridian in yellow.\n"); + + printf("Celestial meridian (CRVAL1) and parallel (CRVAL2) through the " + "reference point\n is thicker and dashed.\n"); + + printf("Reference point of the projection (phi0,theta0) is marked with " + "a green circle\n with red centre. It should coincide with the " + "dashed celestial meridian and\n parallel.\n"); + + printf("Celestial pole (LONPOLE,LATPOLE) marked with a green circle with " + "black centre.\n"); + + printf("Celestial prime meridian expected for \"change of origin\" case " + "marked with\n an open yellow circle (where applicable). Should " + "coincide with the prime\n meridian.\n"); + + printf("\n\n"); + + printf("Loop control; LONPOLE changes fastest, then CRVAL1, then CRVAL2\n" + "---------------------------------------------------------------\n" + " next: do next plot\n" + " skip: skip past invalid values of LONPOLE\n" + " break: break out of inner loop on LONPOLE\n" + " continue: cycle through inner loop on LONPOLE\n"); + printf(" proj: skip to next projection\n" + " inc: LONPOLE++, preserving CRVAL1 & CRVAL2\n" + " jump: CRVAL2++, preserving CRVAL1 & LONPOLE\n" + " exit: terminate execution\n" + " quit: terminate execution\n" + "Capital letter kills query.\n"); + + printf("\n\n"); + + + // PGPLOT initialization. + strcpy(text, "/xwindow"); + cpgbeg(0, text, 1, 1); + + // Define pen colours. + cpgscr( 0, 0.0f, 0.0f, 0.0f); // Black + cpgscr( 1, 1.0f, 1.0f, 0.0f); // Yellow + cpgscr( 2, 1.0f, 1.0f, 1.0f); // White + cpgscr( 3, 0.5f, 0.5f, 0.8f); // Mauve + cpgscr( 4, 0.8f, 0.5f, 0.5f); // Pink + cpgscr( 5, 0.8f, 0.8f, 0.8f); // Grey + cpgscr( 6, 0.5f, 0.5f, 0.8f); // Mauve + cpgscr( 7, 0.8f, 0.5f, 0.5f); // Pink + cpgscr( 8, 0.3f, 0.5f, 0.3f); // Dark green + cpgscr( 9, 0.0f, 1.0f, 0.0f); // Green + cpgscr(10, 1.0f, 0.0f, 0.0f); // Red + + // Define PGPLOT viewport. + cpgenv(-195.0f, 195.0f, -195.0f, 195.0f, 1, -2); + cpgsch(0.8f); + + + ctrl = 'n'; + for (iprj = 0; iprj < 4; iprj++) { + // Initialize. + celini(&native); + celini(&celestial); + + // Reference coordinates for the native graticule. + if (iprj == 0) { + // Set up a zenithal equidistant projection. + strcpy(native.prj.code, "ARC"); + + native.ref[0] = 0.0; + native.ref[1] = 90.0; + native.ref[2] = 180.0; + + celestial.phi0 = 0.0; + celestial.theta0 = 90.0; + + } else if (iprj == 1) { + // Set up a conic equidistant projection. + strcpy(native.prj.code, "COD"); + native.prj.pv[1] = 45.0; + native.prj.pv[2] = 25.0; + + native.ref[0] = 0.0; + native.ref[1] = 45.0; + native.ref[2] = 180.0; + + celestial.phi0 = 60.0; + celestial.theta0 = 45.0; + + } else if (iprj == 2) { + // Set up a Sanson-Flamsteed projection as Bonne's equatorial. + strcpy(native.prj.code, "BON"); + native.prj.pv[1] = 0.0; + + native.ref[0] = 0.0; + native.ref[1] = 0.0; + native.ref[2] = 0.0; + + celestial.phi0 = -30.0; + celestial.theta0 = 0.0; + + } else if (iprj == 3) { + // Set up a polyconic projection. + strcpy(native.prj.code, "PCO"); + + native.ref[0] = 0.0; + native.ref[1] = 0.0; + native.ref[2] = 0.0; + + celestial.phi0 = -60.0; + celestial.theta0 = -90.0; + } + + // Copy projection parameters. + strcpy(celestial.prj.code, native.prj.code); + celestial.prj.pv[1] = native.prj.pv[1]; + celestial.prj.pv[2] = native.prj.pv[2]; + + // Loop over CRVAL2, CRVAL1 and LONPOLE. + crval1_j = -180; + crval2_i = 45; + lonpole_i = 15; + lonpole_j = -180; + for (crval2 = -90; crval2 <= 90; crval2 += crval2_i) { + for (crval1 = -180; crval1 <= 180; crval1 += 90) { + first = 1; + for (lonpole = -180; lonpole <= 180; lonpole += lonpole_i) { + // lonpole = 999; + latpole = 999; + + // if (crval2 < 0) latpole = -999; + // if (crval2 > 0) latpole = 999; + + if (ctrl == 'j' || ctrl == 'J') { + // Restore CRVAL1 and LONPOLE from last time. + crval1 = crval1_j; + lonpole = lonpole_j; + } + + celestial.ref[0] = (double)crval1; + celestial.ref[1] = (double)crval2; + celestial.ref[2] = (double)lonpole; + celestial.ref[3] = (double)latpole; + + // Buffer PGPLOT output. + cpgbbuf(); + cpgeras(); + cpgsci(2); + + // Write parameter summary. + sprintf(text, "(CRVAL1, CRVAL2, LONPOLE): (%+3.3d, %+2.2d, %+3.3d)", + crval1, crval2, lonpole); + cpgtext(-180.0f, 200.0f, text); + + // Skip invalid values of LONPOLE. + if (celset(&celestial)) { + sprintf(text, "INVALID VALUE OF LONPOLE (= %+3.3d)", lonpole); + cpgtext(-90.0f, 0.0f, text); + + sprintf(text, "%s projection, (\\gf\\d0\\u,\\gh\\d0\\u) = " + "(%+3.3d, %+2.2d)", native.prj.code, nint(celestial.phi0), + nint(celestial.theta0)); + cpgtext(-180.0f, -200.0f, text); + + if (ctrl == 's' || ctrl == 'S') { + cpgebuf(); + continue; + } + + goto skip; + } + + // Write parameters. + sprintf(text, "%s projection, (\\gf\\d0\\u,\\gh\\d0\\u) = " + "(%+3.3d, %+2.2d) - green circle with red centre", + native.prj.code, nint(celestial.phi0), + nint(celestial.theta0)); + cpgtext(-180.0f, -200.0f, text); + + sprintf(text, "(CRVAL1, CRVAL2): (%+3.3d, %+2.2d) - dashed grid" + " lines", nint(celestial.ref[0]), nint(celestial.ref[1])); + cpgtext(-180.0f, -213.0f, text); + + sprintf(text, "(LONPOLE, LATPOLE): (%+3.3d, %+3.3d) -> " + "(%+3.3d, %+2.2d) - open green circle", lonpole, latpole, + nint(celestial.ref[2]), nint(celestial.ref[3])); + cpgtext(-180.0f, -226.0f, text); + + sprintf(text, "(\\ga\\dp\\u, \\gd\\dp\\u): (%+3.3d, %+2.2d)", + nint(celestial.euler[0]), nint(90.0-celestial.euler[1])); + cpgtext(-180.0f, -239.0f, text); + + if (celestial.latpreq == 0) { + sprintf(text, "(LATPOLE not required.)"); + } else if (celestial.latpreq == 1) { + sprintf(text, "(LATPOLE disambiguates.)"); + } else if (celestial.latpreq == 2) { + sprintf(text, "(LATPOLE IS DEFINITIVE.)"); + } + cpgtext(-40.0f, -239.0f, text); + + + // Draw the native graticule in the background (dark green). + cpgsci(8); + + // Draw native meridians of longitude. + for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { + lat[j] = (double)ilat; + } + + phi_p = nint(celestial.ref[2]); + for (ilng = -180; ilng <= 180; ilng += 15) { + lng[0] = (double)ilng; + if (ilng == -180) lng[0] = -179.99; + if (ilng == 180) lng[0] = 179.99; + + // Meridian containing the celestial pole (thick green). + if (ilng == phi_p) { + cpgslw(5); + cpgsci(9); + } + + cels2x(&native, 1, 181, 1, 1, lng, lat, phi, theta, x, y, stat); + + k = 0; + for (j = 0; j < 181; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + cpgslw(1); + cpgsci(8); + } + + // Draw native parallels of latitude. + lng[0] = -179.99; + lng[360] = 179.99; + for (j = 1, ilng = -179; ilng < 180; ilng++, j++) { + lng[j] = (double)ilng; + } + + for (ilat = -90; ilat <= 90; ilat += 15) { + lat[0] = (double)ilat; + + cels2x(&native, 361, 1, 1, 1, lng, lat, phi, theta, x, y, stat); + + k = 0; + for (j = 0; j < 361; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + } + + // Tag the longitude of the celestial pole. + cpgslw(5); + cpgsci(9); + phi[0] = celestial.ref[2]; + theta[0] = -90.0; + theta[1] = -80.0; + prjs2x(&(native.prj), 1, 2, 1, 1, phi, theta, x, y, stat); + xr[0] = -x[0]; + yr[0] = y[0]; + xr[1] = -x[0] + (x[1] - x[0]); + yr[1] = y[0] - (y[1] - y[0]); + cpgline(2, xr, yr); + + + // Draw a colour-coded celestial coordinate graticule. + ci = 1; + + // Draw celestial meridians of longitude. + for (j = 0, ilat = -90; ilat <= 90; ilat++, j++) { + lat[j] = (double)ilat; + } + + for (ilng = -180; ilng <= 180; ilng += 15) { + lng[0] = (double)ilng; + + // Cycle through colours with the prime meridian in yellow. + if (++ci > 7) ci = 2; + cpgsci(ilng?ci:1); + + // Dash the reference longitude and make it thicker. + if ((ilng-crval1)%360 == 0) { + cpgsls(2); + cpgslw(5); + } + + cels2x(&celestial, 1, 181, 1, 1, lng, lat, phi, theta, x, y, + stat); + + k = 0; + for (j = 0; j < 181; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + // Test for discontinuities. + if (j > 0) { + if (fabs(phi[j]-phi[j-1]) > 15.0) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + } + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + cpgsls(1); + cpgslw(1); + } + + // Draw celestial parallels of latitude. + for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { + lng[j] = (double)ilng; + } + + ci = 1; + for (ilat = -90; ilat <= 90; ilat += 15) { + lat[0] = (double)ilat; + + // Cycle through colours with the prime meridian in yellow. + if (++ci > 7) ci = 2; + cpgsci(ilat?ci:1); + + // Dash the reference latitude and make it thicker. + if (ilat == crval2) { + cpgsls(2); + cpgslw(5); + } + + cels2x(&celestial, 361, 1, 1, 1, lng, lat, phi, theta, x, y, + stat); + + k = 0; + for (j = 0; j < 361; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + // Test for discontinuities. + if (j > 0) { + if (fabs(phi[j]-phi[j-1]) > 15.0) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + } + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + cpgsls(1); + cpgslw(1); + } + + // Mark the fiducial point (green with red centre). + phi[0] = celestial.phi0; + theta[0] = celestial.theta0; + prjs2x(&(native.prj), 1, 1, 1, 1, phi, theta, x, y, stat); + xr[0] = -x[0]; + yr[0] = y[0]; + + cpgslw(5); + cpgsci(9); + cpgpt1(xr[0], yr[0], 24); + cpgpt1(xr[0], yr[0], 23); + cpgsci(10); + cpgpt1(xr[0], yr[0], 17); + + // Mark the celestial pole. + phi[0] = celestial.ref[2]; + theta[0] = celestial.ref[3]; + prjs2x(&(native.prj), 1, 1, 1, 1, phi, theta, x, y, stat); + xr[0] = -x[0]; + yr[0] = y[0]; + + cpgslw(5); + cpgsci(9); + cpgpt1(xr[0], yr[0], 24); + cpgpt1(xr[0], yr[0], 23); + cpgsci(0); + cpgpt1(xr[0], yr[0], 17); + + // Mark zero celestial longitude expected for "change of origin" + // case with a thick yellow circle. + if (celestial.euler[1] == 0.0 || celestial.euler[1] == 180.0) { + if (celestial.theta0 == 90.0) { + alpha_p = celestial.ref[0]; + } else if (fabs(celestial.ref[1]) == 90.0) { + alpha_p = celestial.ref[0]; + } else if (celestial.euler[1] == 0.0) { + alpha_p = celestial.ref[0] + celestial.ref[2] - + celestial.phi0 - 180.0; + } else { + alpha_p = celestial.ref[0] - celestial.ref[2] + + celestial.phi0; + } + + if (celestial.euler[1] == 0.0) { + phi[0] = celestial.euler[2] - alpha_p + 180.0; + } else { + phi[0] = celestial.euler[2] + alpha_p; + } + + phi[0] = fmod(phi[0], 360.0); + if (phi[0] < -180.0) { + phi[0] += 360.0; + } else if (phi[0] > 180.0) { + phi[0] -= 360.0; + } + + theta[0] = -45.0; + prjs2x(&(native.prj), 1, 1, 1, 1, phi, theta, x, y, stat); + xr[0] = -x[0]; + yr[0] = y[0]; + + cpgslw(5); + cpgsci(1); + cpgpt1(xr[0], yr[0], 24); + } + + cpgslw(1); + + // Flush PGPLOT buffer. + skip: + cpgebuf(); + if ((ctrl >= 'A' && ctrl <= 'Z') || + ((ctrl == 'c' || ctrl == 'b' || ctrl == 'j') && !first)) { + // Keep going. + + } else { + printf("Next, skip, break, continue, exit [%c]: ", ctrl); + if (fgets(answer, 16, stdin) == 0) answer[0] = 0; + + if (strchr("bBcCeEiIjJnNpPqQsS", (int)answer[0]) != 0) { + ctrl = answer[0]; + } + } + + if (ctrl == 'i' || ctrl == 'I') { + lonpole_i = 1; + } else { + lonpole_i = 15; + } + + if (ctrl == 'P') { + // There's no point in skipping all projections. + ctrl = 'p'; + break; + } + + if (ctrl == 'p') break; + if (ctrl == 'b' || ctrl == 'B') break; + if (ctrl == 'j' || ctrl == 'J') break; + if (ctrl == 'e' || ctrl == 'E') goto end; + if (ctrl == 'q' || ctrl == 'Q') goto end; + + first = 0; + } + + if (ctrl == 'p') break; + if (ctrl == 'j' || ctrl == 'J') break; + } + + if (ctrl == 'p') break; + if (ctrl == 'j' || ctrl == 'J') { + // Save CRVAL1 and LONPOLE for next time. + crval1_j = crval1; + lonpole_j = lonpole; + + // Slow down CRVAL2. + crval2_i = 1; + } else { + crval2_i = 45; + } + } + + celfree(&native); + celfree(&celestial); + } + +end: + cpgask(0); + cpgend(); + + return 0; +} diff --git a/deps/wcslib/C/test/tdis1.c b/deps/wcslib/C/test/tdis1.c new file mode 100644 index 0000000..09b7728 --- /dev/null +++ b/deps/wcslib/C/test/tdis1.c @@ -0,0 +1,612 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tdis1.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tdis1 tests the WCSLIB distortion functions for closure. Input comes from +* the FITS file specified as an argument, which must contain a 2D image, or +* else from TPV7.fits. The test is done via linp2x() and linx2p(). +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#define HEADER_SIZE 36000 + +int tpv2poly(struct wcsprm *wcs); + +// Absolute and fractional tolerance. Distortions are typically used on +// large images, so the absolute tolerance in the corners may not be very +// high, simply due to floating point precision. +const double ATOL = 1.0e-9; +const double FTOL = 1.0e-10; + + +int main(int argc, char *argv[]) + +{ + char *infile = "TPV7.fits"; + + char keyrec[81], header[288001], *disfn; + int dopoly, gotend, iblock, ikeyrec, inc, itest, j, k, n, naxis[2], naxis1, + naxis2, nClosure, nFail, nkeyrec, nsamp, nreject, nTest, nwcs, p1, p2, + status; + clock_t t0, tp2x, tx2p; + double absmax, dp1, dp2, *img, *img1, *img2, pix[8], pixblc[2], pixsamp[2], + pixtrc[2], px, *px0, *px1, pxi[8], rel, resid, relmax; + double *avgdis, *avgtot, *maxdis, *maxtot, *rmsdis, *rmstot, stats[9]; + FILE *fptr; + struct linprm affine, *lin, *linpol, *lintpv; + struct wcsprm *wcs, wcspol; + + + wcserr_enable(1); + wcsprintf_set(stdout); + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + wcsprintf("Testing closure of WCSLIB distortion routines (tdis1.c)\n" + "-------------------------------------------------------\n"); + + // List status return messages. + wcsprintf("\nList of dis status return values:\n"); + for (status = 1; status <= 5; status++) { + wcsprintf("%4d: %s.\n", status, dis_errmsg[status]); + } + wcsprintf("\n"); + + // Optional file name specified? + if (1 < argc) { + infile = argv[1]; + } + + + // Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + if ((fptr = fopen(infile, "r")) == 0) { + wcsprintf("ERROR opening %s\n", infile); + return 1; + } + + memset(naxis, 0, 2*sizeof(int)); + + k = 0; + nkeyrec = 0; + gotend = 0; + for (iblock = 0; iblock < 100; iblock++) { + for (ikeyrec = 0; ikeyrec < 36; ikeyrec++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + if (strncmp(keyrec, " ", 8) == 0) continue; + if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; + if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; + + if (strncmp(keyrec, "NAXIS", 5) == 0) { + if (keyrec[5] == ' ') { + sscanf(keyrec+10, "%d", &n); + if (n != 2) { + wcsprintf("ERROR, expecting a 2D image.\n"); + return 1; + } + continue; + } + + sscanf(keyrec+5, "%d = %d", &j, &n); + naxis[j-1] = n; + continue; + } + + memcpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 10) == 0) { + // An END keyrecord was read, but read the rest of the block. + gotend = 1; + } + } + + if (gotend) break; + } + fclose(fptr); + + + // Parse the header. + if ((wcspih(header, nkeyrec, WCSHDR_none, 2, &nreject, &nwcs, &wcs))) { + wcsperr(wcs, 0x0); + return 1; + } + + // Is it TPV? + dopoly = 0; + if (strcmp(wcs->ctype[0], "RA---TPV") == 0) { + // Copy it and translate to Polynomial for later use. + wcspol.flag = -1; + if (wcscopy(1, wcs, &wcspol)) { + wcsperr(wcs, 0x0); + return 1; + } + + // Translate TPV to Polynomial. + tpv2poly(&wcspol); + + wcspol.flag = -1; + if (wcsset(&wcspol)) { + wcsperr(&wcspol, 0x0); + return 1; + } + + dopoly = 1; + } + + + // wcsset() translates the TPV "projection" into a sequent distortion. + if (wcsset(wcs)) { + wcsperr(wcs, 0x0); + return 1; + } + + // Henceforth, we will work with linprm. + lin = &(wcs->lin); + + // Get statistics on the distortion in the inner quarter of the image. + maxdis = stats; + maxtot = maxdis + 2; + avgdis = maxtot + 1; + avgtot = avgdis + 2; + rmsdis = avgtot + 1; + rmstot = rmsdis + 2; + + pixblc[0] = 0.25 * naxis[0]; + pixblc[1] = 0.25 * naxis[1]; + pixtrc[0] = 0.75 * naxis[0]; + pixtrc[1] = 0.75 * naxis[1]; + pixsamp[0] = (pixtrc[0] - pixblc[0])/512.0; + pixsamp[1] = (pixtrc[1] - pixblc[1])/512.0; + if (pixsamp[0] < 1.0) pixsamp[0] = 1.0; + if (pixsamp[1] < 1.0) pixsamp[1] = 1.0; + + if (linwarp(lin, pixblc, pixtrc, pixsamp, &nsamp, + maxdis, maxtot, avgdis, avgtot, rmsdis, rmstot)) { + linperr(lin, 0x0); + return 1; + } + + for (k = 0; k < 9; k++) { + if (fabs(stats[k]) < 0.0005) stats[k] = 0.0; + } + + wcsprintf("linwarp() statistics computed over %d sample points:\n" + " Max distortion, axis 1: %8.3f pixels\n" + " axis 2: %8.3f pixels\n" + " total: %8.3f pixels\n" + " Mean distortion, axis 1: %8.3f pixels\n" + " axis 2: %8.3f pixels\n" + " total: %8.3f pixels\n" + " RMS distortion, axis 1: %8.3f pixels\n" + " axis 2: %8.3f pixels\n" + " total: %8.3f pixels\n", + nsamp, maxdis[0], maxdis[1], *maxtot, + avgdis[0], avgdis[1], *avgtot, + rmsdis[0], rmsdis[1], *rmstot); + + if (lin->disseq) { + // Exercise diswarp() as well. + wcsprintf("\n"); + + // Define a rectangle in intermediate pixel coordinates that just + // encompasses the inner quarter of the image. For this we need + // to switch off CDELTia scaling and all distortions. + affine.flag = -1; + if ((status = lincpy(1, lin, &affine))) { + linperr(lin, 0x0); + return 1; + } + + affine.cdelt[0] = 1.0; + affine.cdelt[1] = 1.0; + if ((status = (lindis(1, &affine, 0x0) || + lindis(2, &affine, 0x0) || + linset(&affine)))) { + linperr(&affine, 0x0); + return 1; + } + + pix[0] = pixblc[0]; + pix[1] = pixblc[1]; + pix[2] = pixtrc[0]; + pix[3] = pixblc[1]; + pix[4] = pixtrc[0]; + pix[5] = pixtrc[1]; + pix[6] = pixblc[0]; + pix[7] = pixtrc[1]; + if (linp2x(&affine, 4, 2, pix, pxi)) { + linperr(&affine, 0x0); + return 1; + } + + linfree(&affine); + + pixblc[0] = pxi[0]; + pixblc[1] = pxi[1]; + pixtrc[0] = pxi[0]; + pixtrc[1] = pxi[1]; + k = 2; + for (j = 1; j < 4; j++) { + if (pixblc[0] > pxi[k]) pixblc[0] = pxi[k]; + if (pixtrc[0] < pxi[k]) pixtrc[0] = pxi[k]; + k++; + if (pixblc[1] > pxi[k]) pixblc[1] = pxi[k]; + if (pixtrc[1] < pxi[k]) pixtrc[1] = pxi[k]; + k++; + } + + pixsamp[0] = (pixtrc[0] - pixblc[0])/512.0; + pixsamp[1] = (pixtrc[1] - pixblc[1])/512.0; + + if (diswarp(lin->disseq, pixblc, pixtrc, pixsamp, &nsamp, + maxdis, maxtot, avgdis, avgtot, rmsdis, rmstot)) { + wcserr_prt(lin->disseq->err, 0x0); + return 1; + } + + for (k = 0; k < 9; k++) { + if (fabs(stats[k]) < 0.0005) stats[k] = 0.0; + } + + wcsprintf("diswarp() statistics computed over %d sample points:\n" + " Max distortion, axis 1: %8.3f units\n" + " axis 2: %8.3f units\n" + " total: %8.3f units\n" + " Mean distortion, axis 1: %8.3f units\n" + " axis 2: %8.3f units\n" + " total: %8.3f units\n" + " RMS distortion, axis 1: %8.3f units\n" + " axis 2: %8.3f units\n" + " total: %8.3f units\n", + nsamp, maxdis[0], maxdis[1], *maxtot, + avgdis[0], avgdis[1], *avgtot, + rmsdis[0], rmsdis[1], *rmstot); + } + + + // The image size determines the test domain. + if ((naxis1 = naxis[0]) == 0) { + naxis1 = 2*wcs->crpix[0] + 1; + } + if ((naxis2 = naxis[1]) == 0) { + naxis2 = 2*wcs->crpix[1] + 1; + } + + // Limit the number of tests. + inc = 1; + while ((naxis1/inc)*(naxis2/inc) > 800000) { + inc *= 2; + } + + n = naxis1 / inc; + px0 = calloc(4*(2*n), sizeof(double)); + px1 = px0 + 2*n ; + img = px1 + 2*n ; + img1 = img; + img2 = img + 2*n; + + for (itest = 0; itest < 2; itest++) { + if (itest) { + if (!dopoly) break; + + lin = &(wcspol.lin); + } + + if (lin->dispre) { + disfn = lin->dispre->dtype[0]; + } else if (lin->disseq) { + disfn = lin->disseq->dtype[0]; + } else { + disfn = 0x0; + } + + wcsprintf("\n"); + + // Now the closure test. + tp2x = 0; + tx2p = 0; + nTest = 0; + nFail = 0; + nClosure = 0; + absmax = 0.0; + relmax = 0.0; + for (p2 = 1; p2 <= naxis2; p2 += inc) { + k = 0; + for (p1 = 1; p1 <= naxis1; p1 += inc) { + px0[k++] = (double)p1; + px0[k++] = (double)p2; + } + + t0 = clock(); + if (linp2x(lin, n, 2, px0, img)) { + linperr(lin, 0x0); + nFail = 1; + break; + } + tp2x += clock() - t0; + + t0 = clock(); + if (linx2p(lin, n, 2, img, px1)) { + linperr(lin, 0x0); + nFail = 1; + break; + } + tx2p += clock() - t0; + + // Check closure. + k = 0; + for (k = 0; k < 2*n ; k += 2) { + dp1 = fabs(px1[k] - px0[k]); + dp2 = fabs(px1[k+1] - px0[k+1]); + + resid = (dp1 > dp2) ? dp1 : dp2; + if (resid > absmax) absmax = resid; + + if (resid > ATOL) { + nClosure++; + wcsprintf("Absolute closure error:\n"); + wcsprintf(" pix: %18.12f %18.12f\n", px0[k], px0[k+1]); + wcsprintf(" -> img: %18.12f %18.12f\n", img[k], img[k+1]); + wcsprintf(" -> pix: %18.12f %18.12f\n", px1[k], px1[k+1]); + wcsprintf("\n"); + continue; + } + + resid = 0.0; + if ((px = fabs(px0[k])) > 1.0) resid = dp1/px; + if ((px = fabs(px0[k+1])) > 1.0) { + if ((rel = dp2/px) > resid) resid = rel; + } + if (resid > relmax) relmax = resid; + + if (resid > FTOL) { + nClosure++; + wcsprintf("Relative closure error:\n"); + wcsprintf(" pix: %18.12f %18.12f\n", px0[k], px0[k+1]); + wcsprintf(" -> img: %18.12f %18.12f\n", img[k], img[k+1]); + wcsprintf(" -> pix: %18.12f %18.12f\n", px1[k], px1[k+1]); + wcsprintf("\n"); + } + } + + nTest += n; + } + + if (nFail) { + wcsprintf("\nFAIL: The %s test failed to complete.\n", disfn); + + } else { + wcsprintf("linp2x/linx2p with %s distortions:\n" + " Completed %d closure tests.\n" + " Maximum absolute closure residual = %.2e pixel.\n" + " Maximum relative closure residual = %.2e.\n", disfn, + nTest, absmax, relmax); + wcsprintf("\n"); + + wcsprintf(" linp2x time (ns): %6.0f\n linx2p time (ns): %6.0f\n\n", + 1.0e9*((double)tp2x/CLOCKS_PER_SEC)/nTest, + 1.0e9*((double)tx2p/CLOCKS_PER_SEC)/nTest); + + if (nClosure) { + wcsprintf("FAIL: %d closure residuals exceed reporting tolerance.\n", + nClosure); + + } else { + wcsprintf("PASS: All %s closure residuals are within reporting " + "tolerance.\n", disfn); + } + } + } + + + // Compare TPV with Polynomial over the test domain. + if (dopoly) { + wcsprintf("\n"); + + nTest = 0; + nFail = 0; + absmax = 0.0; + lintpv = &(wcs->lin); + linpol = &(wcspol.lin); + for (p2 = 1; p2 <= naxis2; p2 += inc) { + k = 0; + for (p1 = 1; p1 <= naxis1; p1 += inc) { + px0[k++] = (double)p1; + px0[k++] = (double)p2; + } + + if (linp2x(lintpv, n, 2, px0, img1)) { + linperr(lintpv, 0x0); + break; + } + + if (linp2x(linpol, n, 2, px0, img2)) { + linperr(linpol, 0x0); + break; + } + + // Check agreement. + k = 0; + for (k = 0; k < 2*n ; k += 2) { + dp1 = fabs(img2[k] - img1[k]); + dp2 = fabs(img2[k+1] - img1[k+1]); + + resid = (dp1 > dp2) ? dp1 : dp2; + if (resid > absmax) absmax = resid; + + if (resid > ATOL) { + nFail++; + wcsprintf("TPV - Polynomial disagreement:\n"); + wcsprintf(" pix: %18.12f %18.12f\n", px0[k], px0[k+1]); + wcsprintf(" -> TPV: %18.12f %18.12f\n", img1[k], img1[k+1]); + wcsprintf(" -> Pol: %18.12f %18.12f\n", img2[k], img2[k+1]); + wcsprintf("\n"); + continue; + } + } + + nTest += n; + } + + wcsprintf("linp2x, TPV vs Polynomial distortions:\n" + " Completed %d comparisons.\n" + " Maximum absolute disagreement = %.2e units.\n", nTest, absmax); + wcsprintf("\n"); + + if (nFail) { + wcsprintf("FAIL: %d comparisons exceed reporting tolerance.\n", nFail); + + } else { + wcsprintf("PASS: All TPV vs Polynomial comparisons are within " + "reporting tolerance.\n"); + } + } + + + free(px0); + wcsvfree(&nwcs, &wcs); + wcsfree(&wcspol); + + return nFail || nClosure; +} + +/*---------------------------------------------------------------------------- +* Translate a TPV "projection" to a general Polynomial distortion. Must be +* done before wcsset() which automatically translates PVi_ma keyvalues to a +* TPV distortion and elides them. +----------------------------------------------------------------------------*/ + +int tpv2poly(struct wcsprm *wcs) + +{ + const int tpvpow[40][3] = { + {0, 0, 0}, {1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {2, 0, 0}, // 0 - 4 + {1, 1, 0}, {0, 2, 0}, {3, 0, 0}, {2, 1, 0}, {1, 2, 0}, // 5 - 9 + {0, 3, 0}, {0, 0, 3}, {4, 0, 0}, {3, 1, 0}, {2, 2, 0}, // 10 - 14 + {1, 3, 0}, {0, 4, 0}, {5, 0, 0}, {4, 1, 0}, {3, 2, 0}, // 15 - 19 + {2, 3, 0}, {1, 4, 0}, {0, 5, 0}, {0, 0, 5}, {6, 0, 0}, // 20 - 24 + {5, 1, 0}, {4, 2, 0}, {3, 3, 0}, {2, 4, 0}, {1, 5, 0}, // 25 - 29 + {0, 6, 0}, {7, 0, 0}, {6, 1, 0}, {5, 2, 0}, {4, 3, 0}, // 30 - 34 + {3, 4, 0}, {2, 5, 0}, {1, 6, 0}, {0, 7, 0}, {0, 0, 7}}; // 35 - 39 + + char dqi[16], dqifield[40]; + int i, k, m, naux, nterms; + struct disprm *dis; + struct dpkey *keyp; + + // Attach a disprm struct to linprm. Also inits it. + if ((dis = calloc(1, sizeof(struct disprm))) == 0x0) { + return 1; + } + + // Set values in the disprm struct. + dis->flag = -1; + disndp(24 + 3*wcs->npv); + lindis(2, &(wcs->lin), dis); + + + // The asterisk after the name prevents translation to TPD. + sprintf(dis->dtype[0], "Polynomial*"); + sprintf(dis->dtype[1], "Polynomial*"); + + keyp = dis->dp; + for (i = 1; i <= 2; i++) { + // Glean essential information from the PVi_ma. + naux = 0; + nterms = 0; + for (k = 0; k < wcs->npv; k++) { + if (wcs->pv[k].i != i) continue; + + m = wcs->pv[k].m; + if (tpvpow[m][2]) naux = 1; + nterms++; + } + + // Distortion parameters for axis i. + sprintf(dqi, "DQ%d", i); + dpfill(keyp++, dqi, "NAXES", i, 0, 2, 0.0); + dpfill(keyp++, dqi, "AXIS.1", i, 0, (i==1)?1:2, 0.0); + dpfill(keyp++, dqi, "AXIS.2", i, 0, (i==1)?2:1, 0.0); + dpfill(keyp++, dqi, "DOCORR", i, 0, 0, 0.0); + + if (naux) { + dpfill(keyp++, dqi, "NAUX", i, 0, 1, 0.0); + dpfill(keyp++, dqi, "AUX.1.COEFF.0", i, 1, 0, 0.0); + dpfill(keyp++, dqi, "AUX.1.POWER.0", i, 1, 0, 0.5); + dpfill(keyp++, dqi, "AUX.1.COEFF.1", i, 1, 0, 1.0); + dpfill(keyp++, dqi, "AUX.1.POWER.1", i, 1, 0, 2.0); + dpfill(keyp++, dqi, "AUX.1.COEFF.2", i, 1, 0, 1.0); + dpfill(keyp++, dqi, "AUX.1.POWER.2", i, 1, 0, 2.0); + } + dpfill(keyp++, dqi, "NTERMS", i, 0, nterms, 0.0); + + nterms = 0; + for (k = 0; k < wcs->npv; k++) { + if (wcs->pv[k].i != i) continue; + + sprintf(dqifield, "%s.TERM.%d", dqi, ++nterms); + dpfill(keyp++, dqifield, "COEFF", i, 1, 0, wcs->pv[k].value); + + m = wcs->pv[k].m; + if (tpvpow[m][0]) { + dpfill(keyp++, dqifield, "VAR.1", i, 1, 0, (double)tpvpow[m][0]); + } + + if (tpvpow[m][1]) { + dpfill(keyp++, dqifield, "VAR.2", i, 1, 0, (double)tpvpow[m][1]); + } + + if (tpvpow[m][2]) { + dpfill(keyp++, dqifield, "AUX.1", i, 1, 0, (double)tpvpow[m][2]); + } + } + } + + dis->ndp = keyp - dis->dp; + + + // TPV now becomes TAN. + strcpy(wcs->ctype[0]+5, "TAN"); + strcpy(wcs->ctype[1]+5, "TAN"); + wcs->npv = 0; + + return 0; +} diff --git a/deps/wcslib/C/test/tdis2.c b/deps/wcslib/C/test/tdis2.c new file mode 100644 index 0000000..7841653 --- /dev/null +++ b/deps/wcslib/C/test/tdis2.c @@ -0,0 +1,260 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tdis2.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tdis2 tests wcssub()'s handling of distortion functions. Input comes from +* the FITS file specified as an argument, or else from SIP.fits. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#define HEADER_SIZE 36000 + +int main(int argc, char *argv[]) + +{ + char *infile = "SIP.fits"; + + char keyrec[81], header[288001]; + int axes[4], gotend, iblock, ikeyrec, j, k, n, naxis[4], nkeyrec, nreject, + nsamp, nsub, nwcs, status; + double pixblc[4], pixsamp[4], pixtrc[4]; + double *avgdis, *avgtot, *maxdis, *maxtot, *rmsdis, *rmstot, stats[15]; + FILE *fptr; + struct linprm *lin; + struct wcsprm *wcs, wcsext; + + + wcserr_enable(1); + wcsprintf_set(stdout); + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + wcsprintf("Testing wcssub() with distortions (tdis2.c)\n" + "-------------------------------------------\n"); + + // Optional file name specified? + if (1 < argc) { + infile = argv[1]; + } + + + // Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + if ((fptr = fopen(infile, "r")) == 0) { + wcsprintf("ERROR opening %s\n", infile); + return 1; + } + + memset(naxis, 0, 2*sizeof(int)); + + k = 0; + nkeyrec = 0; + gotend = 0; + for (iblock = 0; iblock < 100; iblock++) { + for (ikeyrec = 0; ikeyrec < 36; ikeyrec++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + if (strncmp(keyrec, " ", 8) == 0) continue; + if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; + if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; + + if (strncmp(keyrec, "NAXIS", 5) == 0) { + if (keyrec[5] == ' ') { + sscanf(keyrec+10, "%d", &n); + if (4 < n) { + wcsprintf("ERROR, can't handle more than 4 axes.\n"); + return 1; + } + continue; + } + + sscanf(keyrec+5, "%d = %d", &j, &n); + naxis[j-1] = n; + continue; + } + + memcpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 10) == 0) { + // An END keyrecord was read, but read the rest of the block. + gotend = 1; + } + } + + if (gotend) break; + } + fclose(fptr); + + + // Parse the header. + if ((wcspih(header, nkeyrec, WCSHDR_none, 2, &nreject, &nwcs, &wcs))) { + wcsperr(wcs, 0x0); + return 1; + } + + // Extract the coordinate description for a transposed subimage and prepend + // a new axis. Also tests wcssub() on a struct that hasn't been set up. + nsub = 3; + axes[0] = 0; + axes[1] = WCSSUB_LATITUDE; + axes[2] = WCSSUB_LONGITUDE; + + wcsext.flag = -1; + if ((status = wcssub(1, wcs, &nsub, axes, &wcsext))) { + wcsperr(&wcsext, ""); + goto cleanup; + } else if (nsub == 0) { + printf("None of the requested subimage axes were found.\n"); + goto cleanup; + } + + + // Print the original and extracted structs. + printf("\nInitial contents of wcsprm struct:\n"); + if ((status = wcsset(wcs))) { + wcsperr(wcs, ""); + goto cleanup; + }; + + wcsprt(wcs); + + printf("\n\nExtracted contents of wcsprm struct:\n"); + if ((status = wcsset(&wcsext))) { + wcsperr(&wcsext, ""); + goto cleanup; + } + + wcsprt(&wcsext); + + + // Compute distortion statistics in the initial struct. + maxdis = stats; + maxtot = maxdis + 4; + avgdis = maxtot + 1; + avgtot = avgdis + 4; + rmsdis = avgtot + 1; + rmstot = rmsdis + 4; + + pixblc[0] = 1.0; + pixblc[1] = 1.0; + pixblc[2] = 1.0; + pixblc[3] = 1.0; + pixtrc[0] = 256.0; + pixtrc[1] = 256.0; + pixtrc[2] = 1.0; + pixtrc[3] = 1.0; + pixsamp[0] = 1.0; + pixsamp[1] = 1.0; + pixsamp[2] = 1.0; + pixsamp[3] = 1.0; + + lin = &(wcs->lin); + if (linwarp(lin, pixblc, pixtrc, pixsamp, &nsamp, + maxdis, maxtot, avgdis, avgtot, rmsdis, rmstot)) { + linperr(lin, 0x0); + return 1; + } + + for (k = 0; k < 12; k++) { + if (fabs(stats[k]) < 0.0005) stats[k] = 0.0; + } + + wcsprintf("\n\n" + "Initial linwarp() statistics computed over %d sample points:\n" + " Max distortion, axis 1: %10.5f pixels\n" + " axis 2: %10.5f pixels\n" + " axis 3: %10.5f pixels\n" + " axis 4: %10.5f pixels\n" + " total: %10.5f pixels\n" + " Mean distortion, axis 1: %10.5f pixels\n" + " axis 2: %10.5f pixels\n" + " axis 3: %10.5f pixels\n" + " axis 4: %10.5f pixels\n" + " total: %10.5f pixels\n" + " RMS distortion, axis 1: %10.5f pixels\n" + " axis 2: %10.5f pixels\n" + " axis 3: %10.5f pixels\n" + " axis 4: %10.5f pixels\n" + " total: %10.5f pixels\n", + nsamp, maxdis[0], maxdis[1], maxdis[2], maxdis[3], *maxtot, + avgdis[0], avgdis[1], avgdis[2], avgdis[3], *avgtot, + rmsdis[0], rmsdis[1], rmsdis[2], rmsdis[3], *rmstot); + + + // Compute distortion statistics in the extracted struct. + pixtrc[0] = 1.0; + pixtrc[1] = 256.0; + pixtrc[2] = 256.0; + + lin = &(wcsext.lin); + if (linwarp(lin, pixblc, pixtrc, pixsamp, &nsamp, + maxdis, maxtot, avgdis, avgtot, rmsdis, rmstot)) { + linperr(lin, 0x0); + return 1; + } + + for (k = 0; k < 12; k++) { + if (fabs(stats[k]) < 0.0005) stats[k] = 0.0; + } + + wcsprintf("\n" + "linwarp() statistics for extract computed over the same %d points:\n" + " Max distortion, axis 1: %10.5f pixels\n" + " axis 2: %10.5f pixels\n" + " axis 3: %10.5f pixels\n" + " total: %10.5f pixels\n" + " Mean distortion, axis 1: %10.5f pixels\n" + " axis 2: %10.5f pixels\n" + " axis 3: %10.5f pixels\n" + " total: %10.5f pixels\n" + " RMS distortion, axis 1: %10.5f pixels\n" + " axis 2: %10.5f pixels\n" + " axis 3: %10.5f pixels\n" + " total: %10.5f pixels\n", + nsamp, maxdis[0], maxdis[1], maxdis[2], *maxtot, + avgdis[0], avgdis[1], avgdis[2], *avgtot, + rmsdis[0], rmsdis[1], rmsdis[2], *rmstot); + + +cleanup: + wcsvfree(&nwcs, &wcs); + wcsfree(&wcsext); + + return status; +} diff --git a/deps/wcslib/C/test/tdis2.out b/deps/wcslib/C/test/tdis2.out new file mode 100644 index 0000000..1dc844d --- /dev/null +++ b/deps/wcslib/C/test/tdis2.out @@ -0,0 +1,711 @@ +Testing wcssub() with distortions (tdis2.c) +------------------------------------------- + +Initial contents of wcsprm struct: + flag: 137 + naxis: 4 + crpix: 0x
+ 124.00 132.00 1024.5 1.0000 + pc: 0x
+ pc[0][]: 0.00024976 0.00023018 0.0000 0.0000 + pc[1][]: 0.00023043 -0.00024997 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000e-10 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + crval: 0x
+ 202.48 47.175 5.0068e-07 0.0000 + cunit: 0x
+ "deg" + "deg" + "m" + "" + ctype: 0x
+ "RA---TAN-SIP" + "DEC--TAN-SIP" + "AWAV" + "TIME" + lonpole: 180.000000 + latpole: 47.175119 + restfrq: 0.000000 + restwav: 0.000000 + npv: 0 + npvmax: 0 + pv: 0x0 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 0.00024976 0.00023018 0.0000 0.0000 + cd[1][]: 0.00023043 -0.00024997 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 1.0000e-10 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 1.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 2 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: "ICRS" + equinox: UNDEFINED + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: 3 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 4000 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x0 (= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 124.00 132.00 1024.5 1.0000 + pc: 0x
+ pc[0][]: 0.00024976 0.00023018 0.0000 0.0000 + pc[1][]: 0.00023043 -0.00024997 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000e-10 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + dispre: 0x
(see below) + disseq: 0x0 +piximg[0][]: 0.00024976 0.00023018 0.0000 0.0000 +piximg[1][]: 0.00023043 -0.00024997 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 1.0000e-10 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: 2164.8 1993.4 0.0000 0.0000 +imgpix[1][]: 1995.6 -2163.0 -0.0000 -0.0000 +imgpix[2][]: 0.0000 0.0000 1.0000e+10 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 0 + simple: 0 + err: 0x0 + m_flag: 137 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x
(= dispre) + m_disseq: 0x0 + +dispre.* + flag: 137 + naxis: 4 + dtype: 0x
+ "SIP" + "SIP" + "" + "" + ndp: 38 + ndpmax: 38 + dp: 0x
+ 1 0 2 DP1.NAXES + 1 1 124.00 DP1.OFFSET.1 + 1 1 132.00 DP1.OFFSET.2 + 2 0 2 DP2.NAXES + 2 1 124.00 DP2.OFFSET.1 + 2 1 132.00 DP2.OFFSET.2 + 1 1 2.9656e-06 DP1.SIP.FWD.0_2 + 1 1 3.7746e-09 DP1.SIP.FWD.0_3 + 1 1 2.1886e-05 DP1.SIP.FWD.1_1 + 1 1 -1.6847e-07 DP1.SIP.FWD.1_2 + 1 1 -2.3863e-05 DP1.SIP.FWD.2_0 + 1 1 -8.5610e-09 DP1.SIP.FWD.2_1 + 1 1 -1.4172e-07 DP1.SIP.FWD.3_0 + 2 1 2.3100e-05 DP2.SIP.FWD.0_2 + 2 1 -1.6168e-07 DP2.SIP.FWD.0_3 + 2 1 -2.4386e-05 DP2.SIP.FWD.1_1 + 2 1 -5.7813e-09 DP2.SIP.FWD.1_2 + 2 1 2.1197e-06 DP2.SIP.FWD.2_0 + 2 1 -1.6583e-07 DP2.SIP.FWD.2_1 + 2 1 -2.0249e-08 DP2.SIP.FWD.3_0 + 1 1 -6.4275e-07 DP1.SIP.REV.0_1 + 1 1 -2.9425e-06 DP1.SIP.REV.0_2 + 1 1 -3.5820e-09 DP1.SIP.REV.0_3 + 1 1 -1.4897e-05 DP1.SIP.REV.1_0 + 1 1 -2.2250e-05 DP1.SIP.REV.1_1 + 1 1 1.7195e-07 DP1.SIP.REV.1_2 + 1 1 2.4146e-05 DP1.SIP.REV.2_0 + 1 1 6.7090e-09 DP1.SIP.REV.2_1 + 1 1 1.4492e-07 DP1.SIP.REV.3_0 + 2 1 -1.6588e-05 DP2.SIP.REV.0_1 + 2 1 -2.3424e-05 DP2.SIP.REV.0_2 + 2 1 1.6510e-07 DP2.SIP.REV.0_3 + 2 1 -2.6783e-06 DP2.SIP.REV.1_0 + 2 1 2.4753e-05 DP2.SIP.REV.1_1 + 2 1 3.8917e-09 DP2.SIP.REV.1_2 + 2 1 -2.1510e-06 DP2.SIP.REV.2_0 + 2 1 1.7000e-07 DP2.SIP.REV.2_1 + 2 1 2.0482e-08 DP2.SIP.REV.3_0 + totdis: 0.0000 + maxdis: 0x
+ 1.3940 1.5010 0.0000 0.0000 + docorr: 0x
+ 1 1 1 1 + Nhat: 0x
+ 2 2 0 0 + axmap: 0x
+ axmap[0][]: 0 1 -1 -1 + axmap[1][]: 0 1 -1 -1 + axmap[2][]: -1 -1 -1 -1 + axmap[3][]: -1 -1 -1 -1 + offset: 0x
+offset[0][]: 124.00 132.00 0.0000 0.0000 +offset[1][]: 124.00 132.00 0.0000 0.0000 +offset[2][]: 0.0000 0.0000 0.0000 0.0000 +offset[3][]: 0.0000 0.0000 0.0000 0.0000 + scale: 0x
+ scale[0][]: 1.0000 1.0000 1.0000 1.0000 + scale[1][]: 1.0000 1.0000 1.0000 1.0000 + scale[2][]: 1.0000 1.0000 1.0000 1.0000 + scale[3][]: 1.0000 1.0000 1.0000 1.0000 + iparm: 0x
+ iparm[0] : 0x
+ iparm[0][]: 1 7 24 12 12 + 0 0 + iparm[1] : 0x
+ iparm[1][]: 1 7 24 12 12 + 0 0 + iparm[2] : 0x0 + iparm[3] : 0x0 + dparm: 0x
+ dparm[0] : 0x
+ dparm[0][]: 0.0000 0.0000 0.0000 0.0000 -2.3863e-05 + 2.1886e-05 2.9656e-06 -1.4172e-07 -8.5610e-09 -1.6847e-07 + 3.7746e-09 0.0000 0.0000 -1.4897e-05 -6.4275e-07 + 0.0000 2.4146e-05 -2.2250e-05 -2.9425e-06 1.4492e-07 + 6.7090e-09 1.7195e-07 -3.5820e-09 0.0000 + dparm[1] : 0x
+ dparm[1][]: 0.0000 0.0000 0.0000 0.0000 2.1197e-06 + -2.4386e-05 2.3100e-05 -2.0249e-08 -1.6583e-07 -5.7813e-09 + -1.6168e-07 0.0000 0.0000 -2.6783e-06 -1.6588e-05 + 0.0000 -2.1510e-06 2.4753e-05 -2.3424e-05 2.0482e-08 + 1.7000e-07 3.8917e-09 1.6510e-07 0.0000 + dparm[2] : 0x0 + dparm[3] : 0x0 + i_naxis: 4 + ndis: 2 + err: 0x0 + disp2x: 0x
+ disp2x[0]: 0x
(= tpd3) + disp2x[1]: 0x
(= tpd3) + disp2x[2]: 0x0 + disp2x[3]: 0x0 + disx2p: 0x
+ disx2p[0]: 0x
+ disx2p[1]: 0x
+ disx2p[2]: 0x0 + disx2p[3]: 0x0 + m_flag: 137 + m_naxis: 4 + m_dtype: 0x
(= dtype) + m_dp: 0x
(= dp) + m_maxdis: 0x
(= maxdis) + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 202.48 47.175 180.00 47.175 + prj: (see below) + euler: 202.48 42.825 180.00 0.73343 0.67976 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 103 + code: "TAN" + r0: 57.295780 + pv: (not used) + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "gnomonic" + category: 1 (zenithal) + pvrange: 0 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + + +Extracted contents of wcsprm struct: + flag: 137 + naxis: 3 + crpix: 0x
+ 0.0000 132.00 124.00 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 -0.00024997 0.00023043 + pc[2][]: 0.0000 0.00023018 0.00024976 + cdelt: 0x
+ 1.0000 1.0000 1.0000 + crval: 0x
+ 0.0000 47.175 202.48 + cunit: 0x
+ "" + "deg" + "deg" + ctype: 0x
+ "" + "DEC--TAN-SIP" + "RA---TAN-SIP" + lonpole: 180.000000 + latpole: 47.175119 + restfrq: 0.000000 + restwav: 0.000000 + npv: 0 + npvmax: 0 + pv: 0x0 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 1.0000 0.0000 0.0000 + cd[1][]: 0.0000 -0.00024997 0.00023043 + cd[2][]: 0.0000 0.00023018 0.00024976 + crota: 0x
+ 0.0000 0.0000 0.0000 + altlin: 2 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: "ICRS" + equinox: UNDEFINED + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 2 + lat: 1 + spec: -1 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 0 2201 2200 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 3 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x0 (= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 3 + crpix: 0x
+ 0.0000 132.00 124.00 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 -0.00024997 0.00023043 + pc[2][]: 0.0000 0.00023018 0.00024976 + cdelt: 0x
+ 1.0000 1.0000 1.0000 + dispre: 0x
(see below) + disseq: 0x0 +piximg[0][]: 1.0000 0.0000 0.0000 +piximg[1][]: 0.0000 -0.00024997 0.00023043 +piximg[2][]: 0.0000 0.00023018 0.00024976 +imgpix[0][]: 1.0000 0.0000 0.0000 +imgpix[1][]: -0.0000 -2163.0 1995.6 +imgpix[2][]: 0.0000 1993.4 2164.8 + i_naxis: 3 + unity: 0 + affine: 0 + simple: 0 + err: 0x0 + m_flag: 137 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x
(= dispre) + m_disseq: 0x0 + +dispre.* + flag: 137 + naxis: 3 + dtype: 0x
+ "" + "SIP" + "SIP" + ndp: 42 + ndpmax: 42 + dp: 0x
+ 2 0 2 DP2.NAXES + 2 0 3 DP2.AXIS.1 + 2 0 2 DP2.AXIS.2 + 2 1 124.00 DP2.OFFSET.1 + 2 1 132.00 DP2.OFFSET.2 + 2 1 2.3100e-05 DP2.SIP.FWD.0_2 + 2 1 -1.6168e-07 DP2.SIP.FWD.0_3 + 2 1 -2.4386e-05 DP2.SIP.FWD.1_1 + 2 1 -5.7813e-09 DP2.SIP.FWD.1_2 + 2 1 2.1197e-06 DP2.SIP.FWD.2_0 + 2 1 -1.6583e-07 DP2.SIP.FWD.2_1 + 2 1 -2.0249e-08 DP2.SIP.FWD.3_0 + 2 1 -1.6588e-05 DP2.SIP.REV.0_1 + 2 1 -2.3424e-05 DP2.SIP.REV.0_2 + 2 1 1.6510e-07 DP2.SIP.REV.0_3 + 2 1 -2.6783e-06 DP2.SIP.REV.1_0 + 2 1 2.4753e-05 DP2.SIP.REV.1_1 + 2 1 3.8917e-09 DP2.SIP.REV.1_2 + 2 1 -2.1510e-06 DP2.SIP.REV.2_0 + 2 1 1.7000e-07 DP2.SIP.REV.2_1 + 2 1 2.0482e-08 DP2.SIP.REV.3_0 + 3 0 2 DP3.NAXES + 3 0 3 DP3.AXIS.1 + 3 0 2 DP3.AXIS.2 + 3 1 124.00 DP3.OFFSET.1 + 3 1 132.00 DP3.OFFSET.2 + 3 1 2.9656e-06 DP3.SIP.FWD.0_2 + 3 1 3.7746e-09 DP3.SIP.FWD.0_3 + 3 1 2.1886e-05 DP3.SIP.FWD.1_1 + 3 1 -1.6847e-07 DP3.SIP.FWD.1_2 + 3 1 -2.3863e-05 DP3.SIP.FWD.2_0 + 3 1 -8.5610e-09 DP3.SIP.FWD.2_1 + 3 1 -1.4172e-07 DP3.SIP.FWD.3_0 + 3 1 -6.4275e-07 DP3.SIP.REV.0_1 + 3 1 -2.9425e-06 DP3.SIP.REV.0_2 + 3 1 -3.5820e-09 DP3.SIP.REV.0_3 + 3 1 -1.4897e-05 DP3.SIP.REV.1_0 + 3 1 -2.2250e-05 DP3.SIP.REV.1_1 + 3 1 1.7195e-07 DP3.SIP.REV.1_2 + 3 1 2.4146e-05 DP3.SIP.REV.2_0 + 3 1 6.7090e-09 DP3.SIP.REV.2_1 + 3 1 1.4492e-07 DP3.SIP.REV.3_0 + totdis: 0.0000 + maxdis: 0x
+ 0.0000 1.5010 1.3940 + docorr: 0x
+ 1 1 1 + Nhat: 0x
+ 0 2 2 + axmap: 0x
+ axmap[0][]: -1 -1 -1 + axmap[1][]: 2 1 -1 + axmap[2][]: 2 1 -1 + offset: 0x
+offset[0][]: 0.0000 0.0000 0.0000 +offset[1][]: 124.00 132.00 0.0000 +offset[2][]: 124.00 132.00 0.0000 + scale: 0x
+ scale[0][]: 1.0000 1.0000 1.0000 + scale[1][]: 1.0000 1.0000 1.0000 + scale[2][]: 1.0000 1.0000 1.0000 + iparm: 0x
+ iparm[0] : 0x0 + iparm[1] : 0x
+ iparm[1][]: 1 7 24 12 12 + 0 0 + iparm[2] : 0x
+ iparm[2][]: 1 7 24 12 12 + 0 0 + dparm: 0x
+ dparm[0] : 0x0 + dparm[1] : 0x
+ dparm[1][]: 0.0000 0.0000 0.0000 0.0000 2.1197e-06 + -2.4386e-05 2.3100e-05 -2.0249e-08 -1.6583e-07 -5.7813e-09 + -1.6168e-07 0.0000 0.0000 -2.6783e-06 -1.6588e-05 + 0.0000 -2.1510e-06 2.4753e-05 -2.3424e-05 2.0482e-08 + 1.7000e-07 3.8917e-09 1.6510e-07 0.0000 + dparm[2] : 0x
+ dparm[2][]: 0.0000 0.0000 0.0000 0.0000 -2.3863e-05 + 2.1886e-05 2.9656e-06 -1.4172e-07 -8.5610e-09 -1.6847e-07 + 3.7746e-09 0.0000 0.0000 -1.4897e-05 -6.4275e-07 + 0.0000 2.4146e-05 -2.2250e-05 -2.9425e-06 1.4492e-07 + 6.7090e-09 1.7195e-07 -3.5820e-09 0.0000 + i_naxis: 3 + ndis: 2 + err: 0x0 + disp2x: 0x
+ disp2x[0]: 0x0 + disp2x[1]: 0x
(= tpd3) + disp2x[2]: 0x
(= tpd3) + disx2p: 0x
+ disx2p[0]: 0x0 + disx2p[1]: 0x
+ disx2p[2]: 0x
+ m_flag: 137 + m_naxis: 3 + m_dtype: 0x
(= dtype) + m_dp: 0x
(= dp) + m_maxdis: 0x
(= maxdis) + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 202.48 47.175 180.00 47.175 + prj: (see below) + euler: 202.48 42.825 180.00 0.73343 0.67976 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 103 + code: "TAN" + r0: 57.295780 + pv: (not used) + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "gnomonic" + category: 1 (zenithal) + pvrange: 0 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + + +Initial linwarp() statistics computed over 65536 sample points: + Max distortion, axis 1: 1.43987 pixels + axis 2: 1.53735 pixels + axis 3: 0.00000 pixels + axis 4: 0.00000 pixels + total: 2.10634 pixels + Mean distortion, axis 1: -0.12958 pixels + axis 2: 0.14926 pixels + axis 3: 0.00000 pixels + axis 4: 0.00000 pixels + total: 0.30513 pixels + RMS distortion, axis 1: 0.27348 pixels + axis 2: 0.28827 pixels + axis 3: 0.00000 pixels + axis 4: 0.00000 pixels + total: 0.32227 pixels + +linwarp() statistics for extract computed over the same 65536 points: + Max distortion, axis 1: 0.00000 pixels + axis 2: 1.53735 pixels + axis 3: 1.43987 pixels + total: 2.10634 pixels + Mean distortion, axis 1: 0.00000 pixels + axis 2: 0.14926 pixels + axis 3: -0.12958 pixels + total: 0.30513 pixels + RMS distortion, axis 1: 0.00000 pixels + axis 2: 0.28827 pixels + axis 3: 0.27348 pixels + total: 0.32227 pixels diff --git a/deps/wcslib/C/test/tdis3 b/deps/wcslib/C/test/tdis3 new file mode 100644 index 0000000..5916345 --- /dev/null +++ b/deps/wcslib/C/test/tdis3 @@ -0,0 +1,58 @@ +#!/bin/sh + + echo "Testing WCSLIB's handling of translated distortions (tdis3)" + echo "-----------------------------------------------------------" + + echo "Each of the 10 SIPTPV alternates should produce the same results." + + for i in 0 1 2 3 4 5 6 7 8 9 + do + echo + echo + echo "Using SIPTPV alternate $i:" + echo "-------------------------" + ../utils/wcsware -a$i -x SIPTPV.fits << EOT + 1, 1 +2048, 1 +2048,4096 + 1,4096 +EOT + done + + + echo + echo + echo "Using DSS alternate 0:" + echo "----------------------" + ../utils/wcsware -a0 -x DSS.fits << EOT + 1, 1 +891, 1 +891, 893 + 1, 893 +EOT + + + echo + echo + echo "Using TNX alternate 0:" + echo "----------------------" + ../utils/wcsware -a0 -x TNX.fits << EOT + 1, 1 +400, 1 +400, 400 + 1, 400 +EOT + + + echo + echo + echo "Using ZPX alternate 0:" + echo "----------------------" + ../utils/wcsware -a0 -x ZPX.fits << EOT + 1, 1 +512, 1 +512, 512 + 1, 512 +EOT + + diff --git a/deps/wcslib/C/test/tdis3.out b/deps/wcslib/C/test/tdis3.out new file mode 100644 index 0000000..cf6f357 --- /dev/null +++ b/deps/wcslib/C/test/tdis3.out @@ -0,0 +1,324 @@ +Testing WCSLIB's handling of translated distortions (tdis3) +----------------------------------------------------------- +Each of the 10 SIPTPV alternates should produce the same results. + + +Using SIPTPV alternate 0: +------------------------- +Found 10 coordinate representations. + +SIPTPV-0: native SIP representation + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 1: +------------------------- +Found 10 coordinate representations. + +SIPTPV-1: SIP translated to a 'SIP' distortion + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 2: +------------------------- +Found 10 coordinate representations. + +SIPTPV-2: SIP translated to a 'TPD' distortion + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 3: +------------------------- +Found 10 coordinate representations. + +SIPTPV-3: SIP translated to a 'Polynomial' distortion + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 4: +------------------------- +Found 10 coordinate representations. + +SIPTPV-4: native TPV representation + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 5: +------------------------- +Found 10 coordinate representations. + +SIPTPV-5: TPV translated to a 'TPV' distortion + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 6: +------------------------- +Found 10 coordinate representations. + +SIPTPV-6: TPV translated to a 'TPD' distortion + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 7: +------------------------- +Found 10 coordinate representations. + +SIPTPV-7: TPV translated to a 'TPD' distortion without axis map + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 8: +------------------------- +Found 10 coordinate representations. + +SIPTPV-8: TPV translated to a 'Polynomial' distortion + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using SIPTPV alternate 9: +------------------------- +Found 10 coordinate representations. + +SIPTPV-9: TPV translated to 'Polynomial' without axis mapping + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.109607, 1.219086 +World: 276.028383, -24.750794 + +Enter 2 pixel coordinate elements: Pixel: 2048, 1 +Image: 1.683941, 1.218459 +World: 276.660243, -24.744974 + +Enter 2 pixel coordinate elements: Pixel: 2048, 4096 +Image: 1.684910, 0.067489 +World: 276.679433, -25.895134 + +Enter 2 pixel coordinate elements: Pixel: 1, 4096 +Image: 1.110303, 0.067495 +World: 276.041106, -25.901929 + +Enter 2 pixel coordinate elements: + + +Using DSS alternate 0: +---------------------- +Found 3 coordinate representations. + +DSS PLATEID A2OP + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 1.395107, 2.129368 +World: 81.996683, -12.820752 + +Enter 2 pixel coordinate elements: Pixel: 891, 1 +Image: 1.145352, 2.128085 +World: 81.740854, -12.823290 + +Enter 2 pixel coordinate elements: Pixel: 891, 893 +Image: 1.144292, 2.378038 +World: 81.738417, -12.573782 + +Enter 2 pixel coordinate elements: Pixel: 1, 893 +Image: 1.394075, 2.379333 +World: 81.993980, -12.571258 + +Enter 2 pixel coordinate elements: + + +Using TNX alternate 0: +---------------------- +Found one coordinate representation. + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 0.008615, 0.011566 +World: 266.713922, -30.148962 + +Enter 2 pixel coordinate elements: Pixel: 400, 1 +Image: 0.008603, 0.041489 +World: 266.713906, -30.119039 + +Enter 2 pixel coordinate elements: Pixel: 400, 400 +Image: 0.038509, 0.041475 +World: 266.748480, -30.119046 + +Enter 2 pixel coordinate elements: Pixel: 1, 400 +Image: 0.038533, 0.011558 +World: 266.748521, -30.148963 + +Enter 2 pixel coordinate elements: + + +Using ZPX alternate 0: +---------------------- +Found one coordinate representation. + +Enter 2 pixel coordinate elements: Pixel: 1, 1 +Image: 0.299913, 0.303299 +World: 321.056617, 37.205397 + +Enter 2 pixel coordinate elements: Pixel: 512, 1 +Image: 0.299885, 0.266103 +World: 321.057279, 37.169537 + +Enter 2 pixel coordinate elements: Pixel: 512, 512 +Image: 0.262707, 0.266092 +World: 321.012173, 37.170263 + +Enter 2 pixel coordinate elements: Pixel: 1, 512 +Image: 0.262735, 0.303287 +World: 321.011602, 37.206209 + +Enter 2 pixel coordinate elements: diff --git a/deps/wcslib/C/test/tdisiter.c b/deps/wcslib/C/test/tdisiter.c new file mode 100644 index 0000000..165b484 --- /dev/null +++ b/deps/wcslib/C/test/tdisiter.c @@ -0,0 +1,173 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tdisiter.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tdisiter tests the external setting of ITERMAX in disx2p(), particularly +* for distortions such as SIP that may optionally provide an approximation +* of their inverses. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include +#include +#include +#include + +int disitermax(int itermax); + +#define HEADER_SIZE 36000 + + +int main(int argc, char *argv[]) + +{ + char *infile = "SIP.fits"; + + char keyrec[81], header[288001]; + int gotend, iblock, ikeyrec, j, k, n, naxis[4], nkeyrec, nreject, nwcs; + double discrd[4], rawcrd[4]; + FILE *fptr; + struct disprm *dis; + struct wcsprm *wcs; + + + wcserr_enable(1); + wcsprintf_set(stdout); + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + // Optional file name specified? + if (1 < argc) { + infile = argv[1]; + } + + + // Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + if ((fptr = fopen(infile, "r")) == 0) { + wcsprintf("ERROR opening %s\n", infile); + return 1; + } + + memset(naxis, 0, 2*sizeof(int)); + + k = 0; + nkeyrec = 0; + gotend = 0; + for (iblock = 0; iblock < 100; iblock++) { + for (ikeyrec = 0; ikeyrec < 36; ikeyrec++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + if (strncmp(keyrec, " ", 8) == 0) continue; + if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; + if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; + + if (strncmp(keyrec, "NAXIS", 5) == 0) { + if (keyrec[5] == ' ') { + sscanf(keyrec+10, "%d", &n); + if (4 < n) { + wcsprintf("ERROR, can't handle more than 4 axes.\n"); + return 1; + } + continue; + } + + sscanf(keyrec+5, "%d = %d", &j, &n); + naxis[j-1] = n; + continue; + } + + strncpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 10) == 0) { + // An END keyrecord was read, but read the rest of the block. + gotend = 1; + } + } + + if (gotend) break; + } + fclose(fptr); + + + // Parse the header. + if ((wcspih(header, nkeyrec, WCSHDR_none, 2, &nreject, &nwcs, &wcs))) { + wcsperr(wcs, 0x0); + return 1; + } + + if (wcsset(wcs)) { + wcsperr(wcs, 0x0); + return 1; + } + + dis = wcs->lin.dispre; + + disprt(dis); + wcsprintf("\n"); + + rawcrd[0] = 1; + rawcrd[1] = 1; + rawcrd[2] = 1; + rawcrd[3] = 1; + if (disp2x(dis, rawcrd, discrd)) { + disperr(dis, 0x0); + return 1; + } + + wcsprintf(" pix: %18.12f %18.12f\n", rawcrd[0], rawcrd[1]); + wcsprintf(" -> img: %18.12f %18.12f\n", discrd[0], discrd[1]); + + disitermax(32); + if (disx2p(dis, discrd, rawcrd)) { + disperr(dis, 0x0); + return 1; + } + + wcsprintf(" -> pix: %18.12f %18.12f (ITERMAX == %d)\n", + rawcrd[0], rawcrd[1], disitermax(-1)); + + disitermax(0); + if (disx2p(dis, discrd, rawcrd)) { + disperr(dis, 0x0); + return 1; + } + + wcsprintf(" -> pix: %18.12f %18.12f (ITERMAX == %d)\n", + rawcrd[0], rawcrd[1], disitermax(-1)); + + + wcsvfree(&nwcs, &wcs); + + return 0; +} diff --git a/deps/wcslib/C/test/tfitshdr.c b/deps/wcslib/C/test/tfitshdr.c new file mode 100644 index 0000000..7a31852 --- /dev/null +++ b/deps/wcslib/C/test/tfitshdr.c @@ -0,0 +1,285 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tfitshdr.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tfitshdr tests fitshdr(), the FITS parser for image headers, by reading a +* test header and printing the resulting fitskey structs. +* +* Input comes from file 'fitshdr.fits' using either fits_hdr2str() from +* CFITSIO if the DO_CFITSIO preprocessor is defined, or read directly using +* fgets() otherwise. +* +* wcshdr() is called first to extract all WCS-related keyrecords from the +* input header before passing it on to fitshdr(). +* +*---------------------------------------------------------------------------*/ + +#include + +#include +#include +#include + +#if defined HAVE_CFITSIO && defined DO_CFITSIO +#include +#endif + +#include +#include +#include + +int main() + +{ + char infile[] = "fitshdr.fits"; + char text[80]; + int i, j, k, nkeyrec, nkeyids, nreject, status; + struct fitskey *keys, *kptr; + struct fitskeyid keyids[8]; +#if defined HAVE_CFITSIO && defined DO_CFITSIO + char *header; + fitsfile *fptr; +#else + char keyrec[81], header[288001]; + int end; + FILE *fptr; +#endif + + struct wcsprm *wcs; + int ctrl, nwcs, relax; + + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + printf("Testing FITS image header parser (tfitshdr.c)\n" + "---------------------------------------------\n\n"); + + // Read in the FITS header. +#if defined HAVE_CFITSIO && defined DO_CFITSIO + status = 0; + + if (fits_open_file(&fptr, infile, READONLY, &status)) { + fits_report_error(stderr, status); + return 1; + } + + if (fits_hdr2str(fptr, 0, NULL, 0, &header, &nkeyrec, &status)) { + fits_report_error(stderr, status); + return 1; + } + + fits_close_file(fptr, &status); +#else + if ((fptr = fopen(infile, "r")) == 0) { + printf("ERROR opening %s\n", infile); + return 1; + } + + k = 0; + end = 0; + nkeyrec = 0; + for (j = 0; j < 100; j++) { + for (i = 0; i < 36; i++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + memcpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 10) == 0) { + // An END keyrecord was read, but read the rest of the block. + end = 1; + } + } + + if (end) break; + } + fclose(fptr); +#endif + + printf("Found %d header keyrecords.\n", nkeyrec); + + + // Cull recognized, syntactically valid WCS keyrecords from the header. + relax = WCSHDR_all; + ctrl = -1; + if ((status = wcspih(header, nkeyrec, relax, ctrl, &nreject, &nwcs, + &wcs))) { + fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } + wcsvfree(&nwcs, &wcs); + + // Number remaining. + nkeyrec = strlen(header) / 80; + + + // Specific keywords to be located or culled. + strcpy(keyids[0].name, "SIMPLE "); + strcpy(keyids[1].name, "BITPIX "); + strcpy(keyids[2].name, "NAXIS "); + strcpy(keyids[3].name, "COMMENT "); + strcpy(keyids[4].name, "HISTORY "); + strcpy(keyids[5].name, " "); + strcpy(keyids[6].name, "END "); + nkeyids = 7; + + if (nkeyids) { + printf("\nThe following keyrecords will not be listed:\n"); + for (i = 0; i < nkeyids; i++) { + printf(" \"%8s\"\n", keyids[i].name); + } + } + + + // Parse the header. + if ((status = fitshdr(header, nkeyrec, nkeyids, keyids, &nreject, &keys))) { + printf("fitskey ERROR %d: %s.\n", status, fitshdr_errmsg[status]); + } +#if defined HAVE_CFITSIO && defined DO_CFITSIO + fits_free_memory(header, &status); +#endif + + // Report the results. + printf("\n%d header keyrecords parsed by fitshdr(), %d rejected:\n\n", + nkeyrec, nreject); + kptr = keys; + for (i = 0; i < nkeyrec; i++, kptr++) { + // Skip syntactically valid keyrecords that were indexed. + if (kptr->keyno < 0 && !kptr->status) continue; + + // Basic keyrecord info. + printf("%4d%5d %-8s%3d", kptr->keyno, kptr->status, kptr->keyword, + kptr->type); + + // Format the keyvalue for output. + switch (abs(kptr->type)%10) { + case 1: + // Logical. + sprintf(text, "%c", kptr->keyvalue.i?'T':'F'); + break; + case 2: + // 32-bit signed integer. + sprintf(text, "%d", kptr->keyvalue.i); + break; + case 3: + // 64-bit signed integer. +#ifdef WCSLIB_INT64 + sprintf(text, "%+lld", kptr->keyvalue.k); +#else + if (kptr->keyvalue.k[2]) { + sprintf(text, "%+d%09d%09d", kptr->keyvalue.k[2], + abs(kptr->keyvalue.k[1]), + abs(kptr->keyvalue.k[0])); + } else { + sprintf(text, "%+d%09d", kptr->keyvalue.k[1], + abs(kptr->keyvalue.k[0])); + } +#endif + break; + case 4: + // Very long integer. + k = 0; + for (j = 7; j > 0; j--) { + if (kptr->keyvalue.l[j]) { + k = j; + break; + } + } + + sprintf(text, "%+d", kptr->keyvalue.l[k]); + for (j = k-1; j >= 0; j--) { + sprintf(text+strlen(text), "%09d", abs(kptr->keyvalue.l[j])); + } + + break; + case 5: + // Float. + sprintf(text, "%+13.6e", kptr->keyvalue.f); + break; + case 6: + // Int complex. + sprintf(text, "%.0f %.0f", kptr->keyvalue.c[0], + kptr->keyvalue.c[1]); + break; + case 7: + // Float complex. + sprintf(text, "%+13.6e %+13.6e", kptr->keyvalue.c[0], + kptr->keyvalue.c[1]); + break; + case 8: + // String. + sprintf(text, "\"%s\"", kptr->keyvalue.s); + break; + default: + // No value. + *text = '\0'; + break; + } + + if (kptr->type > 0) { + // Keyvalue successfully extracted. + printf(" %s", text); + } else if (kptr->type < 0) { + // Syntax error of some type while extracting the keyvalue. + printf(" (%s)", text); + } + + // Units? + if (kptr->ulen) { + printf(" %.*s", kptr->ulen-2, kptr->comment+1); + } + + // Comment text or reject keyrecord. + printf("\n%s\n", kptr->comment); + } + + + // Print indexes. + printf("\n\nIndexes of selected keywords:\n"); + for (i = 0; i < nkeyids; i++) { + printf("%-8s%5d%5d%5d", keyids[i].name, keyids[i].count, keyids[i].idx[0], + keyids[i].idx[1]); + + // Print logical (SIMPLE) and integer (BITPIX, NAXIS) values. + if (keyids[i].count) { + kptr = keys + keyids[i].idx[0]; + printf("%4d", kptr->type); + + if (kptr->type == 1) { + printf("%5c", kptr->keyvalue.i?'T':'F'); + } else if (kptr->type == 2) { + printf("%5d", kptr->keyvalue.i); + } + } + printf("\n"); + } + + wcsdealloc(keys); + + return 0; +} diff --git a/deps/wcslib/C/test/tfitshdr.out b/deps/wcslib/C/test/tfitshdr.out new file mode 100644 index 0000000..90ac0dd --- /dev/null +++ b/deps/wcslib/C/test/tfitshdr.out @@ -0,0 +1,144 @@ +Testing FITS image header parser (tfitshdr.c) +--------------------------------------------- + +Found 144 header keyrecords. + +The following keyrecords will not be listed: + "SIMPLE " + "BITPIX " + "NAXIS " + "COMMENT " + "HISTORY " + " " + "END " + +74 header keyrecords parsed by fitshdr(), 21 rejected: + + 9 0 UNDEF 0 +Undefined keyvalue + 10 0 TRUE 1 T +Logical + 11 0 FALSE 1 F +Logical + 12 0 INT32 2 12345 +Not a 64-bit integer + 13 0 INT32 2 -123456789 +Not a 64-bit integer + 14 0 INT32 2 -2147483648 +Not a 64-bit integer (INT_MIN) + 15 0 INT32 2 2147483647 +Not a 64-bit integer (INT_MAX) + 16 0 INT32 2 12345 +Not a very long integer + 17 0 INT32 2 -123456789 +Not a very long integer + 18 0 INT64 3 -2147483649 +64-bit integer (INT_MIN - 1) + 19 0 INT64 3 +2147483648 +64-bit integer (INT_MAX + 1) + 20 0 INT64 3 +100000000000000000 +64-bit integer + 21 0 INT64 3 -876543210987654321 +64-bit integer + 22 0 INT64 3 -9223372036854775808 +Not a very long integer (LONG_MIN) + 23 0 INT64 3 +9223372036854775807 +Not a very long integer (LONG_MAX) + 24 0 INT64 3 -876543210987654321 +64-bit integer + 25 0 INTVL 4 -9223372036854775809 +Very long integer (LONG_MIN - 1) + 26 0 INTVL 4 +9223372036854775808 +Very long integer (LONG_MAX + 1) + 27 0 INTVL 4 -100000000000000000000000000000876543210987654321 +Very-long integer + 28 0 INTVL 4 +123456789012345678901234567890123456789012345678901234567890123456789 + + 29 0 INTVL 4 +1234567890123456789012345678901234567890123456789012345678901234567890 + + 30 0 FLOAT 5 +3.141593e+00 +Floating point + 31 0 FLOAT 5 +1.602177e-19 +Floating point, lower-case exp allowed + 32 0 FLOAT 5 +2.997925e+08 +Floating point + 33 0 FLOAT 5 +6.626070e+00 +Floating point, lower-case exp allowed + 34 0 FLOAT 5 +6.022141e+00 +Floating point + 35 0 COMPLEX 6 137 -1 +An integer complex keyvalue + 36 0 COMPLEX 7 +1.000000e+06 -1.000000e-01 +A floating point complex keyvalue + 37 0 GOODSTR 8 ""G'DAY"" +A valid string keyvalue + 38 0 BLANKS 8 " " +An all-blank string equals a single blank + 39 0 LONGSTR 8 "The loooooongest possible non-continued string value, 68 characters." + + 40 0 CONTSTR 18 "The quick brown " +Continued string, with & (will be stripped off) + 41 4 CONTINUE 28 "fox jumps over the" +CONTINUE 'fox jumps over the' Relaxed handling of invalid keycomment + 42 0 CONTINUE 38 " lazy dog" + + 43 0 PI 5 +3.141593e+00 +[!?] is not a valid units specification + 44 0 CONTINUE 0 + 'Not a valid string continuation' + 50 1 BADREC = 0 + 1 / Illegal, "= " not in columns 9-10 + 51 0 BADREC 0 + = 1 / Illegal, "= " not in columns 9-10 + 52 0 BADREC 0 +=1 / Illegal, "= " not in columns 9-10 + 53 0 BADREC 0 + 1 / Illegal, "= " not in columns 9-10 + 54 1 BadKey 2 111 +Example of a syntax error, invalid keyword + 55 1 BADKEY! 2 222 +Example of a syntax error, invalid keyword + 56 1 BAD KEY 2 333 +Example of a syntax error, invalid keyword + 57 2 BADVAL 0 +BADVAL = BAD / Example of a syntax error, invalid keyvalue + 58 2 BADVAL 0 +BADVAL = "BAD" / Example of a syntax error, invalid keyvalue + 59 4 BADVAL -8 ("BAD") +BADVAL = 'BAD' 'STR' / Example of a syntax error, invalid keyvalue + 60 4 BADVAL -2 (49) +BADVAL = 49 + 94 / Example of a syntax error, invalid keyvalue + 61 4 BADVAL 0 +BADVAL = 1934-638 / Example of a syntax error, invalid keyvalue + 62 4 BADVAL 0 +BADVAL = 1.2.3 / Example of a syntax error, invalid keyvalue + 63 4 BADVAL 0 +BADVAL = 12h34m56s / Example of a syntax error, invalid keyvalue + 64 4 BADVAL 0 +BADVAL = 0xFF / Example of a syntax error, invalid keyvalue + 65 4 BADVAL -2 (58) +BADVAL = 58 - 21 / Example of a syntax error, invalid keyvalue + 66 2 BADVAL 0 +BADVAL = J2000 / Example of a syntax error, invalid keyvalue + 67 2 BADVAL 0 +BADVAL = B1950.0 / Example of a syntax error, invalid keyvalue + 68 4 BADVAL 0 +BADVAL = 180:00:00 / Example of a syntax error, invalid keyvalue + 69 2 BADVAL 0 +BADVAL = $9.99 / Example of a syntax error, invalid keyvalue + 70 4 BADCOMM -2 (1) +BADCOMM = 1 Example of a syntax error, invalid keycomment + 71 4 BADCOMM -2 (1) +BADCOMM = 1 1/8 = 0.125 + -73 8 END 8 "ILLEGAL" +Illegal END keyrecord + + +Indexes of selected keywords: +SIMPLE 1 0 -1 1 F +BITPIX 1 1 -1 2 -32 +NAXIS 1 2 -1 2 0 +COMMENT 3 45 47 0 +HISTORY 0 -1 -1 + 8 3 71 0 +END 2 72 73 8 diff --git a/deps/wcslib/C/test/tlin.c b/deps/wcslib/C/test/tlin.c new file mode 100644 index 0000000..3331d5c --- /dev/null +++ b/deps/wcslib/C/test/tlin.c @@ -0,0 +1,144 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tlin.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tlin tests the linear transformation routines supplied with WCSLIB. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include + +int NAXIS = 5; +int NCOORD = 2; +int NELEM = 9; + +double CRPIX[5] = {256.0, 256.0, 64.0, 128.0, 1.0}; +double PC[5][5] = {{ 1.0, 0.5, 0.0, 0.0, 0.0}, + { 0.5, 1.0, 0.0, 0.0, 0.0}, + { 0.0, 0.0, 1.0, 0.0, 0.0}, + { 0.0, 0.0, 0.0, 1.0, 0.0}, + { 0.0, 0.0, 0.0, 0.0, 1.0}}; +double CDELT[5] = { 1.2, 2.3, 3.4, 4.5, 5.6}; + +double pix0[2][9] = {{303.0, 265.0, 112.4, 144.5, 28.2, 0.0, 0.0, 0.0, 0.0}, + { 19.0, 57.0, 2.0, 15.0, 42.0, 0.0, 0.0, 0.0, 0.0}}; + +const double tol = 1.0e-13; + + +int main() + +{ + int i, j, k, nFail, status; + double img[2][9], *pcij, pix[2][9], resid, residmax; + struct linprm lin; + + + printf("Testing WCSLIB linear transformation routines (tlin.c)\n" + "------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of lin status return values:\n"); + for (status = 1; status <= 6; status++) { + printf("%4d: %s.\n", status, lin_errmsg[status]); + } + + + lin.flag = -1; + linini(1, NAXIS, &lin); + + pcij = lin.pc; + for (i = 0; i < lin.naxis; i++) { + lin.crpix[i] = CRPIX[i]; + + for (j = 0; j < lin.naxis; j++) { + *(pcij++) = PC[i][j]; + } + + lin.cdelt[i] = CDELT[i]; + } + + for (k = 0; k < NCOORD; k++) { + printf("\nPIX %d:", k+1); + for (j = 0; j < NAXIS; j++) { + printf("%14.8f", pix0[k][j]); + } + } + printf("\n"); + + if ((status = linp2x(&lin, NCOORD, NELEM, pix0[0], img[0]))) { + printf("linp2x ERROR %d\n", status); + return 1; + } + + for (k = 0; k < NCOORD; k++) { + printf("\nIMG %d:", k+1); + for (j = 0; j < NAXIS; j++) { + printf("%14.8f", img[k][j]); + } + } + printf("\n"); + + if ((status = linx2p(&lin, NCOORD, NELEM, img[0], pix[0]))) { + printf("linx2p ERROR %d\n", status); + return 1; + } + + for (k = 0; k < NCOORD; k++) { + printf("\nPIX %d:", k+1); + for (j = 0; j < NAXIS; j++) { + printf("%14.8f", pix[k][j]); + } + } + printf("\n"); + + // Check closure. + nFail = 0; + residmax = 0.0; + for (k = 0; k < NCOORD; k++) { + for (j = 0; j < NAXIS; j++) { + resid = fabs(pix[k][j] - pix0[k][j]); + if (residmax < resid) residmax = resid; + if (resid > tol) nFail++; + } + } + + printf("\nlinp2x/linx2p: Maximum closure residual = %.1e pixel.\n", + residmax); + + linfree(&lin); + + + if (nFail) { + printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", + nFail); + } else { + printf("\nPASS: All closure residuals are within reporting tolerance.\n"); + } + + return nFail; +} diff --git a/deps/wcslib/C/test/tlog.c b/deps/wcslib/C/test/tlog.c new file mode 100644 index 0000000..5892abb --- /dev/null +++ b/deps/wcslib/C/test/tlog.c @@ -0,0 +1,119 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tlog.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tlog tests the logarithmic coordinate transformation routines for closure. +* +*---------------------------------------------------------------------------*/ + +#include +#include + +#include + + +#define NCRD 10000 + +const double tol = 2.0e-13; + + +int main() + +{ + register int j, k; + int nFail = 0, stat1[NCRD], stat2[NCRD], status; + double logc[NCRD], resid, residmax, step, x0[NCRD], x1[NCRD]; + double crval = 3.3; + + + printf( + "Testing closure of WCSLIB logarithmic coordinate routines (tlog.c)\n" + "------------------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of log status return values:\n"); + for (status = 2; status <= 3; status++) { + printf("%4d: %s.\n", status, log_errmsg[status]); + } + + + // Construct a logarithmic axis and test closure. + step = (40.0/NCRD) / 2.0; + for (j = 0, k = -NCRD; j < NCRD; j++, k += 2) { + x0[j] = k*step; + } + printf("\nLogarithmic range: %.1f to %.1f, step: %.4f\n", x0[0], x0[NCRD-1], + x0[1] - x0[0]); + + // Convert the first to the second. + if ((status = logx2s(crval, NCRD, 1, 1, x0, logc, stat1))) { + printf("logx2s ERROR %d: %s.\n", status, log_errmsg[status]); + } + + // Convert the second back to the first. + if ((status = logs2x(crval, NCRD, 1, 1, logc, x1, stat2))) { + printf("logs2x ERROR %d: %s.\n", status, log_errmsg[status]); + } + + residmax = 0.0; + + // Test closure. + for (j = 0; j < NCRD; j++) { + if (stat1[j]) { + printf("logx2s: x =%20.12e -> log = ???, stat = %d\n", x0[j], stat1[j]); + continue; + } + + if (stat2[j]) { + printf("logs2x: x =%20.12e -> log =%20.12e -> x = ???, stat = %d\n", + x0[j], logc[j], stat2[j]); + continue; + } + + if (x0[j] == 0.0) { + resid = fabs(x1[j] - x0[j]); + } else { + resid = fabs((x1[j] - x0[j]) / x0[j]); + if (resid > residmax) residmax = resid; + } + + if (resid > tol) { + nFail++; + printf("logx2s: x =%20.12e -> log =%20.12e ->\n x =%20.12e, " + "resid =%20.12e\n", x0[j], logc[j], x1[j], resid); + } + } + + if (nFail) printf("\n"); + printf("logx2s/logs2x: Maximum closure residual = %.1e\n", residmax); + + + if (nFail) { + printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", + nFail); + } else { + printf("\nPASS: All closure residuals are within reporting tolerance.\n"); + } + + return nFail; +} diff --git a/deps/wcslib/C/test/tpih1.c b/deps/wcslib/C/test/tpih1.c new file mode 100644 index 0000000..a9dcfc4 --- /dev/null +++ b/deps/wcslib/C/test/tpih1.c @@ -0,0 +1,202 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tpih1.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tpih1 tests wcspih(), the WCS FITS parser for image headers, and wcsfix(), +* which translates non-standard constructs. It reads a test header and uses +* wcsprt() to print the resulting wcsprm structs. +* +* Input comes from file "pih.fits" using either fits_hdr2str() from CFITSIO +* if the DO_CFITSIO preprocessor is defined, or read directly using fgets() +* otherwise. +* +*---------------------------------------------------------------------------*/ + +#include + +#include +#include + +#if defined HAVE_CFITSIO && defined DO_CFITSIO +#include +#endif + +#include +#include +#include +#include + +int main() + +{ + char infile[] = "pih.fits"; + char a, *hptr; + int alts[27], ctrl, ialt, iblock, ifix, ikeyrec, iwcs, nkeyrec, nreject, + nwcs, relax, stat[NWCSFIX], status; + struct wcsprm *wcs; +#if defined HAVE_CFITSIO && defined DO_CFITSIO + char *header; + fitsfile *fptr; +#else + char keyrec[81], header[288001]; + int gotend, k; + FILE *fptr; +#endif + + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + printf("Testing WCSLIB parser for FITS image headers (tpih1.c)\n" + "------------------------------------------------------\n\n"); + + // Read in the FITS header, excluding COMMENT and HISTORY keyrecords. +#if defined HAVE_CFITSIO && defined DO_CFITSIO + status = 0; + if (fits_open_file(&fptr, infile, READONLY, &status)) { + fits_report_error(stderr, status); + return 1; + } + + if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { + fits_report_error(stderr, status); + return 1; + } + + fits_close_file(fptr, &status); +#else + if ((fptr = fopen(infile, "r")) == 0) { + fprintf(stderr, "ERROR opening %s\n", infile); + return 1; + } + + k = 0; + nkeyrec = 0; + gotend = 0; + for (iblock = 0; iblock < 100; iblock++) { + for (ikeyrec = 0; ikeyrec < 36; ikeyrec++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + if (strncmp(keyrec, " ", 8) == 0) continue; + if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; + if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; + + memcpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 8) == 0) { + // An END keyrecord was read, but read the rest of the block. + gotend = 1; + } + } + + if (gotend) break; + } + fclose(fptr); +#endif + + fprintf(stderr, "Found %d non-comment header keyrecords.\n\n", nkeyrec); + + + // Parse the header, allowing all recognized non-standard WCS keywords and + // usage. All WCS keyrecords are culled from the header, illegal ones are + // reported. + relax = WCSHDR_all; + ctrl = -2; + fprintf(stderr, "\nIllegal or extraneous WCS header keyrecords rejected " + "by wcspih():\n"); + if ((status = wcspih(header, nkeyrec, relax, ctrl, &nreject, &nwcs, + &wcs))) { + fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcs_errmsg[status]); + } + if (!nreject) fprintf(stderr, "(none)\n"); + + + // List the remaining keyrecords. + printf("\n\nNon-WCS header keyrecords ignored by wcspih():\n"); + hptr = header; + while (*hptr) { + printf("%.80s\n", hptr); + hptr += 80; + } +#if defined HAVE_CFITSIO && defined DO_CFITSIO + fits_free_memory(header, &status); +#endif + + + // Summarize what was found. + status = wcsidx(nwcs, &wcs, alts); + printf("\n\nFound %d alternate coordinate descriptions with indices:\n ", + nwcs); + for (a = 'A'; a <= 'Z'; a++) { + printf("%2c", a); + } + printf("\n"); + for (ialt = 0; ialt < 27; ialt++) { + if (alts[ialt] < 0) { + printf(" -"); + } else { + printf("%2d", alts[ialt]); + } + } + printf("\n"); + + + // Fix non-standard usage and print each of the wcsprm structs. The output + // from wcsprt() will be written to an internal buffer and then printed just + // to show that it can be done. + wcsprintf_set(0x0); + for (iwcs = 0; iwcs < nwcs; iwcs++) { + wcsprintf("\n------------------------------------" + "------------------------------------\n"); + + // Fix non-standard WCS keyvalues. + if ((status = wcsfix(7, 0, wcs+iwcs, stat))) { + printf("wcsfix ERROR, status returns: ("); + for (ifix = 0; ifix < NWCSFIX; ifix++) { + printf(ifix ? ", %d" : "%d", stat[ifix]); + } + printf(")\n\n"); + } + + if ((status = wcsset(wcs+iwcs))) { + fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); + continue; + } + + if ((status = wcsprt(wcs+iwcs))) { + fprintf(stderr, "wcsprt ERROR %d: %s.\n", status, wcs_errmsg[status]); + } + } + printf("%s", wcsprintf_buf()); + + // Defeat spurious reporting of memory leaks. + wcsprintf_set(stdout); + wcsvfree(&nwcs, &wcs); + + return 0; +} diff --git a/deps/wcslib/C/test/tpih1.out b/deps/wcslib/C/test/tpih1.out new file mode 100644 index 0000000..8d519ca --- /dev/null +++ b/deps/wcslib/C/test/tpih1.out @@ -0,0 +1,798 @@ +Testing WCSLIB parser for FITS image headers (tpih1.c) +------------------------------------------------------ + +Found 203 non-comment header keyrecords. + + +Illegal or extraneous WCS header keyrecords rejected by wcspih(): +LONPOLEX= 180.0 / [deg] Native longitude of the celestial pole + Rejected (1), syntactically valid WCS keyrecord has no effect. +LATPOLEX= -999.0 / [deg] Native latitude of the celestial pole + Rejected (2), syntactically valid WCS keyrecord has no effect. +RESTFRQX= 1667.3590E6 / [Hz] OH maser line rest frequency + Rejected (3), syntactically valid WCS keyrecord has no effect. +RESTWAVX= 0.17980079 / [m] OH maser line rest wavelength + Rejected (4), syntactically valid WCS keyrecord has no effect. +WCSNAMEX= 'eXtraneous' / Name of this coordinate system + Rejected (5), syntactically valid WCS keyrecord has no effect. +RADESYSX= 'ICRS' / Mean equatorial coordinates, IAU 1984 system + Rejected (6), syntactically valid WCS keyrecord has no effect. +EQUINOXX= 1950.0 / [yr] Equinox of equatorial coordinates + Rejected (7), syntactically valid WCS keyrecord has no effect. +SPECSYSX= 'HELIOCEN' / Reference frame of spectral coordinates + Rejected (8), syntactically valid WCS keyrecord has no effect. +SSYSOBSX= 'GEOCENTR' / Reference frame of observation + Rejected (9), syntactically valid WCS keyrecord has no effect. +VELOSYSX= 30000.0 / [m/s] Bary-topo velocity towards the source + Rejected (10), syntactically valid WCS keyrecord has no effect. +ZSOURCEX= 0.0456 / Redshift of the source + Rejected (11), syntactically valid WCS keyrecord has no effect. +SSYSSRCX= 'LSRK' / Reference frame of source redshift + Rejected (12), syntactically valid WCS keyrecord has no effect. +VELANGLX= 35.25 / Velocity orientation angle + Rejected (13), syntactically valid WCS keyrecord has no effect. + + +Non-WCS header keyrecords ignored by wcspih(): +SIMPLE = F / Conforms to FITS standard? NO! +BITPIX = -32 / IEEE single precision floating point +NAXIS = 0 / No image data +ALTRPIX = 0.0 / Alternate reference pixel (not handled) +ALTRVAL = 0.0 / Alternate reference value (not handled) +END + + +Found 3 alternate coordinate descriptions with indices: + 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 + 0 1 - - - - - - - 2 - - - - - - - - - - - - - - - - - + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + crval: 0x
+ 150.00 -30.000 1.3945e+09 1.0000 + cunit: 0x
+ "deg" + "deg" + "Hz" + "" + ctype: 0x
+ "RA---TAN" + "DEC--TAN" + "FREQ" + "STOKES" + lonpole: 180.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 3 + npvmax: 3 + pv: 0x
+ 2 0 0.0000 + 2 1 0.0000 + 2 2 0.0000 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 15.000 0.0000 0.0000 + altlin: 4 + velref: 258 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "AIPS convention: TAN projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 1100 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.096593 -0.025882 -0.0000 -0.0000 +piximg[1][]: -0.025882 0.096593 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 62500. 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -9.6593 -2.5882 -0.0000 -0.0000 +imgpix[1][]: -2.5882 9.6593 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.6000e-05 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 180.00 -30.000 + prj: (see below) + euler: 150.00 120.00 180.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 103 + code: "TAN" + r0: 57.295780 + pv: (not used) + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "gnomonic" + category: 1 (zenithal) + pvrange: 0 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + crval: 0x
+ 150.00 -30.000 0.21498 -2000.0 + cunit: 0x
+ "deg" + "deg" + "m" + "s" + ctype: 0x
+ "RA---SZP" + "DEC--SZP" + "WAVE-F2W" + "TIME'x'" + lonpole: 195.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.211061 + npv: 7 + npvmax: 7 + pv: 0x
+ 1 1 0.0000 + 1 2 90.000 + 1 3 195.00 + 1 4 -30.000 + 2 1 0.0000 + 2 2 180.00 + 2 3 45.000 + nps: 1 + npsmax: 1 + ps: 0x
+ 4 0 UTC + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 1 + velref: 0 + alt: 'A' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Wavelength" + "Time offset" + crder: 0x
+ UNDEFINED UNDEFINED 1.0000e-11 UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED 1.0000e-12 UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "Standard representation: SZP projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: "TOPOCENT" + velosys: 1500.000000000 + zsource: 0.002500000 + ssyssrc: "LSRK" + velangl: UNDEFINED + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 0 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.086603 -0.050000 -0.0000 -0.0000 +piximg[1][]: -0.050000 0.086603 0.0000 0.0000 +piximg[2][]: -0.0000 -0.0000 -9.6353e-06 -0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -8.6603 -5.0000 -0.0000 -0.0000 +imgpix[1][]: -5.0000 8.6603 0.0000 0.0000 +imgpix[2][]: -0.0000 -0.0000 -1.0379e+05 -0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 195.00 -30.000 + prj: (see below) + euler: 150.00 120.00 195.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 102 + code: "SZP" + r0: 57.295780 + pv: (0) + 0.0000 180.00 45.000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "slant zenithal perspective" + category: 1 (zenithal) + pvrange: 103 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 -0.0000 -0.0000 1.0000 -0.0000 + -0.0000 57.296 -1.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 110 + type: "WAVE" + code: "F2W" + crval: 0.21498 + restfrq: 1420405750.000000 + restwav: 0.211061 + pv: (not used) + w: 0.0000 1.3945e+09 -6.4866e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x
+ +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: -0.086603 -0.050000 0.0000 0.0000 + pc[1][]: -0.050000 0.086603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 0.010000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + crval: 0x
+ 150.00 -30.000 0.018577 0.0000 + cunit: 0x
+ "deg" + "deg" + "" + "turn" + ctype: 0x
+ "RA---ZPN" + "DEC--ZPN" + "ZOPT-F2W" + "PHASE" + lonpole: 195.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.211061 + npv: 10 + npvmax: 10 + pv: 0x
+ 2 1 1.0000 + 2 3 0.33333 + 2 5 0.13333 + 2 7 0.053968 + 2 9 0.021869 + 2 11 0.0088632 + 2 13 0.0035921 + 2 15 0.0014558 + 2 17 0.00059003 + 2 19 0.00023913 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: -0.086603 -0.050000 0.0000 0.0000 + cd[1][]: -0.050000 0.086603 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.010000 + crota: 0x
+ 0.0000 30.000 0.0000 0.0000 + altlin: 6 + velref: 258 + alt: 'I' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Redshift" + "Phase" + crder: 0x
+ UNDEFINED UNDEFINED 5.0000e-11 UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED 5.0000e-12 UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED 0.0000 + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED 100.00 + wcsname: "IRAF representation: ZPN projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: UNDEFINED + ssysobs: "TOPOCENT" + velosys: 1500.000000000 + zsource: 0.002500000 + ssyssrc: "LSRK" + velangl: 0.000000000 + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 0 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: -0.086603 -0.050000 0.0000 0.0000 + pc[1][]: -0.050000 0.086603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 0.010000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.086603 -0.050000 0.0000 0.0000 +piximg[1][]: -0.050000 0.086603 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 0.010000 +imgpix[0][]: -8.6603 -5.0000 -0.0000 -0.0000 +imgpix[1][]: -5.0000 8.6603 0.0000 0.0000 +imgpix[2][]: -0.0000 -0.0000 -21905. -0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 100.00 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 195.00 -30.000 + prj: (see below) + euler: 150.00 120.00 195.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 107 + code: "ZPN" + r0: 57.295780 + pv: 0.0000 + 1.0000 0.0000 0.33333 0.0000 0.13333 + 0.0000 0.053968 0.0000 0.021869 0.0000 + 0.0088632 0.0000 0.0035921 0.0000 0.0014558 + 0.0000 0.00059003 0.0000 0.00023913 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "zenithal/azimuthal polynomial" + category: 1 (zenithal) + pvrange: 30 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 1 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 3.1416 8.9006e+05 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 19 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 112 + type: "ZOPT" + code: "F2W" + crval: 0.018577 + restfrq: 1420405750.000000 + restwav: 0.211061 + pv: (not used) + w: 0.21106 1.3945e+09 -1.3691e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x
+ spxS2P: 0x
+ spxP2X: 0x
diff --git a/deps/wcslib/C/test/tpih2.c b/deps/wcslib/C/test/tpih2.c new file mode 100644 index 0000000..623de64 --- /dev/null +++ b/deps/wcslib/C/test/tpih2.c @@ -0,0 +1,209 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tpih2.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tpih2 tests wcspih(), the WCS FITS parser for image headers, by reading a +* test header and using pgsbox() to plot coordinate graticules for the +* resulting wcsprm structs. +* +* Input comes from file "pih.fits" using either fits_hdr2str() from CFITSIO +* if the DO_CFITSIO preprocessor is defined, or read directly using fgets() +* otherwise. +* +*---------------------------------------------------------------------------*/ + +// Needed to get nanosleep() from time.h. +#define _POSIX_C_SOURCE 199309L + +#include + +#include +#include +#include +#include + +#if defined HAVE_CFITSIO && defined DO_CFITSIO +#include +#endif + +#include +#include + +#include +#include + +int main() + +{ + char infile[] = "pih.fits"; + char devtyp[16], idents[3][80], nlcprm[1], opt[2]; + int c0[] = {-1, -1, -1, -1, -1, -1, -1}; + int i, ic, gcode[2], naxis[2], nkeyrec, nreject, nwcs, relax, status; + float blc[2], trc[2]; + double cache[257][4], grid1[1], grid2[1], nldprm[1]; + struct wcsprm *wcs; + nlfunc_t pgwcsl_; +#if defined HAVE_CFITSIO && defined DO_CFITSIO + char *header; + fitsfile *fptr; +#else + char keyrec[81], header[28801]; + int gotend, j, k; + FILE *fptr; +#endif + + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + printf("Testing WCSLIB parser for FITS image headers (tpih2.c)\n" + "------------------------------------------------------\n\n"); + + // Read in the FITS header, excluding COMMENT and HISTORY keyrecords. +#if defined HAVE_CFITSIO && defined DO_CFITSIO + status = 0; + + if (fits_open_file(&fptr, infile, READONLY, &status)) { + fits_report_error(stderr, status); + return 1; + } + + if (fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status)) { + fits_report_error(stderr, status); + return 1; + } + + fits_close_file(fptr, &status); +#else + if ((fptr = fopen(infile, "r")) == 0x0) { + printf("ERROR opening %s\n", infile); + return 1; + } + + k = 0; + nkeyrec = 0; + gotend = 0; + for (j = 0; j < 10; j++) { + for (i = 0; i < 36; i++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + if (strncmp(keyrec, " ", 8) == 0) continue; + if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; + if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; + + memcpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 8) == 0) { + // An END keyrecord was read, but read the rest of the block. + gotend = 1; + } + } + + if (gotend) break; + } + fclose(fptr); +#endif + + fprintf(stderr, "Found %d non-comment header keyrecords.\n", nkeyrec); + + relax = WCSHDR_all; + if ((status = wcspih(header, nkeyrec, relax, 2, &nreject, &nwcs, &wcs))) { + fprintf(stderr, "wcspih ERROR %d: %s.\n", status, wcs_errmsg[status]); + } +#if defined HAVE_CFITSIO && defined DO_CFITSIO + fits_free_memory(header, &status); +#endif + + // Plot setup. + naxis[0] = 1024; + naxis[1] = 1024; + + blc[0] = 0.5f; + blc[1] = 0.5f; + trc[0] = naxis[0] + 0.5f; + trc[1] = naxis[1] + 0.5f; + + strcpy(devtyp, "/XWINDOW"); + cpgbeg(0, devtyp, 1, 1); + cpgvstd(); + + cpgwnad(0.0f, 1.0f, 0.0f, 1.0f); + cpgask(1); + cpgpage(); + + // Annotation. + strcpy(idents[0], "Right ascension"); + strcpy(idents[1], "Declination"); + + opt[0] = 'G'; + opt[1] = 'E'; + + // Compact lettering. + cpgsch(0.8f); + + // Draw full grid lines. + cpgsci(1); + gcode[0] = 2; + gcode[1] = 2; + grid1[0] = 0.0; + grid2[0] = 0.0; + + for (i = 0; i < nwcs; i++) { + if ((status = wcsset(wcs+i))) { + fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); + continue; + } + + // Get WCSNAME out of the wcsprm struct. + strcpy(idents[2], (wcs+i)->wcsname); + printf("\n%s\n", idents[2]); + + // Draw the celestial grid. The grid density is set for each world + // coordinate by specifying LABDEN = 1224. + ic = -1; + cpgsbox(blc, trc, idents, opt, 0, 1224, c0, gcode, 0.0, 0, grid1, 0, + grid2, 0, pgwcsl_, 1, WCSLEN, 1, nlcprm, (int *)(wcs+i), nldprm, 256, + &ic, cache, &status); + + // Draw the frame. + cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); + + // Allow 500ms to view the plot on fast machines. + struct timespec nano = {(time_t)0, 500000000L}; + nanosleep(&nano, 0x0); + + cpgpage(); + } + + status = wcsvfree(&nwcs, &wcs); + + cpgask(0); + cpgend(); + + return 0; +} diff --git a/deps/wcslib/C/test/tpih_pthread.c b/deps/wcslib/C/test/tpih_pthread.c new file mode 100644 index 0000000..a055a5a --- /dev/null +++ b/deps/wcslib/C/test/tpih_pthread.c @@ -0,0 +1,172 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tpih_pthread.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tpih_pthread tests the thread safety of wcspih(), the WCS FITS parser for +* image headers. It closely follows tpih1.c, launching multiple threads in +* rapid succession to read a test header. +* +* Input comes from file "pih.fits" read directly using fgets(). +* +*---------------------------------------------------------------------------*/ + +#include + +#include +#include +#include +#include + +#include + +#define NTHREAD 8 + +pthread_t threadId[NTHREAD]; + +void *threadFn(void *threadarg); + +struct threadArg { + char *header; + int nkeyrec; + int relax; + int ctrl; +}; + +struct threadRet { + int status; + int nreject; + int nwcs; + struct wcsprm *wcs; +} threadret[NTHREAD]; + + +int main(void) +{ + char infile[] = "pih.fits"; + int nkeyrec = 0; + + // Set for unbuffered output so messages are printed immediately. + setvbuf(stdout, NULL, _IONBF, 0); + + printf("Testing WCSLIB header parser for thread safety (tpih_pthread.c)\n" + "---------------------------------------------------------------\n\n"); + + // Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + FILE *fptr; + if ((fptr = fopen(infile, "r")) == 0) { + fprintf(stderr, "ERROR opening %s\n", infile); + return 1; + } + + char keyrec[81], header[288001]; + int k = 0; + int gotend = 0; + for (int iblock = 0; iblock < 100; iblock++) { + for (int ikeyrec = 0; ikeyrec < 36; ikeyrec++) { + if (fgets(keyrec, 81, fptr) == 0) { + break; + } + + // Cull COMMENT and HISTORY keyrecords. + if (strncmp(keyrec, " ", 8) == 0) continue; + if (strncmp(keyrec, "COMMENT ", 8) == 0) continue; + if (strncmp(keyrec, "HISTORY ", 8) == 0) continue; + + memcpy(header+k, keyrec, 80); + k += 80; + nkeyrec++; + + if (strncmp(keyrec, "END ", 8) == 0) { + // An END keyrecord was read, but read the rest of the block. + gotend = 1; + } + } + + if (gotend) break; + } + fclose(fptr); + + fprintf(stderr, "Found %d non-comment header keyrecords.\n\n", nkeyrec); + + // The threadArg struct contains constant data shared by all threads. + struct threadArg threadarg = {header, nkeyrec, WCSHDR_all, 0}; + for (int iloop = 0; iloop < 10; iloop++) { + printf("\nPass %d:\n", iloop); + + // Launch multiple threads parsing the same header. + for (int ithread = 0; ithread < NTHREAD; ithread++) { + printf("Thread %d...\n", ithread); + + int status; + if ((status = pthread_create(&(threadId[ithread]), NULL, &threadFn, + &threadarg))) { + printf("Failed to create thread %d: %s", ithread, strerror(status)); + } else { + printf("Thread %d created successfully.\n", ithread); + } + } + + // Wait for each thread to finish. + for (int ithread = 0; ithread < NTHREAD; ithread++) { + struct threadRet *ret; + pthread_join(threadId[ithread], (void**)&ret); + printf("Thread %d status return: %d.\n", ithread, ret->status); + + // Free memory allocated by wcspih(). + wcsvfree(&ret->nwcs, &ret->wcs); + } + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Invoke wcspih() in a thread. +----------------------------------------------------------------------------*/ + +void *threadFn(void *threadarg) +{ + // Determine our thread index. + pthread_t selfId = pthread_self(); + int ithread; + for (ithread = 0; ithread < NTHREAD; ithread++) { + if (pthread_equal(selfId, threadId[ithread])) { + break; + } + } + + printf("Thread %d processing started.\n", ithread); + + // Invoke wcspih(). + struct threadArg *arg = (struct threadArg *)threadarg; + struct threadRet *ret = threadret + ithread; + ret->status = wcspih(arg->header, arg->nkeyrec, arg->relax, arg->ctrl, + &ret->nreject, &ret->nwcs, &ret->wcs); + + // Terminate the thread. + printf("Thread %d processing finished.\n", ithread); + pthread_exit(ret); + + return NULL; +} diff --git a/deps/wcslib/C/test/tprj1.c b/deps/wcslib/C/test/tprj1.c new file mode 100644 index 0000000..e7cfb58 --- /dev/null +++ b/deps/wcslib/C/test/tprj1.c @@ -0,0 +1,346 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tprj1.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tproj1 tests spherical projections for closure. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include +#include + +int projex(char pcode[4], struct prjprm *prj, int north, int south, + double tol); + +int main() + +{ + int nFail = 0, status; + const double tol = 1.0e-9; + struct prjprm prj; + + + printf( + "Testing closure of WCSLIB spherical projection routines (tprj1.c)\n" + "-----------------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of prj status return values:\n"); + for (status = 1; status <= 4; status++) { + printf("%4d: %s.\n", status, prj_errmsg[status]); + } + + printf("\n"); + + + prjini(&prj); + + // AZP: zenithal/azimuthal perspective. + prj.pv[1] = 0.5; + prj.pv[2] = 30.0; + nFail += projex("AZP", &prj, 90, 5, tol); + + // SZP: slant zenithal perspective. + prj.pv[1] = 0.5; + prj.pv[2] = 210.0; + prj.pv[3] = 60.0; + nFail += projex("SZP", &prj, 90, -90, tol); + + // TAN: gnomonic. + nFail += projex("TAN", &prj, 90, 5, tol); + + // STG: stereographic. + nFail += projex("STG", &prj, 90, -85, tol); + + // SIN: orthographic/synthesis. + prj.pv[1] = -0.3; + prj.pv[2] = 0.5; + nFail += projex("SIN", &prj, 90, 45, tol); + + // ARC: zenithal/azimuthal equidistant. + nFail += projex("ARC", &prj, 90, -90, tol); + + // ZPN: zenithal/azimuthal polynomial. + prj.pv[0] = 0.00000; + prj.pv[1] = 0.95000; + prj.pv[2] = -0.02500; + prj.pv[3] = -0.15833; + prj.pv[4] = 0.00208; + prj.pv[5] = 0.00792; + prj.pv[6] = -0.00007; + prj.pv[7] = -0.00019; + prj.pv[8] = 0.00000; + prj.pv[9] = 0.00000; + nFail += projex("ZPN", &prj, 90, 10, tol); + + // ZEA: zenithal/azimuthal equal area. + nFail += projex("ZEA", &prj, 90, -85, tol); + + // AIR: Airy's zenithal projection. + prj.pv[1] = 45.0; + nFail += projex("AIR", &prj, 90, -85, tol); + + // CYP: cylindrical perspective. + prj.pv[1] = 3.0; + prj.pv[2] = 0.8; + nFail += projex("CYP", &prj, 90, -90, tol); + + // CEA: cylindrical equal area. + prj.pv[1] = 0.75; + nFail += projex("CEA", &prj, 90, -90, tol); + + // CAR: plate carree. + nFail += projex("CAR", &prj, 90, -90, tol); + + // MER: Mercator's. + nFail += projex("MER", &prj, 85, -85, tol); + + // SFL: Sanson-Flamsteed. + nFail += projex("SFL", &prj, 90, -90, tol); + + // PAR: parabolic. + nFail += projex("PAR", &prj, 90, -90, tol); + + // MOL: Mollweide's projection. + nFail += projex("MOL", &prj, 90, -90, tol); + + // AIT: Hammer-Aitoff. + nFail += projex("AIT", &prj, 90, -90, tol); + + // COP: conic perspective. + prj.pv[1] = 60.0; + prj.pv[2] = 15.0; + nFail += projex("COP", &prj, 90, -25, tol); + + // COE: conic equal area. + prj.pv[1] = 60.0; + prj.pv[2] = -15.0; + nFail += projex("COE", &prj, 90, -90, tol); + + // COD: conic equidistant. + prj.pv[1] = -60.0; + prj.pv[2] = 15.0; + nFail += projex("COD", &prj, 90, -90, tol); + + // COO: conic orthomorphic. + prj.pv[1] = -60.0; + prj.pv[2] = -15.0; + nFail += projex("COO", &prj, 85, -90, tol); + + // BON: Bonne's projection. + prj.pv[1] = 30.0; + nFail += projex("BON", &prj, 90, -90, tol); + + // PCO: polyconic. + nFail += projex("PCO", &prj, 90, -90, tol); + + // TSC: tangential spherical cube. + nFail += projex("TSC", &prj, 90, -90, tol); + + // CSC: COBE quadrilateralized spherical cube. + nFail += projex("CSC", &prj, 90, -90, 4.0e-2); + + // QSC: quadrilateralized spherical cube. + nFail += projex("QSC", &prj, 90, -90, tol); + + // HPX: HEALPix projection. + prj.pv[1] = 4.0; + prj.pv[2] = 3.0; + nFail += projex("HPX", &prj, 90, -90, tol); + + // XPH: HEALPix polar, aka "butterfly" projection. + nFail += projex("XPH", &prj, 90, -90, tol); + + + if (nFail) { + printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", + nFail); + } else { + printf("\nPASS: All closure residuals are within reporting tolerance.\n"); + } + + return nFail; +} + + +/*---------------------------------------------------------------------------- +* projex() exercises the spherical projection routines. +* +* Given: +* pcode[4] char Projection code. +* north int Northern cutoff latitude, degrees. +* south int Southern cutoff latitude, degrees. +* tol double Reporting tolerance, degrees. +* +* Given and returned: +* prj prjprm* Projection parameters. +* +* Function return value: +* int Number of results exceeding reporting tolerance. +*---------------------------------------------------------------------------*/ + +int projex( + char pcode[4], + struct prjprm *prj, + int north, + int south, + double tol) + +{ + int lat, lng, nFail = 0, stat1[361], stat2[361], statr[25][25], status; + register int i, j; + double dlat, dlatmx, dlng, dlngmx, dr, drmax, dx, dy; + double lat1, lat2[361], lng1[361], lng2[361], x[361], y[361]; + double latr[25][25], lngr[25][25], r, x1[25], x2[25][25], y1[25], + y2[25][25]; + + + strcpy(prj->code, pcode); + + // Uncomment the next line to test alternative initializations of + // projection parameters. + // prj->r0 = R2D; + + printf("Testing %s; latitudes%3d to%4d, reporting tolerance%8.1e deg.\n", + prj->code, north, south, tol); + + dlngmx = 0.0; + dlatmx = 0.0; + + prjset(prj); + for (lat = north; lat >= south; lat--) { + lat1 = (double)lat; + + for (j = 0, lng = -180; lng <= 180; lng++, j++) { + lng1[j] = (double)lng; + } + + if (prj->prjs2x(prj, 361, 1, 1, 1, lng1, &lat1, x, y, stat1) == 1) { + printf(" %3s(S2X) ERROR 1: %s\n", pcode, prj_errmsg[1]); + continue; + } + + if (prj->prjx2s(prj, 361, 0, 1, 1, x, y, lng2, lat2, stat2) == 1) { + printf(" %3s(X2S) ERROR 1: %s\n", pcode, prj_errmsg[1]); + continue; + } + + for (j = 0; j < 361; j++) { + if (stat1[j]) continue; + + if (stat2[j]) { + nFail++; + printf(" %3s(X2S): lng1 =%20.15f lat1 =%20.15f\n", + pcode, lng1[j], lat1); + printf(" x =%20.15f y =%20.15f\n", + x[j], y[j]); + printf(" lng2 =%20.15f lat2 =%20.15f ERROR%3d\n", + lng2[j], lat2[j], stat2[j]); + continue; + } + + dlng = fabs(lng2[j] - lng1[j]); + if (dlng > 180.0) dlng = fabs(dlng-360.0); + if (abs(lat) != 90 && dlng > dlngmx) dlngmx = dlng; + dlat = fabs(lat2[j] - lat1); + if (dlat > dlatmx) dlatmx = dlat; + + if (dlat > tol) { + nFail++; + printf(" %3s: lng1 =%20.15f lat1 =%20.15f\n", + pcode, lng1[j], lat1); + printf(" x =%20.15f y =%20.15f\n", + x[j], y[j]); + printf(" lng2 =%20.15f lat2 =%20.15f\n", + lng2[j], lat2[j]); + } else if (abs(lat) != 90) { + if (dlng > tol) { + nFail++; + printf(" %3s: lng1 =%20.15f lat1 =%20.15f\n", + pcode, lng1[j], lat1); + printf(" x =%20.15f y =%20.15f\n", + x[j], y[j]); + printf(" lng2 =%20.15f lat2 =%20.15f\n", + lng2[j], lat2[j]); + } + } + } + } + + printf(" Maximum residual (sky): lng%8.1e lat%8.1e\n", + dlngmx, dlatmx); + + + // Test closure in the neighbourhood of the reference point. + r = 1.0; + x1[12] = y1[12] = 0.0; + for (i = 0; i < 12; i++) { + x1[i] = -r; + y1[i] = -r; + x1[24-i] = r; + y1[24-i] = r; + + r /= 10.0; + } + + if ((status = prj->prjx2s(prj, 25, 25, 1, 1, x1, y1, lngr[0], latr[0], + statr[0]))) { + printf(" %3s(X2S) ERROR: %s\n", pcode, prj_errmsg[status]); + + } else if ((status = prj->prjs2x(prj, 625, 0, 1, 1, lngr[0], latr[0], + x2[0], y2[0], statr[0]))) { + printf(" %3s(S2X) ERROR: %s\n", pcode, prj_errmsg[status]); + + } else { + drmax = 0.0; + for (j = 0; j < 25; j++) { + for (i = 0; i < 25; i++) { + dx = x2[j][i] - x1[i]; + dy = y2[j][i] - y1[j]; + dr = sqrt(dx*dx + dy*dy); + + if (dr > drmax) drmax = dr; + if (dr > tol) { + nFail++; + printf(" %3s: x1 =%20.15f y1 =%20.15f\n", + pcode, x1[i], y1[j]); + printf(" lng =%20.15f lat =%20.15f\n", + lngr[j][i], latr[j][i]); + printf(" x2 =%20.15f y2 =%20.15f\n", + x2[j][i], y2[j][i]); + } + } + } + + printf(" Maximum residual (ref): dR%8.1e\n", drmax); + } + + prjini(prj); + + return nFail; +} diff --git a/deps/wcslib/C/test/tprj2.c b/deps/wcslib/C/test/tprj2.c new file mode 100644 index 0000000..4331040 --- /dev/null +++ b/deps/wcslib/C/test/tprj2.c @@ -0,0 +1,478 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tprj2.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tproj2 tests projection routines by plotting test graticules using PGPLOT. +* +*---------------------------------------------------------------------------*/ + +// Needed to get nanosleep() from time.h. +#define _POSIX_C_SOURCE 199309L + +#include +#include +#include +#include +#include + +#include + +#include + + +int main() + +{ + void prjplt(); + int status; + char text[80], text1[80], text2[80]; + struct prjprm prj; + + + printf("Testing WCSLIB spherical projection routines (tprj2.c)\n" + "------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of prj status return values:\n"); + for (status = 1; status <= 4; status++) { + printf("%4d: %s.\n", status, prj_errmsg[status]); + } + + printf("\n"); + + + // PGPLOT initialization. + strcpy(text, "/xwindow"); + cpgbeg(0, text, 1, 1); + + // Define pen colours. + cpgscr(0, 0.00f, 0.00f, 0.00f); + cpgscr(1, 1.00f, 1.00f, 0.00f); + cpgscr(2, 1.00f, 1.00f, 1.00f); + cpgscr(3, 0.50f, 0.50f, 0.80f); + cpgscr(4, 0.80f, 0.50f, 0.50f); + cpgscr(5, 0.80f, 0.80f, 0.80f); + cpgscr(6, 0.50f, 0.50f, 0.80f); + cpgscr(7, 0.80f, 0.50f, 0.50f); + cpgscr(8, 0.30f, 0.50f, 0.30f); + + strcpy(text1, "\n%s projection\n"); + strcpy(text2, "\n%s projection\nParameters:"); + + prjini(&prj); + + // AZP: zenithal/azimuthal perspective. + prj.pv[1] = 2.0; + prj.pv[2] = 30.0; + printf(text2, "Zenithal/azimuthal perspective"); + printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); + prjplt("AZP", 90, -90, &prj); + + // SZP: slant zenithal perspective. + prj.pv[1] = 2.0; + prj.pv[2] = 210.0; + prj.pv[3] = 60.0; + printf(text2, "Slant zenithal perspective"); + printf("%12.5f%12.5f%12.5f\n", prj.pv[1], prj.pv[2], prj.pv[3]); + prjplt("SZP", 90, -90, &prj); + + // TAN: gnomonic. + printf(text1, "Gnomonic"); + prjplt("TAN", 90, 5, &prj); + + // STG: stereographic. + printf(text1, "Stereographic"); + prjplt("STG", 90, -85, &prj); + + // SIN: orthographic. + prj.pv[1] = -0.3; + prj.pv[2] = 0.5; + printf(text2, "Orthographic/synthesis"); + printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); + prjplt("SIN", 90, -90, &prj); + + // ARC: zenithal/azimuthal equidistant. + printf(text1, "Zenithal/azimuthal equidistant"); + prjplt("ARC", 90, -90, &prj); + + // ZPN: zenithal/azimuthal polynomial. + prj.pv[0] = 0.05000; + prj.pv[1] = 0.95000; + prj.pv[2] = -0.02500; + prj.pv[3] = -0.15833; + prj.pv[4] = 0.00208; + prj.pv[5] = 0.00792; + prj.pv[6] = -0.00007; + prj.pv[7] = -0.00019; + prj.pv[8] = 0.00000; + prj.pv[9] = 0.00000; + printf(text2, "Zenithal/azimuthal polynomial"); + printf("%12.5f%12.5f%12.5f%12.5f%12.5f\n", + prj.pv[0], prj.pv[1], prj.pv[2], prj.pv[3], prj.pv[4]); + printf(" %12.5f%12.5f%12.5f%12.5f%12.5f\n", + prj.pv[5], prj.pv[6], prj.pv[7], prj.pv[8], prj.pv[9]); + prjplt("ZPN", 90, 10, &prj); + + // ZEA: zenithal/azimuthal equal area. + printf(text1, "Zenithal/azimuthal equal area"); + prjplt("ZEA", 90, -90, &prj); + + // AIR: Airy's zenithal projection. + prj.pv[1] = 45.0; + printf(text2, "Airy's zenithal"); + printf("%12.5f\n", prj.pv[1]); + prjplt("AIR", 90, -85, &prj); + + // CYP: cylindrical perspective. + prj.pv[1] = 3.0; + prj.pv[2] = 0.8; + printf(text2, "Cylindrical perspective"); + printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); + prjplt("CYP", 90, -90, &prj); + + // CEA: cylindrical equal area. + prj.pv[1] = 0.75; + printf(text2, "Cylindrical equal area"); + printf("%12.5f\n", prj.pv[1]); + prjplt("CEA", 90, -90, &prj); + + // CAR: plate carree. + printf(text1, "Plate carree"); + prjplt("CAR", 90, -90, &prj); + + // MER: Mercator's. + printf(text1, "Mercator's"); + prjplt("MER", 85, -85, &prj); + + // SFL: Sanson-Flamsteed. + printf(text1, "Sanson-Flamsteed (global sinusoid)"); + prjplt("SFL", 90, -90, &prj); + + // PAR: parabolic. + printf(text1, "Parabolic"); + prjplt("PAR", 90, -90, &prj); + + // MOL: Mollweide's projection. + printf(text1, "Mollweide's"); + prjplt("MOL", 90, -90, &prj); + + // AIT: Hammer-Aitoff. + printf(text1, "Hammer-Aitoff"); + prjplt("AIT", 90, -90, &prj); + + // COP: conic perspective. + prj.pv[1] = 60.0; + prj.pv[2] = 15.0; + printf(text2, "Conic perspective"); + printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); + prjplt("COP", 90, -25, &prj); + + // COE: conic equal area. + prj.pv[1] = 60.0; + prj.pv[2] = -15.0; + printf(text2, "Conic equal area"); + printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); + prjplt("COE", 90, -90, &prj); + + // COD: conic equidistant. + prj.pv[1] = -60.0; + prj.pv[2] = 15.0; + printf(text2, "Conic equidistant"); + printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); + prjplt("COD", 90, -90, &prj); + + // COO: conic orthomorphic. + prj.pv[1] = -60.0; + prj.pv[2] = -15.0; + printf(text2, "Conic orthomorphic"); + printf("%12.5f%12.5f\n", prj.pv[1], prj.pv[2]); + prjplt("COO", 85, -90, &prj); + + // BON: Bonne's projection. + prj.pv[1] = 30.0; + printf(text2, "Bonne's"); + printf("%12.5f\n", prj.pv[1]); + prjplt("BON", 90, -90, &prj); + + // PCO: polyconic. + printf(text1, "Polyconic"); + prjplt("PCO", 90, -90, &prj); + + // TSC: tangential spherical cube. + printf(text1, "Tangential spherical cube"); + prjplt("TSC", 90, -90, &prj); + + // CSC: COBE quadrilateralized spherical cube. + printf(text1, "COBE quadrilateralized spherical cube"); + prjplt("CSC", 90, -90, &prj); + + // QSC: quadrilateralized spherical cube. + printf(text1, "Quadrilateralized spherical cube"); + prjplt("QSC", 90, -90, &prj); + + // HPX: HEALPix projection. + prj.pv[1] = 4.0; + prj.pv[2] = 3.0; + printf(text1, "HEALPix"); + prjplt("HPX", 90, -90, &prj); + + // XPH: HEALPix polar, aka "butterfly" projection. + printf(text1, "Butterfly"); + prjplt("XPH", 90, -90, &prj); + + cpgask(0); + cpgend(); + + return 0; +} + + +/*---------------------------------------------------------------------------- +* PRJPLT draws a 15 degree coordinate graticule. +* +* Given: +* pcode[4] char Projection mnemonic. +* north int Northern cutoff latitude, degrees. +* south int Southern cutoff latitude, degrees. +* +* Given and returned: +* prj prjprm* Projection parameters. +*---------------------------------------------------------------------------*/ + +void prjplt(pcode, north, south, prj) + +char pcode[4]; +int north, south; +struct prjprm *prj; + +{ + char text[80]; + int ci, h, ilat, ilng, interrupted, len, stat[361]; + register int j, k; + float hx, hy, sx, sy, xr[512], yr[512]; + double lat[361], lng[361], x[361], y[361]; + + strcpy(prj->code, pcode); + + printf("Plotting %s; latitudes%3d to%4d.\n", prj->code, north, south); + + cpgask(0); + + prjset(prj); + if (prj->category == QUADCUBE) { + // Draw the perimeter of the quadcube projection. + cpgenv(-335.0f, 65.0f, -200.0f, 200.0f, 1, -2); + cpgsci(2); + sprintf(text,"%s - 15 degree graticule", pcode); + cpgtext(-340.0f, -220.0f, text); + + cpgsci(8); + + xr[0] = 45.0 + prj->x0; + yr[0] = 45.0 - prj->y0; + xr[1] = 45.0 + prj->x0; + yr[1] = 3.0*45.0 - prj->y0; + xr[2] = -45.0 + prj->x0; + yr[2] = 3.0*45.0 - prj->y0; + xr[3] = -45.0 + prj->x0; + yr[3] = -3.0*45.0 - prj->y0; + xr[4] = 45.0 + prj->x0; + yr[4] = -3.0*45.0 - prj->y0; + xr[5] = 45.0 + prj->x0; + yr[5] = 45.0 - prj->y0; + xr[6] = -7.0*45.0 + prj->x0; + yr[6] = 45.0 - prj->y0; + xr[7] = -7.0*45.0 + prj->x0; + yr[7] = -45.0 - prj->y0; + xr[8] = 45.0 + prj->x0; + yr[8] = -45.0 - prj->y0; + cpgline(9, xr, yr); + + } else { + cpgenv(-200.0f, 200.0f, -200.0f, 200.0f, 1, -2); + cpgsci(2); + sprintf(text,"%s - 15 degree graticule", pcode); + cpgtext(-240.0f, -220.0f, text); + + if (prj->category == HEALPIX) { + cpgsci(8); + + if (strcmp(pcode, "HPX") == 0) { + // Draw the perimeter of the HEALPix projection. + h = (int)(prj->pv[1] + 0.5); + sx = 180.0f / h; + sy = sx * (int)(prj->pv[2] + 1.5) / 2.0f; + + hx = 180.0f + prj->x0; + hy = sy - sx - prj->y0; + cpgmove(hx, hy); + + for (j = 0; j < h; j++) { + hx -= sx; + hy += sx; + cpgdraw(hx, hy); + + hx -= sx; + hy -= sx; + cpgdraw(hx, hy); + } + + hx = 180.0f + prj->x0; + hy = -sy + sx - prj->y0; + + k = ((int)prj->pv[2])%2 ? 1 : -1; + if (k == -1) hy -= sx; + + cpgmove(hx, hy); + + for (j = 0; j < h; j++) { + hx -= sx; + hy -= k*sx; + cpgdraw(hx, hy); + + hx -= sx; + hy += k*sx; + cpgdraw(hx, hy); + } + + } else if (strcmp(pcode, "XPH") == 0) { + for (ilng = -90; ilng <= 180; ilng+=90) { + lng[0] = (double)ilng - 0.0001; + + for (j = 0, ilat = 90; ilat >= -90; ilat--, j++) { + lat[j] = (double)ilat; + } + + prj->prjs2x(prj, 1, 181, 1, 1, lng, lat, x, y, stat); + + for (j = 0; j < 181; j++) { + xr[j] = -x[j]; + yr[j] = y[j]; + } + + cpgline(181, xr, yr); + } + } + } + } + + + ci = 1; + for (ilng = -180; ilng <= 180; ilng+=15) { + if (++ci > 7) ci = 2; + + lng[0] = (double)ilng; + + cpgsci(ilng?ci:1); + + len = north - south + 1; + for (j = 0, ilat = north; ilat >= south; ilat--, j++) { + lat[j] = (double)ilat; + } + + prj->prjs2x(prj, 1, len, 1, 1, lng, lat, x, y, stat); + + k = 0; + for (j = 0; j < len; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + if (prj->category == QUADCUBE && j > 0) { + if (fabs(x[j] - x[j-1]) > 2.0 || fabs(y[j] - y[j-1]) > 5.0) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + } + } else if (strcmp(pcode, "HPX") == 0 && ilng == 180) { + if (x[j] > 180.0) { + continue; + } + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + } + + ci = 1; + interrupted = (prj->category == QUADCUBE || prj->category == HEALPIX); + for (ilat = -90; ilat <= 90; ilat += 15) { + if (++ci > 7) ci = 2; + + if (ilat > north) continue; + if (ilat < south) continue; + + lat[0] = (double)ilat; + + cpgsci(ilat?ci:1); + + for (j = 0, ilng = -180; ilng <= 180; ilng++, j++) { + lng[j] = (double)ilng; + } + + prj->prjs2x(prj, 361, 1, 1, 1, lng, lat, x, y, stat); + + k = 0; + for (j = 0; j <= 360; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + if (interrupted && j > 0) { + if (fabs(x[j] - x[j-1]) > 2.0 || fabs(y[j] - y[j-1]) > 5.0) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + } + } + + xr[k] = -x[j]; + yr[k] = y[j]; + k++; + } + + cpgline(k, xr, yr); + } + + cpgsci(1); + xr[0] = 0.0f; + yr[0] = 0.0f; + cpgpt(1, xr, yr, 21); + + // Allow 250ms to view the plot on fast machines. + struct timespec nano = {(time_t)0, 250000000L}; + nanosleep(&nano, 0x0); + + cpgask(1); + cpgpage(); + + prjini(prj); + + return; +} diff --git a/deps/wcslib/C/test/tspc.c b/deps/wcslib/C/test/tspc.c new file mode 100644 index 0000000..c547660 --- /dev/null +++ b/deps/wcslib/C/test/tspc.c @@ -0,0 +1,358 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tspc.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tspc tests the spectral transformation driver routines for closure. +* +*---------------------------------------------------------------------------*/ + +// Needed to get nanosleep() from time.h. +#define _POSIX_C_SOURCE 199309L + +#include +#include +#include +#include + +#include + +#include +#include + + +#define NSPEC 10001 + +const double tol = 1.0e-11; +const double C = 2.99792458e8; + +int closure(const char[9], double, double, int, double, double, double); + +// KPNO MARS spectrograph grism parameters. +double mars[7] = {4.5e5, 1.0, 27.0, 1.765, -1.077e6, 3.0, 5.0}; + + +int main() + +{ + printf( + "Testing closure of WCSLIB spectral transformation routines (tspc.c)\n" + "-------------------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of spc status return values:\n"); + for (int status = 1; status <= 4; status++) { + printf("%4d: %s.\n", status, spc_errmsg[status]); + } + + + // PGPLOT initialization. + char text[80]; + strcpy(text, "/xwindow"); + cpgbeg(0, text, 1, 1); + + int naxisj = NSPEC; + double crpixj = naxisj/2 + 1; + + double restfrq = 1420.40595e6; + double restwav = C/restfrq; + double x1 = 1.0e9; + double x2 = 2.0e9; + double cdeltX = (x2 - x1)/(naxisj - 1); + double crvalX = x1 + (crpixj - 1.0)*cdeltX; + printf("\nLinear frequency axis, span: %.1f to %.1f (GHz), step: %.3f " + "(kHz)\n---------------------------------------------------------" + "-----------------\n", x1*1e-9, x2*1e-9, cdeltX*1e-3); + + int nFail = 0; + nFail += closure("WAVE-F2W", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VOPT-F2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ZOPT-F2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AWAV-F2A", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VELO-F2V", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("BETA-F2V", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + + restwav = 700.0e-9; + restfrq = C/restwav; + x1 = 300.0e-9; + x2 = 900.0e-9; + cdeltX = (x2 - x1)/(naxisj - 1); + crvalX = x1 + (crpixj - 1.0)*cdeltX; + printf("\nLinear vacuum wavelength axis, span: %.0f to %.0f (nm), " + "step: %f (nm)\n---------------------------------------------" + "-----------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); + nFail += closure("FREQ-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AFRQ-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ENER-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("WAVN-W2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VRAD-W2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AWAV-W2A", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VELO-W2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("BETA-W2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + + + printf("\nLinear air wavelength axis, span: %.0f to %.0f (nm), " + "step: %f (nm)\n------------------------------------------" + "--------------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); + nFail += closure("FREQ-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AFRQ-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ENER-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("WAVN-A2F", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VRAD-A2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("WAVE-A2W", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VOPT-A2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ZOPT-A2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VELO-A2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("BETA-A2V", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + + + restfrq = 1420.40595e6; + restwav = C/restfrq; + x1 = -0.96*C; + x2 = 0.96*C; + cdeltX = (x2 - x1)/(naxisj - 1); + crvalX = x1 + (crpixj - 1.0)*cdeltX; + printf("\nLinear velocity axis, span: %.0f to %.0f m/s, step: %.0f " + "(m/s)\n------------------------------------------------------" + "--------------------\n", x1, x2, cdeltX); + nFail += closure("FREQ-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AFRQ-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ENER-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("WAVN-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VRAD-V2F", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("WAVE-V2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VOPT-V2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ZOPT-V2W", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AWAV-V2A", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + + + restwav = 650.0e-9; + restfrq = C/restwav; + x1 = 300e-9; + x2 = 1000e-9; + cdeltX = (x2 - x1)/(naxisj - 1); + crvalX = x1 + (crpixj - 1.0)*cdeltX; + printf("\nVacuum wavelength grism axis, span: %.0f to %.0f (nm), " + "step: %f (nm)\n--------------------------------------------" + "------------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); + nFail += closure("FREQ-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AFRQ-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ENER-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("WAVN-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VRAD-GRI", restfrq, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("WAVE-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VOPT-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("ZOPT-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("AWAV-GRI", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VELO-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("BETA-GRI", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + + + // Reproduce Fig. 5 of Paper III. + naxisj = 1700; + crpixj = 719.8; + crvalX = 7245.2e-10; + cdeltX = 2.956e-10; + restwav = 8500.0e-10; + restfrq = C/restwav; + x1 = crvalX + (1 - crpixj)*cdeltX; + x2 = crvalX + (naxisj - crpixj)*cdeltX; + mars[5] = 0.0; + mars[6] = 0.0; + printf("\nAir wavelength grism axis, span: %.0f to %.0f (nm), " + "step: %f (nm)\n--------------------------------------------" + "------------------------------\n", x1*1e9, x2*1e9, cdeltX*1e9); + nFail += closure("AWAV-GRA", 0.0, 0.0, naxisj, crpixj, cdeltX, crvalX); + nFail += closure("VELO-GRA", 0.0, restwav, naxisj, crpixj, cdeltX, crvalX); + + cpgask(0); + cpgend(); + + if (nFail) { + printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", + nFail); + } else { + printf("\nPASS: All closure residuals are within reporting tolerance.\n"); + } + + return nFail; +} + +//---------------------------------------------------------------------------- + +int closure ( + const char ctypeS[9], + double restfrq, + double restwav, + int naxisj, + double crpixj, + double cdeltX, + double crvalX) + +{ + int status; + + // Get keyvalues for the required spectral axis type. + char ptype, xtype; + int restreq; + double crvalS, dSdX; + if ((status = spcxps(ctypeS, crvalX, restfrq, restwav, &ptype, &xtype, + &restreq, &crvalS, &dSdX))) { + printf("ERROR %d from spcxps() for %s.\n", status, ctypeS); + return 1; + } + double cdeltS = cdeltX * dSdX; + + struct spcprm spc; + spcini(&spc); + + if (ctypeS[5] == 'G') { + // KPNO MARS spectrograph grism parameters. + spc.pv[0] = mars[0]; + spc.pv[1] = mars[1]; + spc.pv[2] = mars[2]; + spc.pv[3] = mars[3]; + spc.pv[4] = mars[4]; + spc.pv[5] = mars[5]; + spc.pv[6] = mars[6]; + } + + // Construct the axis. + double spec1[NSPEC]; + for (int j = 0; j < naxisj; j++) { + spec1[j] = (j+1 - crpixj)*cdeltS; + } + + printf("%4s (CRVALk+w) range: %13.6e to %13.6e, step: %13.6e\n", ctypeS, + crvalS+spec1[0], crvalS+spec1[naxisj-1], cdeltS); + + + // Initialize. + spc.flag = 0; + spc.crval = crvalS; + spc.restfrq = restfrq; + spc.restwav = restwav; + strncpy(spc.type, ctypeS, 4); + spc.type[4] = '\0'; + strcpy(spc.code, ctypeS+5); + + // Convert the first to the second. + int stat1[NSPEC], stat2[NSPEC]; + double spec2[NSPEC]; + if ((status = spcx2s(&spc, naxisj, 1, 1, spec1, spec2, stat1))) { + printf("spcx2s ERROR %d: %s.\n", status, spc_errmsg[status]); + } + + // Convert the second back to the first. + double clos[NSPEC]; + if ((status = spcs2x(&spc, naxisj, 1, 1, spec2, clos, stat2))) { + printf("spcs2x ERROR %d: %s.\n", status, spc_errmsg[status]); + } + + double residmax = 0.0; + + // Test closure. + int nFail = 0; + for (int j = 0; j < naxisj; j++) { + if (stat1[j]) { + printf("%s: w =%20.12e -> %s = ???, stat = %d\n", ctypeS, spec1[j], + spc.type, stat1[j]); + continue; + } + + if (stat2[j]) { + printf("%s: w =%20.12e -> %s =%20.12e -> w = ???, stat = %d\n", + ctypeS, spec1[j], spc.type, spec2[j], stat2[j]); + continue; + } + + double resid = fabs((clos[j] - spec1[j])/cdeltS); + if (resid > residmax) residmax = resid; + + if (resid > tol) { + nFail++; + printf("%s: w =%20.12e -> %s =%20.12e ->\n w =%20.12e, " + "resid =%20.12e\n", ctypeS, spec1[j], spc.type, spec2[j], + clos[j], resid); + } + } + + printf("%s: Maximum closure residual = %.1e pixel.\n", ctypeS, residmax); + + + // Draw graph. + cpgbbuf(); + cpgeras(); + + float x[NSPEC], y[NSPEC]; + float xmin = (float)(crvalS + spec1[0]); + float xmax = (float)(crvalS + spec1[naxisj-1]); + float ymin = (float)(spec2[0]) - xmin; + float ymax = ymin; + for (int j = 0; j < naxisj; j++) { + x[j] = (float)(j+1); + y[j] = (float)(spec2[j] - (crvalS + spec1[j])); + if (y[j] > ymax) ymax = y[j]; + if (y[j] < ymin) ymin = y[j]; + } + + int j = (int)crpixj + 1; + if (y[j] < 0.0) { + float tmp = ymin; + ymin = ymax; + ymax = tmp; + } + + cpgask(0); + cpgenv(1.0f, (float)naxisj, ymin, ymax, 0, -1); + + char sname[32], title[80], units[8], ylab[80]; + cpgsci(1); + cpgbox("ABNTS", 0.0f, 0, "BNTS", 0.0f, 0); + spctyp(ctypeS, 0x0, 0x0, sname, units, 0x0, 0x0, 0x0); + sprintf(ylab, "%s - correction [%s]", sname, units); + sprintf(title, "%s: CRVALk + w [%s]", ctypeS, units); + cpglab("Pixel coordinate", ylab, title); + + cpgaxis("N", 0.0f, ymax, (float)naxisj, ymax, xmin, xmax, 0.0f, 0, -0.5f, + 0.0f, 0.5f, -0.5f, 0.0f); + + cpgaxis("N", (float)naxisj, ymin, (float)naxisj, ymax, (float)(ymin/cdeltS), + (float)(ymax/cdeltS), 0.0f, 0, 0.5f, 0.0f, 0.5f, 0.1f, 0.0f); + cpgmtxt("R", 2.2f, 0.5f, 0.5f, "Pixel offset"); + + cpgline(naxisj, x, y); + cpgsci(7); + cpgpt1((float)crpixj, 0.0f, 24); + cpgebuf(); + + // Allow 200ms to view the plot on fast machines. + struct timespec nano = {(time_t)0, 200000000L}; + nanosleep(&nano, 0x0); + + printf("Type for next page: "); + (void)getchar(); + + printf("\n"); + + return nFail; +} diff --git a/deps/wcslib/C/test/tspcaips.c b/deps/wcslib/C/test/tspcaips.c new file mode 100644 index 0000000..84e9758 --- /dev/null +++ b/deps/wcslib/C/test/tspcaips.c @@ -0,0 +1,61 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tspcaips.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tspcaips does a quick test of spcaips(). Not part of the official test +* suite. +* +*---------------------------------------------------------------------------*/ + +#include +#include + +int main() + +{ + const char *(ctypes[]) = {"FREQ", "VELO", "FELO"}; + const char *(frames[]) = {"-LSR", "-HEL", "-OBS", " "}; + + char ctype[9], ctypeA[9], specsys[9]; + int i, j, status, v1, v2, velref; + + for (i = 0; i < 3; i++) { + for (j = 0; j < 4; j++) { + sprintf(ctypeA, "%s%s", ctypes[i], frames[j]); + + for (v1 = 0; v1 <= 8; v1++) { + velref = v1; + for (v2 = 0; v2 < 3; v2++) { + status = spcaips(ctypeA, velref, ctype, specsys); + printf("'%s' %3d %2d '%s' '%s'\n", ctypeA, velref, + status, ctype, specsys); + velref += 256; + } + } + + printf("\n"); + } + } + + return 0; +} diff --git a/deps/wcslib/C/test/tspcspxe.c b/deps/wcslib/C/test/tspcspxe.c new file mode 100644 index 0000000..f410303 --- /dev/null +++ b/deps/wcslib/C/test/tspcspxe.c @@ -0,0 +1,57 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tspcspxe.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tspcspxe tests function spcspxe() by deliberately generating an error. +* Not part of the official test suite. +* +*---------------------------------------------------------------------------*/ + +#include + +#include "spc.h" +#include "wcserr.h" + +int main() +{ + char ptype, xtype; + int restreq; + double crvalX, dXdS; + struct wcserr *err; + + wcserr_enable(1); + + if (spcspxe("WAVE-F2W", 0.0, 1.420e9, 0.0, &ptype, &xtype, &restreq, + &crvalX, &dXdS, &(err))) { + wcserr_prt(err, '\0'); + + } else { + printf(" P-type: %c\n", ptype); + printf(" X-type: %c\n", xtype); + printf("restreq: %d\n", restreq); + printf(" crvalX: %f\n", crvalX); + printf(" dXdS: %f\n", dXdS); + } + + return 0; +} diff --git a/deps/wcslib/C/test/tspctrne.c b/deps/wcslib/C/test/tspctrne.c new file mode 100644 index 0000000..168b34c --- /dev/null +++ b/deps/wcslib/C/test/tspctrne.c @@ -0,0 +1,63 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tspctrne.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tspctrne does a quick test of spctrne(). Not part of the official test +* suite. +* +*---------------------------------------------------------------------------*/ + +#include +#include + +#include +#include + +int main() + +{ + const char ctypeS1[] = "VOPT-F2W"; + const double crvalS1 = 1e6; + const double cdeltS1 = 1e3; + const double restfrq = 0.0; + const double restwav = 0.0; + + int status; + char ctypeS2[9]; + double cdeltS2, crvalS2; + struct wcserr *err; + + strcpy(ctypeS2, "VRAD-???"); + + wcserr_enable(1); + if (spctrne(ctypeS1, crvalS1, cdeltS1, restfrq, restwav, + ctypeS2, &crvalS2, &cdeltS2, &err)) { + wcserr_prt(err, 0x0); + return err->status; + } + + printf("'%8s' %12.6e %12.6e\n'%8s' %12.6e %12.6e\n", + ctypeS1, crvalS1, cdeltS1, ctypeS2, crvalS2, cdeltS2); + + return 0; +} diff --git a/deps/wcslib/C/test/tsph.c b/deps/wcslib/C/test/tsph.c new file mode 100644 index 0000000..b90d68a --- /dev/null +++ b/deps/wcslib/C/test/tsph.c @@ -0,0 +1,241 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tsph.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tsph tests the spherical coordinate transformation routines for closure. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include +#include + + +int main() + +{ + int j, k, lat, lng, nFail = 0; + double cel1[181][2], cel2[181][2], coslat, dlat, dlatmx, dlng, dlngmx, + eul[5], lng1[361], lng2[361], lat1, lat2[361], ntv[181][2], phi[361], + theta[361], zeta; + const double tol = 1.0e-12; + + + printf( + "Testing closure of WCSLIB coordinate transformation routines (tsph.c)\n" + "---------------------------------------------------------------------\n"); + + printf ("Reporting tolerance:%8.1e degrees of arc.\n", tol); + + dlngmx = 0.0; + dlatmx = 0.0; + + for (k = 0; k < 3; k++) { + // Set reference angles. + eul[0] = 90.0; + eul[2] = -90.0; + + if (k < 2) { + // Special-case transformations. + eul[1] = (k==0) ? 0.0 : 180.0; + } else { + eul[1] = 30.0; + } + + printf("\n%s\n%s%10.4f%10.4f%10.4f\n", + "Celestial longitude and latitude of the native pole, and native", + "longitude of the celestial pole (degrees):", eul[0], eul[1], eul[2]); + + eul[3] = cosd(eul[1]); + eul[4] = sind(eul[1]); + + // Test points at constant latitude. + for (lat = 90; lat >= -90; lat--) { + lat1 = (double)lat; + coslat = cosd(lat1); + + for (j = 0, lng = -180; lng <= 180; lng++, j++) { + lng1[j] = (double)lng; + } + + sphs2x(eul, 361, 1, 1, 1, lng1, &lat1, phi, theta); + sphx2s(eul, 361, 0, 1, 1, phi, theta, lng2, lat2); + + // Exact results are expected for special-case transformations. + if (k == 0) { + // Identity transformation. + for (j = 0; j <= 360; j++) { + if (phi[j] != lng1[j] || theta[j] != lat1) { + nFail++; + printf(" Error: lng1 =%20.15f lat1 =%20.15f\n", + lng1[j], lat1); + printf(" phi =%20.15f theta =%20.15f\n", + phi[j], theta[j]); + } + } + + } else if (k == 1) { + // Antipodal transformation. + for (j = 0; j <= 360; j++) { + if (phi[j] != -lng1[j] || theta[j] != -lat1) { + nFail++; + printf(" Error: lng1 =%20.15f lat1 =%20.15f\n", + lng1[j], lat1); + printf(" phi =%20.15f theta =%20.15f\n", + phi[j], theta[j]); + } + } + } + + // Do another round trip, just for good measure. + sphs2x(eul, 361, 0, 1, 1, lng2, lat2, phi, theta); + sphx2s(eul, 361, 0, 1, 1, phi, theta, lng2, lat2); + + // Check closure. + for (j = 0; j <= 360; j++) { + dlng = fabs(lng2[j] - lng1[j]); + if (dlng > 180.0) dlng = fabs(dlng-360.0); + dlng *= coslat; + dlat = fabs(lat2[j] - lat1); + + if (dlng > dlngmx) dlngmx = dlng; + if (dlat > dlatmx) dlatmx = dlat; + + if (dlng > tol || dlat > tol) { + nFail++; + printf("Unclosed: lng1 =%20.15f lat1 =%20.15f\n", lng1[j], lat1); + printf(" phi =%20.15f theta =%20.15f\n", phi[j], theta[j]); + printf(" lng2 =%20.15f lat2 =%20.15f\n", lng2[j], lat2[j]); + } + } + } + + // Test vector strides using points in spirals from south to north. + for (lng = 0; lng <= 360; lng++) { + for (j = 0, lat = -90; lat <= 90; j++, lat++) { + cel1[j][0] = (double)((lng+j)%360 - 180); + cel1[j][1] = (double)lat; + } + + sphs2x(eul, 181, 0, 2, 2, &(cel1[0][0]), &(cel1[0][1]), + &(ntv[0][0]), &(ntv[0][1])); + sphx2s(eul, 181, 0, 2, 2, &(ntv[0][0]), &(ntv[0][1]), + &(cel2[0][0]), &(cel2[0][1])); + + // Exact results are expected for special-case transformations. + if (k == 0) { + // Identity transformation. + for (j = 0; j <= 180; j++) { + if (ntv[j][0] != cel1[j][0] || ntv[j][1] != cel1[j][1]) { + nFail++; + printf(" Error: lng1 =%20.15f lat1 =%20.15f\n", + cel1[j][0], cel1[j][1]); + printf(" phi =%20.15f theta =%20.15f\n", + ntv[j][0], ntv[j][1]); + } + } + + } else if (k == 1) { + // Antipodal transformation. + for (j = 0; j <= 180; j++) { + if (ntv[j][0] != -cel1[j][0] || ntv[j][1] != -cel1[j][1]) { + nFail++; + printf(" Error: lng1 =%20.15f lat1 =%20.15f\n", + cel1[j][0], cel1[j][1]); + printf(" phi =%20.15f theta =%20.15f\n", + ntv[j][0], ntv[j][1]); + } + } + } + + // Check closure. + for (j = 0; j <= 180; j++) { + dlng = fabs(cel2[j][0] - cel1[j][0]); + if (dlng > 180.0) dlng = fabs(dlng - 360.0); + dlng *= cosd(cel1[j][1]); + dlat = fabs(cel2[j][1] - cel1[j][1]); + + if (dlng > dlngmx) dlngmx = dlng; + if (dlat > dlatmx) dlatmx = dlat; + + if (dlng > tol || dlat > tol) { + nFail++; + printf("Unclosed: lng1 =%20.15f lat1 =%20.15f\n", + cel1[j][0], cel1[j][1]); + printf(" phi =%20.15f theta =%20.15f\n", + ntv[j][0], ntv[j][1]); + printf(" lng2 =%20.15f lat2 =%20.15f\n", + cel2[j][0], cel2[j][1]); + } + } + } + } + + + // Test closure at points close to the pole. + for (j = -1; j <= 1; j += 2) { + zeta = 1.0; + lng1[0] = -180.0; + + for (lat = 0; lat < 12; lat++) { + lat1 = (double)j*(90.0 - zeta); + + sphs2x(eul, 1, 1, 1, 1, lng1, &lat1, phi, theta); + sphx2s(eul, 1, 1, 1, 1, phi, theta, lng2, lat2); + + dlng = fabs(lng2[0] - lng1[0]); + if (dlng > 180.0) dlng = fabs(dlng - 360.0); + dlng *= coslat; + dlat = fabs(lat2[0] - lat1); + + if (dlng > dlngmx) dlngmx = dlng; + if (dlat > dlatmx) dlatmx = dlat; + + if (dlng > tol || dlat > tol) { + nFail++; + printf("Unclosed: lng1 =%20.15f lat1 =%20.15f\n", lng1[0], lat1); + printf(" phi =%20.15f theta =%20.15f\n", phi[0], theta[0]); + printf(" lng2 =%20.15f lat2 =%20.15f\n", lng2[0], lat2[0]); + } + + zeta /= 10.0; + lng1[0] += 30.0; + } + } + + printf("\nsphs2x/sphx2s: Maximum closure residual = %.1e (lng), %.1e (lat) " + "deg.\n", dlngmx, dlatmx); + + + if (nFail) { + printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", + nFail); + } else { + printf("\nPASS: All closure residuals are within reporting tolerance.\n"); + } + + return nFail; +} diff --git a/deps/wcslib/C/test/tsphdpa.c b/deps/wcslib/C/test/tsphdpa.c new file mode 100644 index 0000000..9ced349 --- /dev/null +++ b/deps/wcslib/C/test/tsphdpa.c @@ -0,0 +1,80 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tsphdpa.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tsphdpa tests sphdpa(). +* +*---------------------------------------------------------------------------*/ +#include + +#include "sph.h" + +int main() + +{ + char c; + double dist, lat, lat0, lng, lng0, pa; + + while (1) { + printf("\nEnter reference (lng,lat): "); + if (scanf("%lf%*[ , ]%lf", &lng0, &lat0) != 2) { + printf("Input error, please try again.\n"); + continue; + } + + break; + } + + while (fgetc(stdin) != '\n'); + + while (1) { + printf("\nEnter field (lng,lat): "); + + c = fgetc(stdin); + if (c == EOF || c == '\n') { + if (c == EOF) printf("\n"); + break; + } + ungetc(c, stdin); + + if (scanf("%lf%*[ , ]%lf", &lng, &lat) != 2) {; + printf("Input error, please try again.\n"); + while (fgetc(stdin) != '\n'); + continue; + } + + while (fgetc(stdin) != '\n'); + + sphdpa(1, lng0, lat0, &lng, &lat, &dist, &pa); + + printf("(%.4f,%.4f) - (%.4f,%.4f) -> (%.4f,%.4f) (dist,pa)\n", + lng0, lat0, lng, lat, dist, pa); + + sphpad(1, lng0, lat0, &dist, &pa, &lng, &lat); + + printf("(%.4f,%.4f) + (%.4f,%.4f) -> (%.4f,%.4f) (lng,lat)\n", + lng0, lat0, dist, pa, lng, lat); + } + + return 0; +} diff --git a/deps/wcslib/C/test/tspx.c b/deps/wcslib/C/test/tspx.c new file mode 100644 index 0000000..229e96c --- /dev/null +++ b/deps/wcslib/C/test/tspx.c @@ -0,0 +1,268 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tspx.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tspx tests the spectral transformation routines for closure. +* +*---------------------------------------------------------------------------*/ + +#include +#include + +#include + +#define NSPEC 9991 + +const double C = 2.99792458e8; +const double tol = 1.0e-9; + +int closure(const char *from, const char *to, double parm, + int (*fwd)(SPX_ARGS), int (*rev)(SPX_ARGS), const double spec1[], + double spec2[]); + + +int main() + +{ + int nFail = 0, stat[NSPEC], status; + double restfrq, restwav, step; + double awav[NSPEC], freq[NSPEC], spc1[NSPEC], spc2[NSPEC], velo[NSPEC], + wave[NSPEC]; + struct spxprm spx; + + register int j, k; + + + printf( + "Testing closure of WCSLIB spectral transformation routines (tspx.c)\n" + "-------------------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of spx status return values:\n"); + for (status = 1; status <= 4; status++) { + printf("%4d: %s.\n", status, spx_errmsg[status]); + } + + restfrq = 1420.40595e6; + restwav = C/restfrq; + + + // Exercise specx(). + printf("\nTesting spectral cross-conversions (specx).\n\n"); + if ((status = specx("VELO", 4.3e5, restfrq, restwav, &spx))) { + printf("specx ERROR %d: %s.\n", status, spx_errmsg[status]); + return 1; + } + + printf(" restfrq:%20.12e\n", spx.restfrq); + printf(" restwav:%20.12e\n", spx.restwav); + printf(" wavetype:%3d\n", spx.wavetype); + printf(" velotype:%3d\n", spx.velotype); + printf("\n"); + printf(" freq:%20.12e\n", spx.freq); + printf(" afrq:%20.12e\n", spx.afrq); + printf(" ener:%20.12e\n", spx.ener); + printf(" wavn:%20.12e\n", spx.wavn); + printf(" vrad:%20.12e\n", spx.vrad); + printf(" wave:%20.12e\n", spx.wave); + printf(" vopt:%20.12e\n", spx.vopt); + printf(" zopt:%20.12e\n", spx.zopt); + printf(" awav:%20.12e\n", spx.awav); + printf(" velo:%20.12e\n", spx.velo); + printf(" beta:%20.12e\n", spx.beta); + printf("\n"); + + printf("dfreq/dafrq:%20.12e\n", spx.dfreqafrq); + printf("dafrq/dfreq:%20.12e\n", spx.dafrqfreq); + + printf("dfreq/dener:%20.12e\n", spx.dfreqener); + printf("dener/dfreq:%20.12e\n", spx.denerfreq); + + printf("dfreq/dwavn:%20.12e\n", spx.dfreqwavn); + printf("dwavn/dfreq:%20.12e\n", spx.dwavnfreq); + + printf("dfreq/dvrad:%20.12e\n", spx.dfreqvrad); + printf("dvrad/dfreq:%20.12e\n", spx.dvradfreq); + + printf("dfreq/dwave:%20.12e\n", spx.dfreqwave); + printf("dwave/dfreq:%20.12e\n", spx.dwavefreq); + + printf("dfreq/dawav:%20.12e\n", spx.dfreqawav); + printf("dawav/dfreq:%20.12e\n", spx.dawavfreq); + + printf("dfreq/dvelo:%20.12e\n", spx.dfreqvelo); + printf("dvelo/dfreq:%20.12e\n", spx.dvelofreq); + + printf("dwave/dvopt:%20.12e\n", spx.dwavevopt); + printf("dvopt/dwave:%20.12e\n", spx.dvoptwave); + + printf("dwave/dzopt:%20.12e\n", spx.dwavezopt); + printf("dzopt/dwave:%20.12e\n", spx.dzoptwave); + + printf("dwave/dawav:%20.12e\n", spx.dwaveawav); + printf("dawav/dwave:%20.12e\n", spx.dawavwave); + + printf("dwave/dvelo:%20.12e\n", spx.dwavevelo); + printf("dvelo/dwave:%20.12e\n", spx.dvelowave); + + printf("dawav/dvelo:%20.12e\n", spx.dawavvelo); + printf("dvelo/dawav:%20.12e\n", spx.dveloawav); + + printf("dvelo/dbeta:%20.12e\n", spx.dvelobeta); + printf("dbeta/dvelo:%20.12e\n", spx.dbetavelo); + printf("\n"); + + + // Construct a linear velocity spectrum. + step = (2.0*C/NSPEC) / 2.0; + for (j = 0, k = -NSPEC; j < NSPEC; j++, k += 2) { + velo[j] = (k+1)*step; + } + printf("\nVelocity range: %.3f to %.3f km/s, step: %.3f km/s\n", + velo[0]*1e-3, velo[NSPEC-1]*1e-3, (velo[1] - velo[0])*1e-3); + + // Convert it to frequency. + velofreq(restfrq, NSPEC, 1, 1, velo, freq, stat); + + // Test closure of all two-way combinations. + nFail += closure("freq", "afrq", 0.0, freqafrq, afrqfreq, freq, spc1); + nFail += closure("afrq", "freq", 0.0, afrqfreq, freqafrq, spc1, spc2); + + nFail += closure("freq", "ener", 0.0, freqener, enerfreq, freq, spc1); + nFail += closure("ener", "freq", 0.0, enerfreq, freqener, spc1, spc2); + + nFail += closure("freq", "wavn", 0.0, freqwavn, wavnfreq, freq, spc1); + nFail += closure("wavn", "freq", 0.0, wavnfreq, freqwavn, spc1, spc2); + + nFail += closure("freq", "vrad", restfrq, freqvrad, vradfreq, freq, spc1); + nFail += closure("vrad", "freq", restfrq, vradfreq, freqvrad, spc1, spc2); + + nFail += closure("freq", "wave", 0.0, freqwave, wavefreq, freq, wave); + nFail += closure("wave", "freq", 0.0, wavefreq, freqwave, wave, spc2); + + nFail += closure("freq", "awav", 0.0, freqawav, awavfreq, freq, awav); + nFail += closure("awav", "freq", 0.0, awavfreq, freqawav, awav, spc2); + + nFail += closure("freq", "velo", restfrq, freqvelo, velofreq, freq, velo); + nFail += closure("velo", "freq", restfrq, velofreq, freqvelo, velo, spc2); + + nFail += closure("wave", "vopt", restwav, wavevopt, voptwave, wave, spc1); + nFail += closure("vopt", "wave", restwav, voptwave, wavevopt, spc1, spc2); + + nFail += closure("wave", "zopt", restwav, wavezopt, zoptwave, wave, spc1); + nFail += closure("zopt", "wave", restwav, zoptwave, wavezopt, spc1, spc2); + + nFail += closure("wave", "awav", 0.0, waveawav, awavwave, wave, spc1); + nFail += closure("awav", "wave", 0.0, awavwave, waveawav, spc1, spc2); + + nFail += closure("wave", "velo", restwav, wavevelo, velowave, wave, spc1); + nFail += closure("velo", "wave", restwav, velowave, wavevelo, spc1, spc2); + + nFail += closure("awav", "velo", restwav, awavvelo, veloawav, awav, spc1); + nFail += closure("velo", "awav", restwav, veloawav, awavvelo, spc1, spc2); + + nFail += closure("velo", "beta", 0.0, velobeta, betavelo, velo, spc1); + nFail += closure("beta", "velo", 0.0, betavelo, velobeta, spc1, spc2); + + + if (nFail) { + printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", + nFail); + } else { + printf("\nPASS: All closure residuals are within reporting tolerance.\n"); + } + + return nFail; +} + +//---------------------------------------------------------------------------- + +int closure ( + const char *from, + const char *to, + double parm, + int (*fwd)(SPX_ARGS), + int (*rev)(SPX_ARGS), + const double spec1[], + double spec2[]) + +{ + static char skip = '\0'; + int nFail = 0, stat1[NSPEC], stat2[NSPEC], status; + register int j; + double clos[NSPEC], resid, residmax; + + // Convert the first to the second. + if ((status = fwd(parm, NSPEC, 1, 1, spec1, spec2, stat1))) { + printf("%s%s ERROR %d: %s.\n", from, to, status, spx_errmsg[status]); + } + + // Convert the second back to the first. + if ((status = rev(parm, NSPEC, 1, 1, spec2, clos, stat2))) { + printf("%s%s ERROR %d: %s.\n", to, from, status, spx_errmsg[status]); + } + + residmax = 0.0; + + // Test closure. + for (j = 0; j < NSPEC; j++) { + if (stat1[j]) { + printf("%c%s%s: %s = %.12e -> %s = ???, stat = %d\n", skip, from, to, + from, spec1[j], to, stat1[j]); + skip = '\0'; + continue; + } + + if (stat2[j]) { + printf("%c%s%s: %s = %.12e -> %s = %.12e -> %s = ???, stat = %d\n", + skip, to, from, from, spec1[j], to, spec2[j], from, stat2[j]); + skip = '\0'; + continue; + } + + if (spec1[j] == 0.0) { + resid = fabs(clos[j] - spec1[j]); + } else { + resid = fabs((clos[j] - spec1[j])/spec1[j]); + if (resid > residmax) residmax = resid; + } + + if (resid > tol) { + nFail++; + printf("%c%s%s: %s = %.12e -> %s = %.12e ->\n %s = %.12e, " + "resid = %.1e\n", skip, from, to, from, spec1[j], to, + spec2[j], from, clos[j], resid); + skip = '\0'; + } + } + + printf("%s%s: Maximum closure residual = %.1e\n", from, to, residmax); + if (residmax > tol) { + printf("\n"); + skip = '\0'; + } else { + skip = '\n'; + } + + return nFail; +} diff --git a/deps/wcslib/C/test/ttab1.c b/deps/wcslib/C/test/ttab1.c new file mode 100644 index 0000000..fbb400f --- /dev/null +++ b/deps/wcslib/C/test/ttab1.c @@ -0,0 +1,495 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: ttab1.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* ttab1 tests the -TAB routines for closure. +* +*---------------------------------------------------------------------------*/ + +#include +#include + +#include + +// Reporting tolerance. +const double tol = 1.0e-8; + +int main() + +{ + // These variables are used by several independent tests. + int K[2], M, nFail = 0, stat0[128], stat1[128], status, status0, status1; + double *index[1], resid, residmax, s[16], world[11][11][2], + xt0[16], xt1[16], x0[11][11][2], x1[11][11][2]; + + printf( + "Testing closure of WCSLIB tabular coordinate routines (ttab1.c)\n" + "---------------------------------------------------------------\n"); + + // List status return messages. + printf("\nList of tab status return values:\n"); + for (status = 1; status <= 5; status++) { + printf("%4d: %s.\n", status, tab_errmsg[status]); + } + + printf("\nReporting tolerance %5.1G.\n", tol); + + + // First a 1-dimensional table without index. + printf("\nOne-dimensional test without index:\n"); + M = 1; + K[0] = 10; + + struct tabprm tab; + tab.flag = -1; + tab.index = index; + if ((status = tabini(1, M, K, &tab))) { + printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); + return 1; + } + + tab.M = M; + tab.K[0] = K[0]; + tab.map[0] = 0; + tab.crval[0] = 0.0; + + tab.index[0] = 0x0; + + tab.coord[0] = 101.0; + tab.coord[1] = 102.0; + tab.coord[2] = 104.0; + tab.coord[3] = 107.0; + tab.coord[4] = 111.0; + tab.coord[5] = 116.0; + tab.coord[6] = 122.0; + tab.coord[7] = 129.0; + tab.coord[8] = 137.0; + tab.coord[9] = 146.0; + + xt0[0] = 1.0; + xt0[1] = 2.0; + xt0[2] = 3.0; + xt0[3] = 4.0; + xt0[4] = 5.0; + xt0[5] = 6.0; + xt0[6] = 7.0; + xt0[7] = 8.0; + xt0[8] = 9.0; + xt0[9] = 10.0; + + xt0[10] = 0.5; + xt0[11] = 1.1; + xt0[12] = 2.5; + xt0[13] = 4.7; + xt0[14] = 8.125; + xt0[15] = 10.5; + + status0 = tabx2s(&tab, 16, 1, (double *)xt0, (double *)s, stat0); + status1 = tabs2x(&tab, 16, 1, (double *)s, (double *)xt1, stat1); + + printf(" x -> s -> x\n"); + for (int i = 0; i < 16; i++) { + printf("%8.5f%12.5f%9.5f", xt0[i], s[i], xt1[i]); + if (stat0[i] || stat1[i]) { + printf(" ERROR\n"); + } else { + printf("\n"); + } + if (i == 9) printf("\n"); + } + + if (status0) { + printf("\ntabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); + + for (int i = 0; i < 16; i++) { + if (stat0[i]) { + printf(" tabx2s: x = %6.1f, stat = %d\n", xt0[i], stat0[i]); + } + } + } + + if (status1) { + printf("\ntabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); + + for (int i = 0; i < 16; i++) { + if (stat1[i]) { + printf(" tabs2x: s = %6.1f, stat = %d\n", s[i], stat1[i]); + } + } + } + + // Test closure. + residmax = 0.0; + for (int i = 0, nl = 1; i < 16; i++) { + if (stat0[i] || stat1[i]) continue; + + resid = fabs(xt1[i] - xt0[i]); + if (resid > residmax) residmax = resid; + + if (resid > tol) { + nFail++; + if (nl) printf("\n"); + printf(" Closure error:\n"); + printf(" x = %20.15f\n", xt0[i]); + printf(" -> s = %20.15f\n", s[i]); + printf(" -> x = %20.15f\n", xt1[i]); + nl = 0; + } + } + + // Check error handling. + printf("\n"); + printf("------------------------------------" + "------------------------------------\n" + "Test of error handling in tabx2s() and tabs2x().\n"); + xt0[0] = 0.0; + xt0[1] = 11.0; + status0 = tabx2s(&tab, 2, 1, (double *)xt0, (double *)s, stat0); + + if (status0) { + printf("\ntabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); + + for (int i = 0; i < 2; i++) { + if (stat0[i]) { + printf(" tabx2s: x = %6.1f, stat = %d\n", xt0[i], stat0[i]); + } + } + } + + s[0] = 0.0; + s[1] = 200.0; + status1 = tabs2x(&tab, 2, 1, (double *)s, (double *)xt1, stat1); + + if (status1) { + printf("\ntabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); + + for (int i = 0; i < 2; i++) { + if (stat1[i]) { + printf(" tabs2x: s = %6.1f, stat = %d\n", s[i], stat1[i]); + } + } + } + + printf("\nReports of four invalid coordinates are expected.\n" + "------------------------------------" + "------------------------------------\n"); + + tabfree(&tab); + tab.index = 0x0; + + + // Now the 1-dimensional table from Sect. 6.2.3 of Paper III. + printf("\n\nOne-dimensional test with index:\n"); + M = 1; + K[0] = 8; + + tab.flag = -1; + if ((status = tabini(1, M, K, &tab))) { + printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); + return 1; + } + + tab.M = M; + tab.K[0] = K[0]; + tab.map[0] = 0; + tab.crval[0] = 0.0; + + tab.index[0][0] = 0.0; + tab.index[0][1] = 1.0; + tab.index[0][2] = 1.0; + tab.index[0][3] = 2.0; + tab.index[0][4] = 2.0; + tab.index[0][5] = 3.0; + tab.index[0][6] = 3.0; + tab.index[0][7] = 4.0; + + tab.coord[0] = 1997.84512; + tab.coord[1] = 1997.84631; + tab.coord[2] = 1993.28451; + tab.coord[3] = 1993.28456; + tab.coord[4] = 2001.59234; + tab.coord[5] = 2001.59239; + tab.coord[6] = 2002.18265; + tab.coord[7] = 2002.18301; + + double epsilon = 1e-3; + double crpix = 0.5; + xt0[0] = 0.5 + epsilon - crpix; + xt0[1] = 1.0 - crpix; + xt0[2] = 1.5 - epsilon - crpix; + xt0[3] = 1.5 + epsilon - crpix; + xt0[4] = 2.0 - crpix; + xt0[5] = 2.5 - epsilon - crpix; + xt0[6] = 2.5 + epsilon - crpix; + xt0[7] = 3.0 - crpix; + xt0[8] = 3.5 - epsilon - crpix; + xt0[9] = 3.5 + epsilon - crpix; + xt0[10] = 4.0 - crpix; + xt0[11] = 4.5 - epsilon - crpix; + + status0 = tabx2s(&tab, 12, 1, (double *)xt0, (double *)s, stat0); + status1 = tabs2x(&tab, 12, 1, (double *)s, (double *)xt1, stat1); + + printf(" x -> time -> x\n"); + for (int i = 0; i < 12; i++) { + printf("%8.5f%12.5f%9.5f", xt0[i], s[i], xt1[i]); + if (stat0[i] || stat1[i]) { + printf(" ERROR\n"); + } else { + printf("\n"); + } + } + + if (status0) { + printf("\ntabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); + + for (int i = 0; i < 12; i++) { + if (stat0[i]) { + printf(" tabx2s: x = %6.1f, stat = %d\n", xt0[i], stat0[i]); + } + } + } + + if (status1) { + printf("\ntabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); + + for (int i = 0; i < 12; i++) { + if (stat1[i]) { + printf(" tabs2x: s = %6.1f, stat = %d\n", s[i], stat1[i]); + } + } + } + + // Test closure. + residmax = 0.0; + for (int i = 0, nl = 1; i < 12; i++) { + if (stat0[i] || stat1[i]) continue; + + resid = fabs(xt1[i] - xt0[i]); + if (resid > residmax) residmax = resid; + + if (resid > tol) { + nFail++; + if (nl) printf("\n"); + printf(" Closure error:\n"); + printf(" x = %20.15f\n", xt0[i]); + printf(" -> s = %20.15f\n", s[i]); + printf(" -> x = %20.15f\n", xt1[i]); + nl = 0; + } + } + + tabfree(&tab); + + + // Now a 2-dimensional table. + printf("\n\nTwo-dimensional test with index:\n"); + M = 2; + int K1 = 32; + int K2 = 16; + K[0] = K1; + K[1] = K2; + int map[] = {0, 1}; + double crval[] = {4.0, -1.0}; + + tab.flag = -1; + if ((status = tabini(1, M, K, &tab))) { + printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); + return 1; + } + + // Set up the tabprm struct. + tab.M = M; + for (int m = 0; m < tab.M; m++) { + tab.K[m] = K[m]; + tab.map[m] = map[m]; + tab.crval[m] = crval[m]; + + // Construct a trivial 0-relative index. + for (int k = 0; k < tab.K[m]; k++) { + tab.index[m][k] = (double)k; + } + } + + // Construct a coordinate table. + double z = 1.0 / (double)((K1-1) * (K2-1)); + for (int k2 = 0, n = 0; k2 < K2; k2++) { + for (int k1 = 0; k1 < K1; k1++) { + tab.coord[n++] = 3.0*k1*k2*z; + tab.coord[n++] = -1.0*(K1-k1-1)*k2*z + 0.01*k1; + } + } + + // Construct an array of intermediate world coordinates to transform. + for (int i = 0; i < 11; i++) { + for (int j = 0; j < 11; j++) { + // Compute psi_m within bounds... + double psi_0 = i*(K1-1)/10.0; + double psi_1 = j*(K2-1)/10.0; + + // ...then compute x from it. + x0[i][j][0] = psi_0 - crval[0]; + x0[i][j][1] = psi_1 - crval[1]; + } + } + + // Transform them to and fro. + status0 = tabx2s(&tab, 121, 2, (double *)x0, (double *)world, stat0); + status1 = tabs2x(&tab, 121, 2, (double *)world, (double *)x1, stat1); + + // Print the results. + printf(" x -> s -> x \n"); + for (int i = 0, n = 0; i < 11; i++) { + for (int j = 0; j < 11; j++, n++) { + // Print every sixth one only. + if (n%6) continue; + + printf("(%4.1f,%4.1f) (%4.2f,%6.3f) (%4.1f,%4.1f)", + x0[i][j][0], x0[i][j][1], world[i][j][0], world[i][j][1], + x1[i][j][0], x1[i][j][1]); + if (stat0[n] || stat1[n]) { + printf(" ERROR\n"); + } else { + printf("\n"); + } + } + } + + if (status0) { + printf("\ntabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); + + for (int i = 0, n = 0; i < 11; i++) { + for (int j = 0; j < 11; j++, n++) { + if (stat0[n]) { + printf(" tabx2s: x = (%6.1f,%6.1f), stat = %d\n", x0[i][j][0], + x0[i][j][1], stat0[n]); + } + } + } + } + + if (status1) { + printf("\ntabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); + + for (int i = 0, n = 0; i < 11; i++) { + for (int j = 0; j < 11; j++, n++) { + if (stat1[n]) { + printf(" tabs2x: s = (%6.1f,%6.1f), stat = %d\n", + world[i][j][0], world[i][j][1], stat1[n]); + } + } + } + } + + // Check for closure. + residmax = 0.0; + for (int i = 0, n = 0, nl = 1; i < 11; i++) { + for (int j = 0; j < 11; j++, n++) { + if (stat0[n] || stat1[n]) continue; + + for (int m = 0; m < M; m++) { + resid = fabs(x1[i][j][m] - x0[i][j][m]); + if (resid > residmax) residmax = resid; + + if (resid > tol) { + nFail++; + if (nl) printf("\n"); + printf(" Closure error:\n"); + printf(" x = (%20.15f,%20.15f)\n", x0[i][j][0], x0[i][j][1]); + printf(" -> w = (%20.15f,%20.15f)\n", world[i][j][0], + world[i][j][1]); + printf(" -> x = (%20.15f,%20.15f)\n", x1[i][j][0], x1[i][j][1]); + nl = 0; + + break; + } + } + } + } + + printf("\ntabx2s/tabs2x: Maximum closure residual = %.1e\n", residmax); + + // Check error handling. + printf("\n"); + printf("------------------------------------" + "------------------------------------\n" + "Test of error handling in tabx2s() and tabs2x().\n"); + + x0[0][0][0] = -5.0; + x0[0][0][1] = 1.0; + x0[0][1][0] = 0.0; + x0[0][1][1] = 0.0; + x0[0][2][0] = 31.0; + x0[0][2][1] = 1.0; + x0[0][3][0] = 0.0; + x0[0][3][1] = 17.0; + status0 = tabx2s(&tab, 4, 2, (double *)x0, (double *)world, stat0); + + if (status0) { + printf("\ntabx2s ERROR %d: %s.\n", status0, tab_errmsg[status0]); + + for (int j = 0; j < 4; j++) { + if (stat0[j]) { + printf(" tabx2s: x = (%6.1f,%6.1f), stat = %d\n", x0[0][j][0], + x0[0][j][1], stat0[j]); + } + } + } + + world[0][0][0] = -1.0; + world[0][0][1] = 0.0; + world[0][1][0] = 0.0; + world[0][1][1] = -2.0; + world[0][2][0] = 4.0; + world[0][2][1] = 0.0; + world[0][3][0] = 0.0; + world[0][3][1] = 1.0; + status1 = tabs2x(&tab, 4, 2, (double *)world, (double *)x1, stat1); + + if (status1) { + printf("\ntabs2x ERROR %d: %s.\n", status1, tab_errmsg[status1]); + + for (int j = 0; j < 4; j++) { + if (stat1[j]) { + printf(" tabs2x: s = (%6.1f,%6.1f), stat = %d\n", + world[0][j][0], world[0][j][1], stat1[j]); + } + } + } + + printf("\nReports of eight invalid coordinates are expected.\n" + "------------------------------------" + "------------------------------------\n"); + + tabfree(&tab); + + + if (nFail) { + printf("\nFAIL: %d closure residuals exceed reporting tolerance.\n", + nFail); + } else { + printf("\nPASS: All closure residuals are within reporting tolerance.\n"); + } + + return nFail; +} diff --git a/deps/wcslib/C/test/ttab2.c b/deps/wcslib/C/test/ttab2.c new file mode 100644 index 0000000..f4af6be --- /dev/null +++ b/deps/wcslib/C/test/ttab2.c @@ -0,0 +1,274 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: ttab2.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* ttab2 tests the -TAB routines using PGPLOT for graphical display. It +* demonstrates the nature of linear interpolation in 2 dimensions by +* contouring the interior of a single 2 x 2 interpolation element as the +* values in each corner change. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include + +#include + +// 2 x 2 lookup table parameters. +const int M = 2; +const int K1 = 2; +const int K2 = 2; +const int map[] = {0, 1}; +const double crval[] = {0.0, 0.0}; + +// Number of subdivisions on each side of the interpolation element. +const int NP = 128; + + +int main() + +{ + printf("Testing WCSLIB coordinate lookup table routines (ttab2.c)\n" + "---------------------------------------------------------\n"); + + // List status return messages. + int status; + printf("\nList of tab status return values:\n"); + for (status = 1; status <= 5; status++) { + printf("%4d: %s.\n", status, tab_errmsg[status]); + } + + printf("\n"); + + + // PGPLOT initialization. + char text[80]; + strcpy(text, "/xwindow"); + cpgbeg(0, text, 1, 1); + cpgvstd(); + cpgsch(0.7f); + + // The viewport is slightly oversized. + cpgwnad(-0.65f, 1.65f, -0.65f, 1.65f); + + float clev[31]; + for (int l = 0; l <= 30; l++) { + clev[l] = 0.2f*(l-10); + } + + float ltm[6]; + const float scl = 2.0f / (NP-1); + ltm[0] = -scl*(1.0f + (NP-1)/4.0f); + ltm[1] = scl; + ltm[2] = 0.0f; + ltm[3] = -scl*(1.0f + (NP-1)/4.0f); + ltm[4] = 0.0f; + ltm[5] = scl; + + + // Set up the lookup table. + int K[] = {K1, K2}; + struct tabprm tab; + tab.flag = -1; + if ((status = tabini(1, M, K, &tab))) { + printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); + return 1; + } + + tab.M = M; + for (int m = 0; m < tab.M; m++) { + tab.K[m] = K[m]; + tab.map[m] = map[m]; + tab.crval[m] = crval[m]; + + for (int k = 0; k < tab.K[m]; k++) { + tab.index[m][k] = (double)k; + } + } + + // Subdivide the interpolation element. + double x[NP][NP][2]; + for (int i = 0; i < NP; i++) { + for (int j = 0; j < NP; j++) { + x[i][j][0] = j*(K1-1.0)*scl - 0.5 - crval[0]; + x[i][j][1] = i*(K2-1.0)*scl - 0.5 - crval[1]; + } + } + + // The first coordinate element is static. + tab.coord[0] = 0.0; + tab.coord[2] = 0.0; + tab.coord[4] = 0.0; + tab.coord[6] = 0.0; + + // (k1,k2) = (0,0). + tab.coord[1] = 0.0; + + // The second coordinate element varies in three of the corners. + for (int l3 = 0; l3 <= 100; l3 += 20) { + // (k1,k2) = (1,1). + tab.coord[7] = 0.01 * l3; + + for (int l2 = 0; l2 <= 100; l2 += 20) { + // (k1,k2) = (0,1). + tab.coord[5] = 0.01 * l2; + + cpgpage(); + for (int l1 = 0; l1 <= 100; l1 += 2) { + // (k1,k2) = (1,0). + tab.coord[3] = 0.01 * l1; + + // Compute coordinates within the interpolation element. + tab.flag = 0; + int stat[NP*NP]; + double world[NP][NP][2]; + if ((status = tabx2s(&tab, NP*NP, 2, (double *)x, (double *)world, + stat))) { + printf("tabx2s ERROR %d: %s.\n", status, tab_errmsg[status]); + } + + // Start a new plot. + cpgbbuf(); + cpgeras(); + cpgsci(1); + cpgslw(3); + cpgbox("BCNST", 0.0f, 0, "BCNSTV", 0.0f, 0); + cpgmtxt("T", 0.7f, 0.5f, 0.5f, "-TAB coordinates: " + "linear interpolation / extrapolation in 2-D"); + + // Draw the boundary of the interpolation element in red. + cpgsci(2); + cpgmove(-0.5f, 0.0f); + cpgdraw( 1.5f, 0.0f); + + cpgmove( 1.0f, -0.5f); + cpgdraw( 1.0f, 1.5f); + + cpgmove( 1.5f, 1.0f); + cpgdraw(-0.5f, 1.0f); + + cpgmove( 0.0f, 1.5f); + cpgdraw( 0.0f, -0.5f); + + // Label the value of the coordinate element in each corner. + sprintf(text, "%.1f", tab.coord[1]); + cpgtext(-0.09f, -0.05f, text); + sprintf(text, "%.2f", tab.coord[3]); + cpgtext( 1.02f, -0.05f, text); + sprintf(text, "%.1f", tab.coord[5]); + cpgtext(-0.13f, 1.02f, text); + sprintf(text, "%.1f", tab.coord[7]); + cpgtext( 1.02f, 1.02f, text); + + cpgsci(1); + float v0, v1; + + // Contour labelling: bottom. + v0 = world[0][0][1]; + v1 = world[0][NP-1][1]; + if (v0 != v1) { + int lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; + for (int l = -200; l <= 300; l += lstep) { + float w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); + if (w < -0.5 || w > 1.5) continue; + + sprintf(text, "%4.1f", l*0.01f); + cpgptxt(w+0.04f, -0.56f, 0.0f, 1.0f, text); + } + } + + // Contour labelling: left. + v0 = world[0][0][1]; + v1 = world[NP-1][0][1]; + if (v0 != v1) { + int lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; + for (int l = -200; l <= 300; l += lstep) { + float w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); + if (w < -0.5 || w > 1.5) continue; + + sprintf(text, "%4.1f", l*0.01f); + cpgptxt(-0.52f, w-0.02f, 0.0f, 1.0f, text); + } + } + + // Contour labelling: right. + v0 = world[0][NP-1][1]; + v1 = world[NP-1][NP-1][1]; + if (v0 != v1) { + int lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; + for (int l = -200; l <= 300; l += lstep) { + float w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); + if (w < -0.5 || w > 1.5) continue; + + sprintf(text, "%.1f", l*0.01f); + cpgptxt(1.52f, w-0.02f, 0.0f, 0.0f, text); + } + } + + // Contour labelling: top. + v0 = world[NP-1][0][1]; + v1 = world[NP-1][NP-1][1]; + if (v0 != v1) { + int lstep = (abs((int)((v1-v0)/0.2f)) < 10) ? 20 : 40; + for (int l = -200; l <= 300; l += lstep) { + float w = -0.5f + 2.0f * (l*0.01f - v0) / (v1 - v0); + if (w < -0.5 || w > 1.5) continue; + + sprintf(text, "%4.1f", l*0.01f); + cpgptxt(w+0.04f, 1.52f, 0.0f, 1.0f, text); + } + } + + // Draw contours for the second coordinate element. + float array[NP][NP]; + for (int i = 0; i < NP; i++) { + for (int j = 0; j < NP; j++) { + array[i][j] = world[i][j][1]; + } + } + + cpgsci(4); + cpgslw(2); + cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev, 10, ltm); + + cpgsci(7); + cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev+10, 1, ltm); + + cpgsci(5); + cpgcont(array[0], NP, NP, 1, NP, 1, NP, clev+11, 20, ltm); + + cpgebuf(); + } + } + } + + cpgend(); + + tabfree(&tab); + + return 0; +} diff --git a/deps/wcslib/C/test/ttab3.c b/deps/wcslib/C/test/ttab3.c new file mode 100644 index 0000000..8d268da --- /dev/null +++ b/deps/wcslib/C/test/ttab3.c @@ -0,0 +1,199 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: ttab3.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* ttab3 tests the -TAB routines using PGPLOT for graphical display. It +* constructs a table that approximates Bonne's projection and uses it to +* draw a graticule. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include + +#include +#include + +// Lookup table parameters. +const int M = 2; +const int K1 = 271; +const int K2 = 235; +const int map[] = {0, 1}; +const double crval[] = {135.0, 95.0}; + + +int main() + +{ + printf( + "Testing WCSLIB inverse coordinate lookup table routines (ttab3.c)\n" + "-----------------------------------------------------------------\n"); + + // List status return messages. + int status; + printf("\nList of tab status return values:\n"); + for (status = 1; status <= 5; status++) { + printf("%4d: %s.\n", status, tab_errmsg[status]); + } + + printf("\n"); + + + // PGPLOT initialization. + char text[80]; + strcpy(text, "/xwindow"); + cpgbeg(0, text, 1, 1); + cpgvstd(); + cpgsch(0.7f); + cpgwnad(-135.0f, 135.0f, -95.0f, 140.0f); + cpgbox("BC", 0.0f, 0, "BC", 0.0f, 0); + + cpgscr(0, 0.00f, 0.00f, 0.00f); + cpgscr(1, 1.00f, 1.00f, 0.00f); + cpgscr(2, 1.00f, 1.00f, 1.00f); + cpgscr(3, 0.50f, 0.50f, 0.80f); + cpgscr(4, 0.80f, 0.50f, 0.50f); + cpgscr(5, 0.80f, 0.80f, 0.80f); + cpgscr(6, 0.50f, 0.50f, 0.80f); + cpgscr(7, 0.80f, 0.50f, 0.50f); + cpgscr(8, 0.30f, 0.50f, 0.30f); + + + // Set up the lookup table. + int K[] = {K1, K2}; + struct tabprm tab; + tab.flag = -1; + if ((status = tabini(1, M, K, &tab))) { + printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); + return 1; + } + + tab.M = M; + for (int m = 0; m < tab.M; m++) { + tab.K[m] = K[m]; + tab.map[m] = map[m]; + tab.crval[m] = crval[m]; + + for (int k = 0; k < tab.K[m]; k++) { + tab.index[m][k] = (double)k; + } + } + + // Set up the lookup table to approximate Bonne's projection. + double x[K1], y[K2]; + for (int i = 0; i < K1; i++) { + x[i] = (double)(135 - i); + } + for (int j = 0; j < K2; j++) { + y[j] = (double)(j - 95); + } + + struct prjprm prj; + prjini(&prj); + prj.pv[1] = 35.0; + + // Disable bounds checking (or alternatively, simply ignore out-of-bounds + // errors). This is necessary to provide continuity beyond the -180 and + // +180 meridians, noting that bonx2s() computes out-of-bounds values so + // as to provide continuity. + prj.bounds = 0; + + int stat[K2*K1]; + status = bonx2s(&prj, K1, K2, 1, 2, x, y, tab.coord, tab.coord+1, stat); + + + float xr[361], yr[361]; + double world[361][2], xy[361][2]; + + // Draw meridians. + for (int ilng = -180, ci = 1; ilng <= 180; ilng += 15) { + if (++ci > 7) ci = 2; + cpgsci(ilng?ci:1); + + for (int ilat = -90, j = 0; ilat <= 90; ilat++, j++) { + world[j][0] = (double)ilng; + world[j][1] = (double)ilat; + } + + // A fudge to account for the singularity at the poles. + world[0][0] = 0.0; + world[180][0] = 0.0; + + status = tabs2x(&tab, 181, 2, world[0], xy[0], stat); + + int k = 0; + for (int j = 0; j < 181; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + xr[k] = xy[j][0]; + yr[k] = xy[j][1]; + k++; + } + + cpgline(k, xr, yr); + } + + + // Draw parallels. + for (int ilat = -75, ci = 1; ilat <= 75; ilat += 15) { + if (++ci > 7) ci = 2; + cpgsci(ilat?ci:1); + + for (int ilng = -180, j = 0; ilng <= 180; ilng++, j++) { + world[j][0] = (double)ilng; + world[j][1] = (double)ilat; + } + + status = tabs2x(&tab, 361, 2, world[0], xy[0], stat); + + int k = 0; + for (int j = 0; j < 361; j++) { + if (stat[j]) { + if (k > 1) cpgline(k, xr, yr); + k = 0; + continue; + } + + xr[k] = xy[j][0]; + yr[k] = xy[j][1]; + k++; + } + + cpgline(k, xr, yr); + } + + cpgend(); + + // Defeat spurious reporting of memory leaks. + tabfree(&tab); + + return 0; +} diff --git a/deps/wcslib/C/test/tunits.c b/deps/wcslib/C/test/tunits.c new file mode 100644 index 0000000..06034cc --- /dev/null +++ b/deps/wcslib/C/test/tunits.c @@ -0,0 +1,135 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tunits.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* tunits tests wcsulex(), wcsutrn(), and wcsunits() the FITS units +* specification parser, translator and converter. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include + +int main() + +{ + char have[80], want[80]; + int func, i, interactive, status; + double offset, power, scale, units[WCSUNITS_NTYPE]; + + interactive = isatty(0); + + printf("Testing FITS unit specification parser (tunits.c)\n" + "-------------------------------------------------\n"); + if (interactive) printf("\nTo test wcsulex(), enter when prompted " + "with \"Unit string (want):\".\n"); + + while (1) { + if (interactive) printf("\nUnit string (have): "); + if (!fgets(have, 80, stdin)) break; + have[strlen(have)-1] = '\0'; + if (!interactive) printf("\nUnit string (have): %s\n", have); + + if ((status = wcsutrn(7, have)) >= 0) { + printf(" Translation: %s", have); + if (status == 0) { + printf("\n"); + } else { + printf(" (WARNING: %s)\n", wcsunits_errmsg[status]); + } + } + + if (interactive) printf("Unit string (want): "); + if (!fgets(want, 80, stdin)) break; + want[strlen(want)-1] = '\0'; + + if (*want) { + if (!interactive) printf("Unit string (want): %s\n", want); + + if ((status = wcsutrn(7, want)) >= 0) { + printf(" Translation: %s", want); + if (status == 0) { + printf("\n"); + } else { + printf(" (WARNING: %s)\n", wcsunits_errmsg[status]); + } + } + + printf("Conversion: \"%s\" -> \"%s\"\n", have, want); + + if ((status = wcsunits(have, want, &scale, &offset, &power))) { + printf("wcsunits ERROR %d: %s.\n", status, + wcsunits_errmsg[status]); + continue; + } + + printf(" = %s", (power == 1.0) ? "" : "("); + + if (scale == 1.0) { + printf("value"); + } else { + printf("%.8g * value", scale); + } + + if (offset != 0.0) { + printf(" + %.8g", offset); + } + + if (power == 1.0) { + printf("\n"); + } else { + printf(")^%.8g\n", power); + } + + } else { + // Parse the unit string. + printf(" Parsing: \"%s\"\n", have); + + if ((status = wcsulex(have, &func, &scale, units))) { + printf("wcsulex ERROR %d: %s.\n", status, + wcsunits_errmsg[status]); + continue; + } + + printf("%15.8g *\n", scale); + for (i = 0; i < WCSUNITS_NTYPE; i++) { + if (units[i] != 0.0) { + printf("%11.2f %s", units[i], wcsunits_types[i]); + if (strlen(wcsunits_units[i])) { + printf(" (%s)\n", wcsunits_units[i]); + } else { + printf("\n"); + } + } + } + } + } + + printf("\n"); + + return 0; +} diff --git a/deps/wcslib/C/test/tunits.out b/deps/wcslib/C/test/tunits.out new file mode 100644 index 0000000..30c7fd6 --- /dev/null +++ b/deps/wcslib/C/test/tunits.out @@ -0,0 +1,72 @@ +Testing FITS unit specification parser (tunits.c) +------------------------------------------------- + +Unit string (have): km/h +Unit string (want): m/ms +Conversion: "km/h" -> "m/ms" + = 0.00027777778 * value + +Unit string (have): JY/BEAM + Translation: Jy/beam +Unit string (want): (kg/s^2)/beam +Conversion: "Jy/beam" -> "(kg/s^2)/beam" + = 1e-26 * value + +Unit string (have): KM/SEC + Translation: km/s +Unit string (want): m/s +Conversion: "km/s" -> "m/s" + = 1000 * value + +Unit string (have): KM/H + Translation: km/h (WARNING: Potentially unsafe translation) +Unit string (want): M/S + Translation: m/s (WARNING: Potentially unsafe translation) +Conversion: "km/h" -> "m/s" + = 0.27777778 * value + +Unit string (have): log(MHZ) + Translation: log(MHz) +Unit string (want): ln(/s) +Conversion: "log(MHz)" -> "ln(/s)" + = 2.3025851 * value + 13.815511 + +Unit string (have): DEG + Translation: deg + Parsing: "deg" + 1 * + 1.00 plane angle (degree) + +Unit string (have): ARCMINS + Translation: arcmin + Parsing: "arcmin" + 0.016666667 * + 1.00 plane angle (degree) + +Unit string (have): ARCSEC + Translation: arcsec + Parsing: "arcsec" + 0.00027777778 * + 1.00 plane angle (degree) + +Unit string (have): sqrt(HZ^2) + Translation: sqrt(Hz^2) + Parsing: "sqrt(Hz^2)" + 1 * + -1.00 time (second) + +Unit string (have): Jy + Parsing: "Jy" + 1e-26 * + 1.00 mass (kilogram) + -2.00 time (second) + +Unit string (have): Volts + Translation: V + Parsing: "V" + 1 * + -1.00 charge (Coulomb) + 1.00 mass (kilogram) + 1.00 length (metre) + -2.00 time (second) + diff --git a/deps/wcslib/C/test/twcs.c b/deps/wcslib/C/test/twcs.c new file mode 100644 index 0000000..ac76048 --- /dev/null +++ b/deps/wcslib/C/test/twcs.c @@ -0,0 +1,516 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO, + and: Michael Droetboom, Space Telescope Science Institute + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcs.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* twcs tests wcss2p() and wcsp2s() for closure on an oblique 2-D slice through +* a 4-D image with celestial, spectral and logarithmic coordinate axes. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include +#include + + +#define NELEM 9 + +void parser(struct wcsprm *); +int check_error(struct wcsprm *, int, int, char *); +int test_errors(); + +// Reporting tolerance. +const double tol = 1.0e-10; + + +// In real life these would be encoded as FITS header keyrecords. +const int NAXIS = 4; +const double CRPIX[4] = { 513.0, 0.0, 0.0, 0.0}; +const double PC[4][4] = {{ 1.1, 0.0, 0.0, 0.0}, + { 0.0, 1.0, 0.0, 0.1}, + { 0.0, 0.0, 1.0, 0.0}, + { 0.0, 0.2, 0.0, 1.0}}; +const double CDELT[4] = {-9.635265432e-6, 1.0, 0.1, -1.0}; + +char CTYPE[4][9] = {"WAVE-F2W", "XLAT-BON", "TIME-LOG", "XLON-BON"}; + +const double CRVAL[4] = {0.214982042, -30.0, 1.0, 150.0}; +const double LONPOLE = 150.0; +const double LATPOLE = 999.0; +const double RESTFRQ = 1.42040575e9; +const double RESTWAV = 0.0; + +int NPV = 3; +struct pvcard PV[3]; // Projection parameters are set in main(). + +int itest = 0; + +int main() + +{ + int ver[3]; + printf("WCSLIB version number: %s", wcslib_version(ver)); + printf(" (%d,%d,%d)\n\n", ver[0], ver[1], ver[2]); + + printf("Testing closure of WCSLIB world coordinate transformation " + "routines (twcs.c)\n" + "----------------------------------------------------------" + "-----------------\n"); + + // List status return messages. + int status; + printf("\nList of wcs status return values:\n"); + for (status = 1; status <= 13; status++) { + printf("%4d: %s.\n", status, wcs_errmsg[status]); + } + + printf("\nSize of data types (bytes):\n"); + printf(" char:%5"MODZ"u\n", sizeof(char)); + printf(" short int:%5"MODZ"u\n", sizeof(short int)); + printf(" int:%5"MODZ"u\n", sizeof(int)); + printf(" long int:%5"MODZ"u\n", sizeof(long int)); + printf(" long long int:%5"MODZ"u\n", sizeof(long long int)); + printf(" float:%5"MODZ"u\n", sizeof(float)); + printf(" double:%5"MODZ"u\n", sizeof(double)); + printf(" char *:%5"MODZ"u\n", sizeof(char *)); + printf(" char (*)[72]:%5"MODZ"u\n", sizeof(char (*)[72])); + printf(" int *:%5"MODZ"u\n", sizeof(int *)); + printf(" float *:%5"MODZ"u\n", sizeof(float *)); + printf(" double *:%5"MODZ"u\n", sizeof(double *)); + printf("struct dpkey *:%5"MODZ"u\n", sizeof(struct dpkey *)); + printf("struct pvcard *:%5"MODZ"u\n", sizeof(struct pvcard *)); + printf("struct pscard *:%5"MODZ"u\n", sizeof(struct pscard *)); + + printf("\nSize of structs (bytes/ints):\n"); + + char ok[] = "", mismatch[] = " (WARNING, mismatch)"; + char *s = (sizeof(struct auxprm) == sizeof(int)*AUXLEN) ? ok : mismatch; + printf(" auxprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct auxprm), + AUXLEN, s); + + s = (sizeof(struct celprm) == sizeof(int)*CELLEN) ? ok : mismatch; + printf(" celprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct celprm), + CELLEN, s); + + s = (sizeof(struct disprm) == sizeof(int)*DISLEN) ? ok : mismatch; + printf(" disprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct disprm), + DISLEN, s); + + s = (sizeof(struct dpkey) == sizeof(int)*DPLEN) ? ok : mismatch; + printf(" dpkey:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct dpkey), + DPLEN, s); + + s = (sizeof(struct fitskey) == sizeof(int)*KEYLEN) ? ok : mismatch; + printf(" fitskey:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct fitskey), + KEYLEN, s); + + s = (sizeof(struct fitskeyid) == sizeof(int)*KEYIDLEN) ? ok : mismatch; + printf(" fitskeyid:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct fitskeyid), + KEYIDLEN, s); + + s = (sizeof(struct linprm) == sizeof(int)*LINLEN) ? ok : mismatch; + printf(" linprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct linprm), + LINLEN, s); + + s = (sizeof(struct prjprm) == sizeof(int)*PRJLEN) ? ok : mismatch; + printf(" prjprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct prjprm), + PRJLEN, s); + + s = (sizeof(struct pscard) == sizeof(int)*PSLEN) ? ok : mismatch; + printf(" pscard:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct pscard), + PSLEN, s); + + s = (sizeof(struct pvcard) == sizeof(int)*PVLEN) ? ok : mismatch; + printf(" pvcard:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct pvcard), + PVLEN, s); + + s = (sizeof(struct spcprm) == sizeof(int)*SPCLEN) ? ok : mismatch; + printf(" spcprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct spcprm), + SPCLEN, s); + + s = (sizeof(struct spxprm) == sizeof(int)*SPXLEN) ? ok : mismatch; + printf(" spxprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct spxprm), + SPXLEN, s); + + s = (sizeof(struct tabprm) == sizeof(int)*TABLEN) ? ok : mismatch; + printf(" tabprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct tabprm), + TABLEN, s); + + s = (sizeof(struct wcserr) == sizeof(int)*ERRLEN) ? ok : mismatch; + printf(" wcserr:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct wcserr), + ERRLEN, s); + + s = (sizeof(struct wcsprm) == sizeof(int)*WCSLEN) ? ok : mismatch; + printf(" wcsprm:%5"MODZ"u /%4"MODZ"u%s\n", sizeof(struct wcsprm), + WCSLEN, s); + + printf("\n"); + + + // Set the PVi_ma keyvalues for the longitude axis. + //------------------------------------------------------------ + // For test purposes, these are set so that the fiducial + // native coordinates are at the native pole, i.e. so that + // (phi0,theta0) = (0,90), but without any fiducial offset, + // i.e. iwith PVi_0a == 0 (by default). + //------------------------------------------------------------ + PV[0].i = 4; // Longitude is on axis 4. + PV[0].m = 1; // Parameter number 1. + PV[0].value = 0.0; // Fiducial native longitude. + + PV[1].i = 4; // Longitude is on axis 4. + PV[1].m = 2; // Parameter number 2. + PV[1].value = 90.0; // Fiducial native latitude. + + // Set the PVi_m keyvaluess for the latitude axis. + PV[2].i = 2; // Latitude is on axis 2. + PV[2].m = 1; // Parameter number 1. + PV[2].value = -30.0; // PVi_1. + + + // The following routine simulates the actions of a FITS header parser. + struct wcsprm *wcs = malloc(sizeof(struct wcsprm)); + wcs->flag = -1; + parser(wcs); + + // Test wcsenq() - note that the struct is unset. + int nFail0 = 0; + if (!wcsenq(wcs, WCSENQ_MEM)) { + nFail0++; + printf("Unexpected result from wcsenq(): memory.\n"); + } + + // Enable error messaging. + wcserr_enable(1); + + // Put the struct in bypass mode (as a test). + wcs->flag = 1; + if (wcsset(wcs)) { + wcsperr(wcs, ""); + } + + // Tidy up the wcsprm struct. + wcstrim(wcs); + + // Test wcsenq(). + if (!wcsenq(wcs, WCSENQ_SET | WCSENQ_BYP)) { + nFail0++; + printf("Unexpected result from wcsenq(): set and bypass.\n"); + } + + if (!wcsenq(wcs, WCSENQ_CHK)) { + nFail0++; + printf("Unexpected result from wcsenq(): checksum (a).\n"); + } + + // Further test for wcsenq() - an inconsequential change. + wcs->latpole = 999.001; + if (wcsenq(wcs, WCSENQ_CHK)) { + nFail0++; + printf("Unexpected result from wcsenq(): checksum (b).\n"); + } + + + if (nFail0) printf("\n"); + printf("Reporting tolerance %5.1g pixel.\n", tol); + + // Initialize non-celestial world coordinates. + double time = 1.0; + double freq = 1.42040595e9 - 180.0 * 62500.0; + double world1[361][NELEM], world2[361][NELEM]; + for (int k = 0; k < 361; k++) { + world1[k][0] = 0.0; + world1[k][1] = 0.0; + world1[k][2] = 0.0; + world1[k][3] = 0.0; + + world1[k][2] = time; + time *= 1.01; + + world1[k][wcs->spec] = 2.99792458e8 / freq; + freq += 62500.0; + } + + int nFail1 = 0, stat[361]; + double residmax = 0.0; + double img[361][NELEM], pixel1[361][NELEM], pixel2[361][NELEM]; + double phi[361], theta[361]; + for (int lat = 90; lat >= -90; lat--) { + double lat1 = (double)lat; + + int k, lng; + for (lng = -180, k = 0; lng <= 180; lng++, k++) { + double lng1 = (double)lng; + + world1[k][wcs->lng] = lng1; + world1[k][wcs->lat] = lat1; + } + + if (wcss2p(wcs, 361, NELEM, world1[0], phi, theta, img[0], pixel1[0], + stat)) { + printf(" At wcss2p#1 with lat1 == %f\n", lat1); + wcsperr(wcs, " "); + continue; + } + + if (wcsp2s(wcs, 361, NELEM, pixel1[0], img[0], phi, theta, world2[0], + stat)) { + printf(" At wcsp2s with lat1 == %f\n", lat1); + wcsperr(wcs, " "); + continue; + } + + if (wcss2p(wcs, 361, NELEM, world2[0], phi, theta, img[0], pixel2[0], + stat)) { + printf(" At wcss2p#2 with lat1 == %f\n", lat1); + wcsperr(wcs, " "); + continue; + } + + for (k = 0; k < 361; k++) { + double resid = 0.0; + for (int i = 0; i < NAXIS; i++) { + double r = pixel2[k][i] - pixel1[k][i]; + resid += r*r; + } + + resid = sqrt(resid); + if (resid > residmax) residmax = resid; + + if (resid > tol) { + nFail1++; + printf("\nClosure error:\n" + "world1:%18.12f%18.12f%18.12f%18.12f\n" + "pixel1:%18.12f%18.12f%18.12f%18.12f\n" + "world2:%18.12f%18.12f%18.12f%18.12f\n" + "pixel2:%18.12f%18.12f%18.12f%18.12f\n", + world1[k][0], world1[k][1], world1[k][2], world1[k][3], + pixel1[k][0], pixel1[k][1], pixel1[k][2], pixel1[k][3], + world2[k][0], world2[k][1], world2[k][2], world2[k][3], + pixel2[k][0], pixel2[k][1], pixel2[k][2], pixel2[k][3]); + } + } + } + + printf("wcsp2s/wcss2p: Maximum closure residual = %.1e pixel.\n", residmax); + + + // The wcsprm is set in bypass mode (above), so wcsset() should return + // immediately and hence not fail. + int nFail2 = 0; + wcs->pv[2].value = UNDEFINED; + if ((status = wcsset(wcs))) { + nFail2 = 1; + printf("\nBypass mode failure in wcsset().\n"); + } + + + // Test wcserr and wcsprintf() as well. + wcsprintf_set(stdout); + wcsprintf("\nIGNORE messages marked with 'OK', they test wcserr " + "(and wcsprintf):\n"); + + // Test 1 - take it out of bypass mode, so now wcsset() should fail. + int nFail3 = 0; + wcs->pv[2].value = UNDEFINED; + wcs->flag = 0; + status = wcsset(wcs); + nFail3 += check_error(wcs, status, WCSERR_BAD_PARAM, + "Invalid parameter value"); + + nFail3 += test_errors(); + + + printf("\n"); + int success = 1; + if (nFail0) { + success = 0; + printf("FAIL: Unexpected result%s from wcsenq().\n", + (nFail0 = 1) ? "" : "s"); + } + + if (nFail1) { + success = 0; + printf("FAIL: %d closure residuals exceed reporting tolerance.\n", + nFail1); + } + + if (nFail2) { + success = 0; + printf("FAIL: Bypass mode failure in wcsset().\n"); + } + + if (nFail3) { + success = 0; + printf("FAIL: %d error messages differ from that expected.\n", nFail3); + } + + if (success) { + printf("PASS: All enquiry results returned as expected.\n"); + printf("PASS: All closure residuals are within reporting tolerance.\n"); + printf("PASS: wcsset() in bypass mode operated as expected.\n"); + printf("PASS: All error messages reported as expected.\n"); + } + + + // Clean up. + wcsfree(wcs); + free(wcs); + + return nFail0 + nFail1 + nFail2 + nFail3; +} + +//---------------------------------------------------------------------------- + +void parser(wcs) + +struct wcsprm *wcs; + +{ + // In practice a parser would read the FITS header until it encountered + // the NAXIS keyword which must occur near the start, before any of the + // WCS keywords. It would then use wcsini() to allocate memory for + // arrays in the wcsprm struct and set default values. In this + // simulation the header keyvalues are set as global variables. + wcsini(1, NAXIS, wcs); + + + // Now the parser scans the FITS header, identifying WCS keywords and + // loading their values into the appropriate elements of the wcsprm + // struct. + + for (int j = 0; j < NAXIS; j++) { + wcs->crpix[j] = CRPIX[j]; + } + + double *pcij = wcs->pc; + for (int i = 0; i < NAXIS; i++) { + for (int j = 0; j < NAXIS; j++) { + *(pcij++) = PC[i][j]; + } + } + + for (int i = 0; i < NAXIS; i++) { + wcs->cdelt[i] = CDELT[i]; + } + + for (int i = 0; i < NAXIS; i++) { + strcpy(wcs->ctype[i], &CTYPE[i][0]); + } + + for (int i = 0; i < NAXIS; i++) { + wcs->crval[i] = CRVAL[i]; + } + + wcs->lonpole = LONPOLE; + wcs->latpole = LATPOLE; + + wcs->restfrq = RESTFRQ; + wcs->restwav = RESTWAV; + + wcs->npv = NPV; + for (int i = 0; i < NPV; i++) { + wcs->pv[i] = PV[i]; + } + + return; +} + +//---------------------------------------------------------------------------- + +int check_error(struct wcsprm *wcs, int status, int exstatus, char *exmsg) +{ + wcsprintf("\nTest %d...\n", ++itest); + + const char *errmsg = (status ? (wcs->err)->msg : ""); + if (status == exstatus && strcmp(errmsg, exmsg) == 0) { + wcsperr(wcs, "OK: "); + wcsprintf("...succeeded.\n"); + } else { + wcsprintf("Expected error %d: '%s', got\n", exstatus, exmsg); + wcsperr(wcs, ""); + wcsprintf("...failed.\n"); + return 1; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int test_errors() + +{ + int nFail = 0, status; + struct wcsprm wcs; + + // Test 2. + wcs.flag = -1; + status = wcsini(1, -32, &wcs); + nFail += check_error(&wcs, status, WCSERR_MEMORY, + "naxis must not be negative (got -32)"); + + // Test 3. + wcs.flag = 0; + status = wcsini(1, 2, &wcs); + nFail += check_error(&wcs, status, WCSERR_SUCCESS, ""); + + // Test 4. + const char *(multiple_cubeface[2]) = {"CUBEFACE", "CUBEFACE"}; + for (int i = 0; i < 2; i++) { + strcpy(wcs.ctype[i], &multiple_cubeface[i][0]); + } + status = wcsset(&wcs); + nFail += check_error(&wcs, status, WCSERR_BAD_CTYPE, + "Multiple CUBEFACE axes (in CTYPE1 and CTYPE2)"); + + // Test 5. + const char *(projection_code[2]) = {"RA---FOO", "DEC--BAR"}; + wcs.flag = 0; + status = wcsini(1, 2, &wcs); + for (int i = 0; i < 2; i++) { + strcpy(wcs.ctype[i], &projection_code[i][0]); + } + status = wcsset(&wcs); + nFail += check_error(&wcs, status, WCSERR_BAD_CTYPE, + "Unrecognized projection code (FOO in CTYPE1)"); + + // Test 6. + const char *(unmatched[2]) = {"RA---TAN", "FREQ-LOG"}; + wcs.flag = 0; + status = wcsini(1, 2, &wcs); + for (int i = 0; i < 2; i++) { + strcpy(wcs.ctype[i], &unmatched[i][0]); + } + status = wcsset(&wcs); + nFail += check_error(&wcs, status, WCSERR_BAD_CTYPE, + "Unmatched celestial axes"); + + wcsfree(&wcs); + + return nFail; +} diff --git a/deps/wcslib/C/test/twcs_locale.c b/deps/wcslib/C/test/twcs_locale.c new file mode 100644 index 0000000..77416da --- /dev/null +++ b/deps/wcslib/C/test/twcs_locale.c @@ -0,0 +1,96 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Michael Droetboom, Space Telescope Science Institute, + and: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcs_locale.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* twcs_locale tests wcslib's handling of locales, such as fr_FR, that use a +* comma as the decimal separator in floating point numbers. Not part of the +* official test suite. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include "wcs.h" +#include "wcserr.h" +#include "wcshdr.h" +#include "wcsprintf.h" +#include "wcsutil.h" + +#define HEADER_SIZE 36000 + +int main() + +{ + struct wcsprm *wcs, *wcsp; + char header[HEADER_SIZE]; + size_t real_size; + FILE *fd; + int nreject, nwcs; + int nkeyrec; + char *gen_header; + + wcserr_enable(1); + wcsprintf_set(stderr); + + if ((fd = fopen("pih.fits", "r")) == 0x0) { + wcsprintf("\nFailed to open pih.fits, abort.\n"); + return 1; + } + + setlocale(LC_NUMERIC, "fr_FR"); + wcsprintf("Parsing pih.fits with locale set to fr_FR.\n"); + + real_size = fread(header, 1, HEADER_SIZE, fd); + fclose(fd); + + if (wcspih(header, real_size / 80, WCSHDR_all, 0, &nreject, &nwcs, &wcs)) { + wcsperr(wcs, 0x0); + return 1; + } + + // Choose one of the three WCS in this header. + wcsp = wcs + 1; + + if (wcsset(wcsp)) { + wcsperr(wcsp, 0x0); + return 1; + } + + wcsprintf("\nOutput from wcsprt() with this locale\n" + "-------------------------------------\n"); + wcsprt(wcsp); + wcsprintf("\n"); + + wcsprintf("Output from wcshdo() with the same locale\n" + "-----------------------------------------\n"); + wcshdo(1, wcsp, &nkeyrec, &gen_header); + printf("%s", gen_header); + + wcsdealloc(gen_header); + wcsvfree(&nwcs, &wcs); + + return 0; +} diff --git a/deps/wcslib/C/test/twcs_pthread.c b/deps/wcslib/C/test/twcs_pthread.c new file mode 100644 index 0000000..b8b8dd9 --- /dev/null +++ b/deps/wcslib/C/test/twcs_pthread.c @@ -0,0 +1,181 @@ +/*============================================================================ + WCSLIB 8.3 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id$ +*============================================================================= +* +* twcs_pthread tests the thread safety of wcsset() when invoked explicitly +* from within multiple threads. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include +#include + +#define NTHREAD 4 +#define NPXPTHR 100000 +#define NPIX NPXPTHR*NTHREAD + +// Pixel-world-pixel closure tolerance. +const double TOL = 1e-8; + +// Make these global as a convenient way to get them to the threads. +struct wcsprm wcs; +double pixcrd[2*NPIX]; +double imgcrd[2*NPIX]; +double phi[NPIX], theta[NPIX]; +double world[2*NPIX]; +int stat[NPIX]; +double pixcrd2[2*NPIX]; + +pthread_t threadId[NTHREAD]; +void *threadFn(void *ithread); +int threadRet[NTHREAD]; + +int main(void) +{ + // Set for unbuffered output so messages are printed immediately. + setvbuf(stdout, NULL, _IONBF, 0); + + printf("Testing wcsset() for thread safety (twcs_pthread.c)\n" + "---------------------------------------------------\n"); + + wcsinit(1, 2, &wcs, 0, 0, 0); + wcs.naxis = 2; + wcs.crpix[0] = -234.75; + wcs.crpix[1] = 8.3393; + wcs.cdelt[0] = -0.066667; + wcs.cdelt[1] = 0.066667; + wcs.crval[0] = 0.0; + wcs.crval[1] = -90.0; + sprintf(wcs.ctype[0], "RA---AIR"); + sprintf(wcs.ctype[1], "DEC--AIR"); + + wcserr_enable(1); + + // Set up the wcsprm struct. It only needs to be done once and normally + // that would be the end of it. However, threadFn() is going to call + // wcsset() repeatedly for testing purposes. Hence the struct is put into + // bypass mode by setting wcsprm::flag = 1. That will stop wcsset() + // altering it in one thread while it's being used by another. + wcs.flag = 1; + if (wcsset(&wcs)) { + wcsperr(&wcs, ""); + } + + // Set up an array of random pixels. + const double min = -1000.0; + const double max = 1000.0; + unsigned int seed = 292364782; + for (int i = 0; i < 2*NPIX; ) { + double r; + + r = (double)rand_r(&seed) / (double)RAND_MAX; + pixcrd[i++] = min + r*(max - min); + + r = (double)rand_r(&seed) / (double)RAND_MAX; + pixcrd[i++] = min + r*(max - min); + } + + int threadArg[NTHREAD]; + for (int iloop = 0; iloop < 10; iloop++) { + // Launch multiple threads working on the pixel array. + for (int ithread = 0; ithread < NTHREAD; ithread++) { + threadArg[ithread] = ithread; + + int status; + if ((status = pthread_create(&(threadId[ithread]), NULL, &threadFn, + threadArg+ithread))) { + printf("Failed to create thread %d: %s", ithread, strerror(status)); + } + } + + // Wait for each thread to finish. + int iFail = 0; + for (int ithread = 0; ithread < NTHREAD; ithread++) { + pthread_join(threadId[ithread], NULL); + iFail += threadRet[ithread]; + } + + printf("Iteration %d: got %d closure errors.\n", iloop, iFail); + } + + return 0; +} + + +//---------------------------------------------------------------------------- +// Invoke wcsset(), wcsp2x(), and wcsx2p() in a thread. +//---------------------------------------------------------------------------- + +void *threadFn(void *threadArg) +{ + int ithread = *(int *)threadArg; + + // Compute offsets into the 1-D and 2-D arrays for this thread. + int off1 = ithread * NPXPTHR; + int off2 = off1 * 2; + + // Pixel to world coordinates. + if (wcsp2s(&wcs, NPXPTHR, 2, pixcrd+off2, imgcrd+off2, phi+off1, theta+off1, + world+off2, stat+off1)) { + wcsperr(&wcs, ""); + } + + // Invoke wcsset(). This is unnecessary and undesirable - do not write code + // like this! It is done to test thread-safety in situations where it can't + // be avoided, such as may occur when WCSLIB is wrapped by another language. + if (wcsset(&wcs)) { + wcsperr(&wcs, ""); + } + + // World to pixel coordinates. + if (wcss2p(&wcs, NPXPTHR, 2, world+off2, phi+off1, theta+off1, imgcrd+off2, + pixcrd2+off2, stat+off1)) { + wcsperr(&wcs, ""); + } + + // Check closure. + int *iFailp = threadRet + ithread; + *iFailp = 0; + double tol2 = TOL*TOL; + for (int i = off2; i < off2 + 2*NPXPTHR; i++) { + double r = pixcrd2[i] - pixcrd[i]; + double resid = r*r; + + i++; + r = pixcrd2[i] - pixcrd[i]; + resid += r*r; + + if (resid > tol2) { + (*iFailp)++; + } + } + + // Terminate the thread. + pthread_exit(NULL); +} diff --git a/deps/wcslib/C/test/twcscompare.c b/deps/wcslib/C/test/twcscompare.c new file mode 100644 index 0000000..e67b5c4 --- /dev/null +++ b/deps/wcslib/C/test/twcscompare.c @@ -0,0 +1,112 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO, + and: Michael Droetboom, Space Telescope Science Institute + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcscompare.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* Test wcscompare(). +* +*---------------------------------------------------------------------------*/ + +#include +#include + +#include + + +int main() + +{ + int cmp, equal, status; + struct wcsprm a, b; + + printf( + "Testing WCSLIB comparison routine (twcscompare.c)\n" + "-------------------------------------------------\n"); + + a.flag = -1; + b.flag = -1; + wcsini(1, 2, &a); + wcsini(1, 2, &b); + + if ((status = wcscompare(0, 0.0, &a, &b, &equal))) { + printf("wcscompare ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } else if (!equal) { + printf("FAIL: Equal wcsprms tested unequal.\n"); + return 1; + } + + strncpy(b.dateobs, "2014-01-01T00:00:00", 72); + + if ((status = wcscompare(0, 0.0, &a, &b, &equal))) { + printf("wcscompare ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } else if (equal) { + printf("FAIL: Unequal wcsprms tested equal.\n"); + return 1; + } + + if ((status = wcscompare(WCSCOMPARE_ANCILLARY, 0.0, &a, &b, &equal))) { + printf("wcscompare ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } else if (!equal) { + printf("FAIL: Ancillary keyword not ignored.\n"); + return 1; + } + + b.crpix[0] = 12.5; + b.crpix[1] = 12.5; + + if ((status = wcscompare(WCSCOMPARE_ANCILLARY, 0.0, &a, &b, &equal))) { + printf("wcscompare ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } else if (equal) { + printf("FAIL: Unequal wcsprms tested equal.\n"); + return 1; + } + + cmp = WCSCOMPARE_ANCILLARY | WCSCOMPARE_TILING; + if ((status = wcscompare(cmp, 0.0, &a, &b, &equal))) { + printf("wcscompare ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } else if (equal) { + printf("FAIL: Non-integral translation equates as a tiling.\n"); + return 1; + } + + cmp = WCSCOMPARE_ANCILLARY | WCSCOMPARE_CRPIX; + if ((status = wcscompare(cmp, 0.0, &a, &b, &equal))) { + printf("wcscompare ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } else if (!equal) { + printf("FAIL: Translation not ignored.\n"); + return 1; + } + + printf("\nPASS: All comparisons returned as expected.\n"); + + wcsfree(&a); + wcsfree(&b); + + return 0; +} diff --git a/deps/wcslib/C/test/twcsfix.c b/deps/wcslib/C/test/twcsfix.c new file mode 100644 index 0000000..535f33b --- /dev/null +++ b/deps/wcslib/C/test/twcsfix.c @@ -0,0 +1,285 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcsfix.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* twcsfix tests the translation routines for non-standard WCS keyvalues, the +* wcsfix() suite. It also tests the change of celestial coordinate system +* routine, wcsccs(), and the spectral coordinate translation routine, +* wcssptr(). +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +void parser(struct wcsprm *); + +const int NAXIS = 3; +const double CRPIX[3] = {90.0, 90.0, 1.0}; +const double PC[3][3] = {{ 1.0, 0.0, 0.0}, + { 0.0, 1.0, 0.0}, + { 0.0, 0.0, 1.0}}; +const double CDELT[3] = {-1.0, 1.0, 19.68717093222}; + +char CUNIT[3][9] = {"ARCSEC", "ARCSEC", "KM/SEC"}; + +// N.B. non-standard spectral axis. +char CTYPE[3][9] = {"RA---NCP", "DEC--NCP", "FELO-HEL"}; + +// B1950.0 equatorial coordinates of the galactic pole. +// CUNITia is set to ARCSEC as an additional test. +const double CRVAL[3] = {192.2500*3600.0, 27.4000*3600.0, 5569.27104}; +const double RESTFRQ = 1.42040575e9; +const double RESTWAV = 0.0; + +// N.B. non-standard date-time format. +const char DATEOBS[] = "1957/02/15 01:10:00"; +const char DATEBEG[] = "1957/02/15 01:10:00"; +const char DATEAVG[] = "1957/02/15 02:10:00"; +const char DATEEND[] = "1957/02/15 03:10:00"; + +const double BEPOCH = 1957.124382563; +const double MJDBEG = 35884.048611; + +const double OBSGEO_L = 148.263510; +const double OBSGEO_B = -32.998406; +const double OBSGEO_H = 411.793; + +const double EQUINOX = 1950.0; + +// For testing spcfix(). +const int VELREF = 2; +const char SPECSYS[] = "BARYCENT"; + +int main() + +{ + int stat[NWCSFIX]; + + wcsprintf("Testing WCSLIB translator for non-standard usage (twcsfix.c)\n" + "------------------------------------------------------------\n\n"); + + struct wcsprm wcs0; + wcs0.flag = -1; + parser(&wcs0); + + // Note: to print the unfixed wcsprm struct using wcsprt() the struct + // would first have to be initialized by wcsset(). However, if the struct + // contains non-standard keyvalues then wcsset() will either fix them + // itself or else fail (e.g. for non-standard units). Thus, in general, + // wcsprt() cannot be used to print the unmodified struct. + + // Fix non-standard WCS keyvalues. + struct wcserr info[NWCSFIX]; + wcserr_enable(1); + int status = wcsfixi(7, 0, &wcs0, stat, info); + wcsprintf("wcsfix status returns: ("); + for (int i = 0; i < NWCSFIX; i++) { + wcsprintf(i ? ", %d" : "%d", stat[i]); + } + wcsprintf(")\n"); + + for (int i = 0; i < NWCSFIX; i++) { + if (info[i].status < -1 || 0 < info[i].status) { + wcsprintf("\n"); + wcserr_prt(info+i, 0x0); + + // Free memory used to store the message. + if (info[i].msg) wcsdealloc(info[i].msg); + } + } + + if (status) { + wcsprintf("\nwcsfix error %d", status); + return 1; + } + + // Extract information from the FITS header. + if (wcsset(&wcs0)) { + wcsprintf("\n"); + wcsperr(&wcs0, 0x0); + return 1; + } + + // Tidy up the struct and print it. + wcstrim(&wcs0); + wcsprintf("\n"); + wcsprt(&wcs0); + wcsprintf("\n------------------------------------" + "------------------------------------\n"); + + // Make a copy of the wcsprm struct. + struct wcsprm wcs1; + wcs1.flag = -1; + if (wcssub(1, &wcs0, 0x0, 0x0, &wcs1)) { + wcsperr(&wcs1, 0x0); + return 1; + } + + // Transform equatorial B1950 to galactic coordinates. The WCS has been + // constructed with the galactic pole coincident with the native pole of + // the projection in order to test the resolution of an indeterminacy. + if (wcsccs(&wcs1, 123.0, 27.4, 192.25, "GLON", "GLAT", 0x0, 0.0, "G")) { + wcsperr(&wcs1, 0x0); + return 1; + } + + // Should now have a 'VOPT-F2W' axis, translate it to frequency. + char ctypeS[9]; + strcpy(ctypeS, "FREQ-???"); + int i = -1; + if (wcssptr(&wcs1, &i, ctypeS)) { + wcsperr(&wcs1, 0x0); + return 1; + } + + if (wcsset(&wcs1)) { + wcsperr(&wcs1, 0x0); + return 1; + } + + // Tidy up the struct and print it. + wcstrim(&wcs1); + wcsprt(&wcs1); + + // Print before-and-afters. + printf("\nOriginal and new coordinates of reference point " + "(%4.1f, %4.1f, %3.1f), lonpole, and latpole:\n", + CRPIX[0], CRPIX[1], CRPIX[2]); + printf("%14.6f, %14.6f, %14.2f, %14.6f, %14.6f\n", + wcs0.crval[0], wcs0.crval[1], wcs0.crval[2], wcs0.lonpole, wcs0.latpole); + printf("%14.6f, %14.6f, %14.2f, %14.6f, %14.6f\n", + wcs1.crval[0], wcs1.crval[1], wcs1.crval[2], wcs1.lonpole, wcs1.latpole); + + // Compute B1950 coordinates of a field point. + double pixcrd[3] = {1000.0, 1000.0, 1.0}; + printf("\nOriginal and new coordinates of field point " + "(%5.1f, %5.1f, %3.1f):\n", pixcrd[0], pixcrd[1], pixcrd[2]); + + double imgcrd[3], phi, theta, world[3]; + if (wcsp2s(&wcs0, 1, 3, pixcrd, imgcrd, &phi, &theta, world, stat)) { + wcsperr(&wcs0, 0x0); + return 1; + } + + printf("%14.6f, %14.6f, %14.2f\n", world[0], world[1], world[2]); + + // Compute galactic coordinates of the same field point. + if (wcsp2s(&wcs1, 1, 3, pixcrd, imgcrd, &phi, &theta, world, stat)) { + wcsperr(&wcs1, 0x0); + return 1; + } + + printf("%14.6f, %14.6f, %14.2f\n", world[0], world[1], world[2]); + + wcsfree(&wcs0); + wcsfree(&wcs1); + + return 0; +} + +//---------------------------------------------------------------------------- + +void parser(wcs) + +struct wcsprm *wcs; + +{ + int i, j; + double *pcij; + + // In practice a parser would read the FITS header until it encountered + // the NAXIS keyword which must occur near the start, before any of the + // WCS keywords. It would then use wcsini() to allocate memory for + // arrays in the wcsprm struct and set default values. In this + // simulation the header keyvalues are set as global variables. + wcsnpv(2); + wcsini(1, NAXIS, wcs); + + + // Now the parser scans the FITS header, identifying WCS keywords and + // loading their values into the appropriate elements of the wcsprm + // struct. + + for (j = 0; j < NAXIS; j++) { + wcs->crpix[j] = CRPIX[j]; + } + + pcij = wcs->pc; + for (i = 0; i < NAXIS; i++) { + for (j = 0; j < NAXIS; j++) { + *(pcij++) = PC[i][j]; + } + } + + for (i = 0; i < NAXIS; i++) { + wcs->cdelt[i] = CDELT[i]; + } + + for (i = 0; i < NAXIS; i++) { + strcpy(wcs->cunit[i], &CUNIT[i][0]); + } + + for (i = 0; i < NAXIS; i++) { + strcpy(wcs->ctype[i], &CTYPE[i][0]); + } + + for (i = 0; i < NAXIS; i++) { + wcs->crval[i] = CRVAL[i]; + } + + wcs->restfrq = RESTFRQ; + wcs->restwav = RESTWAV; + + wcs->pv[0].i = -1; + wcs->pv[0].m = -1; + wcs->pv[0].value = -1.0; + wcs->npv = 1; + + wcs->velref = VELREF; + + // dateobs and datebeg will be set by datfix(). + strcpy(wcs->dateavg, DATEAVG); + strcpy(wcs->dateend, DATEEND); + wcs->bepoch = BEPOCH; + wcs->mjdbeg = MJDBEG; + + wcs->obsgeo[3] = OBSGEO_L; + wcs->obsgeo[4] = OBSGEO_B; + wcs->obsgeo[5] = OBSGEO_H; + + wcs->equinox = EQUINOX; + + strcpy(wcs->specsys, SPECSYS); + + return; +} diff --git a/deps/wcslib/C/test/twcsfix.out b/deps/wcslib/C/test/twcsfix.out new file mode 100644 index 0000000..430afbb --- /dev/null +++ b/deps/wcslib/C/test/twcsfix.out @@ -0,0 +1,453 @@ +Testing WCSLIB translator for non-standard usage (twcsfix.c) +------------------------------------------------------------ + +wcsfix status returns: (-1, 0, 0, 0, 0, 0, -1) + +INFORMATIVE message from datfix() at line 593 of file wcsfix.c: +Set MJD-OBS to 35884.048611 from BEPOCH. +Set DATE-OBS to '1957-02-15T01:10:00.018' from MJD-OBS. +Set DATE-BEG to '1957-02-15T01:09:59.990' from MJD-BEG. +Set MJD-AVG to 35884.090278 from DATE-AVG. +Changed DATE-AVG from '1957/02/15 02:10:00' to '1957-02-15T02:10:00'. +Set MJD-END to 35884.131944 from DATE-END. +Changed DATE-END from '1957/02/15 03:10:00' to '1957-02-15T03:10:00'. + +INFORMATIVE message from obsfix() at line 699 of file wcsfix.c: +Set OBSGEO-X to -4554231.538 from OBSGEO-[LBH]. +Set OBSGEO-Y to 2816759.125 from OBSGEO-[LBH]. +Set OBSGEO-Z to -3454036.303 from OBSGEO-[LBH]. + +INFORMATIVE message from unitfix() at line 840 of file wcsfix.c: +Changed units: + 'ARCSEC' -> 'arcsec', + 'ARCSEC' -> 'arcsec', + 'KM/SEC' -> 'km/s. + +INFORMATIVE message from spcfix() at line 885 of file wcsfix.c: +Changed CTYPE3 from 'FELO-HEL' to 'VOPT-F2W' (VELREF=2). + + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 19687. + crval: 0x
+ 192.25 27.400 5.5693e+06 + cunit: 0x
+ "deg" + "deg" + "m/s" + ctype: 0x
+ "RA---SIN" + "DEC--SIN" + "VOPT-F2W" + lonpole: 180.000000 + latpole: 27.400000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 3 + npvmax: 3 + pv: 0x
+ -1 -1 -1.0000 + 2 1 0.0000 + 2 2 1.9292 + nps: 0 + npsmax: 8 + ps: 0x0 + cd: 0x0 + crota: 0x0 + altlin: 0 + velref: 2 + alt: ' ' + colnum: 0 + colax: 0x0 + cname: 0x0 + crder: 0x0 + csyer: 0x0 + czphs: 0x0 + cperi: 0x0 + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: "1957-02-15T01:10:00.018" + datebeg: "1957-02-15T01:09:59.990" + dateavg: "1957-02-15T02:10:00" + dateend: "1957-02-15T03:10:00" + mjdobs: 35884.048611317 + mjdbeg: 35884.048611000 + mjdavg: 35884.090277778 + mjdend: 35884.131944444 + jepoch: UNDEFINED + bepoch: 1957.124382563 + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: -4554231.538450 2816759.125233 -3454036.303343 + 148.263510 -32.998406 411.793000 + obsorbit: UNDEFINED + radesys: "FK4" + equinox: 1950.000000000 + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 3 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x0 (= ps) + m_cd: 0x0 (= cd) + m_crota: 0x0 (= crota) + + m_colax: 0x0 (= colax) + m_cname: 0x0 (= cname) + m_crder: 0x0 (= crder) + m_csyer: 0x0 (= csyer) + m_czphs: 0x0 (= czphs) + m_cperi: 0x0 (= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 19687. + dispre: 0x0 + disseq: 0x0 + piximg: (nil) + imgpix: (nil) + i_naxis: 0 + unity: 1 + affine: 1 + simple: 1 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 192.25 27.400 180.00 27.400 + prj: (see below) + euler: 192.25 62.600 180.00 0.46020 0.88782 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 105 + code: "SIN" + r0: 57.295780 + pv: (0) + 0.0000 1.9292 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "orthographic/synthesis" + category: 1 (zenithal) + pvrange: 102 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 3.7218 4.7218 2.7218 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 111 + type: "VOPT" + code: "F2W" + crval: 5.5693e+06 + restfrq: 1420405750.000000 + restwav: 0.000000 + pv: (not used) + w: 0.21106 1.3945e+09 -4.5667 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x
+ spxS2P: 0x
+ spxP2X: 0x
+ +------------------------------------------------------------------------ + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 -89906. + crval: 0x
+ 303.00 90.000 1.3945e+09 + cunit: 0x
+ "deg" + "deg" + "Hz" + ctype: 0x
+ "GLON-SIN" + "GLAT-SIN" + "FREQ" + lonpole: 180.000000 + latpole: 90.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 2 + npvmax: 2 + pv: 0x
+ 2 1 0.0000 + 2 2 1.9292 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x0 + crota: 0x0 + altlin: 0 + velref: 2 + alt: 'G' + colnum: 0 + colax: 0x0 + cname: 0x0 + crder: 0x0 + csyer: 0x0 + czphs: 0x0 + cperi: 0x0 + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: "1957-02-15T01:10:00.018" + datebeg: "1957-02-15T01:09:59.990" + dateavg: "1957-02-15T02:10:00" + dateend: "1957-02-15T03:10:00" + mjdobs: 35884.048611317 + mjdbeg: 35884.048611000 + mjdavg: 35884.090277778 + mjdend: 35884.131944444 + jepoch: UNDEFINED + bepoch: 1957.124382563 + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: -4554231.538450 2816759.125233 -3454036.303343 + 148.263510 -32.998406 411.793000 + obsorbit: UNDEFINED + radesys: UNDEFINED + equinox: UNDEFINED + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "GLON" + lattyp: "GLAT" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 3 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x0 (= ps) + m_cd: 0x0 (= cd) + m_crota: 0x0 (= crota) + + m_colax: 0x0 (= colax) + m_cname: 0x0 (= cname) + m_crder: 0x0 (= crder) + m_csyer: 0x0 (= csyer) + m_czphs: 0x0 (= czphs) + m_cperi: 0x0 (= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 -89906. + dispre: 0x0 + disseq: 0x0 + piximg: (nil) + imgpix: (nil) + i_naxis: 0 + unity: 1 + affine: 1 + simple: 1 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 303.00 90.000 180.00 90.000 + prj: (see below) + euler: 303.00 0.0000 180.00 1.0000 0.0000 + latpreq: 0 (not required) + isolat: 1 + err: 0x0 + + prj.* + flag: 105 + code: "SIN" + r0: 57.295780 + pv: (0) + 0.0000 1.9292 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "orthographic/synthesis" + category: 1 (zenithal) + pvrange: 102 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 3.7218 4.7218 2.7218 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + +Original and new coordinates of reference point (90.0, 90.0, 1.0), lonpole, and latpole: + 192.250000, 27.400000, 5569271.04, 180.000000, 27.400000 + 303.000000, 90.000000, 1394500000.01, 180.000000, 90.000000 + +Original and new coordinates of field point (1000.0, 1000.0, 1.0): + 191.964631, 27.650355, 5569271.04 + 168.242805, 89.644021, 1394500000.01 diff --git a/deps/wcslib/C/test/twcshdr.c b/deps/wcslib/C/test/twcshdr.c new file mode 100644 index 0000000..6131cb0 --- /dev/null +++ b/deps/wcslib/C/test/twcshdr.c @@ -0,0 +1,245 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcshdr.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* twcshdr illustrates the steps required to read WCS information (including +* -TAB coordinates) from a FITS header using the CFITSIO library +* +* Options: +* -a: +* Specify an alternate coordinate representation to be used (ignored if +* there is only one). Can also be specified as a 0-relative index in +* the range 0 to 26, where the alternates are sequenced alphabetically +* following the primary representation. +* +* -h: Uses wcshdo() to translate the wcsprm struct into a FITS header and +* prints it. +* +* -p: Asks the user for a pixel coordinate which it transforms to world +* coordinates and prints. +* +* -w: Asks the user for a world coordinate which it transforms to pixel +* coordinates and prints. +* +* If none of the above options are specified it uses wcsprt() to print the +* wcsprm struct itself. +* +* Input comes from a user-specified FITS file. +* +*===========================================================================*/ + +#include +#include +#include +#include + +#include + +#include +#include + +int main(int argc, char *argv[]) + +{ + char *alt = 0x0, *header, *hptr; + int dohdr = 0, dopixel = 0, doworld = 0; + int alts[27], i, ialt, nkeyrec, nreject, nwcs, stat[NWCSFIX], status = 0; + double imgcrd[2], phi, pixcrd[2], theta, world[2]; + fitsfile *fptr; + struct wcsprm *wcs, *wcsi; + + + // Parse options. + for (i = 1; i < argc && argv[i][0] == '-'; i++) { + if (!argv[i][1]) break; + + switch (argv[i][1]) { + case 'a': + // Select an alternate WCS. + alt = argv[i]+2; + break; + + case 'h': + // Print header using wcshdo(). + dohdr = 1; + break; + + case 'p': + // Transform pixel coordinate. + dopixel = 1; + break; + + case 'w': + // Transform world coordinate. + doworld = 1; + break; + + default: + fprintf(stderr, "Usage: twcshdr [-a] [-h | -p | -w] \n"); + return 1; + } + } + + if (i != (argc-1)) { + fprintf(stderr, "Usage: twcshdr [-h | -p | -w] \n"); + return 1; + } + + // Open the FITS test file and read the primary header. + fits_open_file(&fptr, argv[i], READONLY, &status); + if ((status = fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, &status))) { + fits_report_error(stderr, status); + return 1; + } + + + //------------------------------------------------------------------------- + // Basic steps required to interpret a FITS WCS header, including -TAB. + //------------------------------------------------------------------------- + + // Parse the primary header of the FITS file. + if ((status = wcspih(header, nkeyrec, WCSHDR_all, -3, &nreject, &nwcs, + &wcs))) { + fprintf(stderr, "wcspih ERROR %d: %s.\n", status,wcshdr_errmsg[status]); + } + + // Read coordinate arrays from the binary table extension. + if ((status = fits_read_wcstab(fptr, wcs->nwtb, (wtbarr *)wcs->wtb, + &status))) { + fits_report_error(stderr, status); + return 1; + } + + // Translate non-standard WCS keyvalues. + if ((status = wcsfix(7, 0, wcs, stat))) { + for (i = 0; i < NWCSFIX; i++) { + if (stat[i] > 0) { + fprintf(stderr, "wcsfix ERROR %d: %s.\n", status, + wcsfix_errmsg[stat[i]]); + } + } + + return 1; + } + + // Sort out alternates. + i = 0; + if (alt) { + if ('0' <= *alt && *alt <= '9') { + if ((i = atoi(alt)) > nwcs-1) { + wcsfprintf(stderr, "WARNING, no alternate coordinate " + "representation \"%s\".\n", alt); + return 1; + } + + } else { + wcsidx(nwcs, &wcs, alts); + + ialt = toupper(*alt); + if (strlen(alt) > 1) { + wcsfprintf(stderr, "WARNING, alternate specifier \"%s\" is " + "invalid.\n", alt); + return 1; + + } else if (*alt == ' ') { + if (alts[0] == -1) { + wcsfprintf(stderr, "WARNING, no primary coordinate " + "representation.\n"); + return 1; + } + + } else if (ialt < 'A' || ialt > 'Z') { + wcsfprintf(stderr, "WARNING, alternate specifier \"%s\" is " + "invalid.\n", alt); + return 1; + + } else { + if ((i = alts[ialt - 'A' + 1]) == -1) { + wcsfprintf(stderr, "WARNING, no alternate coordinate " + "representation \"%s\".\n", alt); + return 1; + } + } + } + } + + wcsi = wcs + i; + + //------------------------------------------------------------------------- + // The wcsprm struct is now ready for use. + //------------------------------------------------------------------------- + + // Finished with the FITS file. + fits_close_file(fptr, &status); + fits_free_memory(header, &status); + + // Initialize the wcsprm struct, also taking control of memory allocated by + // fits_read_wcstab(). + if ((status = wcsset(wcsi))) { + fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } + + if (dohdr) { + if ((status = wcshdo(WCSHDO_all, wcsi, &nkeyrec, &header))) { + return 1; + } + + hptr = header; + printf("\n"); + for (i = 0; i < nkeyrec; i++, hptr += 80) { + printf("%.80s\n", hptr); + } + + wcsdealloc(header); + + } else if (dopixel) { + while (1) { + printf("Enter pixel coordinates: "); + if (scanf("%lf%*[ ,]%lf", pixcrd, pixcrd+1) != wcsi->naxis) break; + status = wcsp2s(wcsi, 1, 2, pixcrd, imgcrd, &phi, &theta, world, stat); + printf(" (%20.15f, %20.15f) ->\n (%20.15f, %20.15f)\n\n", + pixcrd[0], pixcrd[1], world[0], world[1]); + } + + } else if (doworld) { + while (1) { + printf("Enter world coordinates: "); + if (scanf("%lf%*[ ,]%lf", world, world+1) != wcsi->naxis) break; + status = wcss2p(wcsi, 1, 2, world, &phi, &theta, imgcrd, pixcrd, stat); + printf(" (%20.15f, %20.15f) ->\n (%20.15f, %20.15f)\n\n", + world[0], world[1], pixcrd[0], pixcrd[1]); + } + + } else { + // Print the struct. + if ((status = wcsprt(wcsi))) { + return 1; + } + } + + // Clean up. + status = wcsvfree(&nwcs, &wcs); + + return 0; +} diff --git a/deps/wcslib/C/test/twcslint b/deps/wcslib/C/test/twcslint new file mode 100644 index 0000000..2764285 --- /dev/null +++ b/deps/wcslib/C/test/twcslint @@ -0,0 +1,5 @@ +#!/bin/sh + + echo "Testing WCSLIB syntax checker for FITS WCS keyrecords (twcslint)" + echo "----------------------------------------------------------------" + ../utils/wcsware -l -p -v wcslint.fits diff --git a/deps/wcslib/C/test/twcslint.out b/deps/wcslib/C/test/twcslint.out new file mode 100644 index 0000000..9b67b60 --- /dev/null +++ b/deps/wcslib/C/test/twcslint.out @@ -0,0 +1,863 @@ +Testing WCSLIB syntax checker for FITS WCS keyrecords (twcslint) +---------------------------------------------------------------- +Found one coordinate representation. +SIMPLE = F / Conforms to FITS standard? NO! + Not a recognized WCS keyword. +BITPIX = -32 / IEEE single precision floating point + Not a recognized WCS keyword. +NAXIS = 0 / No image data + Not a recognized WCS keyword. +WCSAXESA= 4 / Four coordinate axes + Accepted (1) as a valid WCS keyrecord. +WCSNAMEA= 'wcslint test header' + Accepted (2) as a valid WCS keyrecord. +CRPIX1A = 513.0 / Pixel coordinate of reference point + Accepted (3) as a valid WCS keyrecord. +CRPIX2A = 513.0 / Pixel coordinate of reference point + Accepted (4) as a valid WCS keyrecord. +CRPIX3A = 1025.0 / Pixel coordinate of reference point + Accepted (5) as a valid WCS keyrecord. +CRPIX4A = 1.0 / Pixel coordinate of reference point + Accepted (6) as a valid WCS keyrecord. +PC1_1A = 0.866025404 / Linear transformation matrix element + Accepted (7) as a valid WCS keyrecord. +PC1_2A = 0.500000000 / Linear transformation matrix element + Accepted (8) as a valid WCS keyrecord. +PC2_1A = -0.500000000 / Linear transformation matrix element + Accepted (9) as a valid WCS keyrecord. +PC2_2A = 0.866025404 / Linear transformation matrix element + Accepted (10) as a valid WCS keyrecord. +CDELT1A = -0.10 / [deg] x-scale + Accepted (11) as a valid WCS keyrecord. +CUNIT1A = 'deg' / Degree units are required + Accepted (12) as a valid WCS keyrecord. +CTYPE1A = 'RA---SZP' / Right ascension in slant zenithal projection + Accepted (13) as a valid WCS keyrecord. +CRVAL1A = 150.0 / [deg] Right ascension at the reference point + Accepted (14) as a valid WCS keyrecord. +CNAME1A = 'Right ascension (J2000)' / Axis name for labelling purposes + Accepted (15) as a valid WCS keyrecord. +CDELT2A = 0.10 / [deg] y-scale + Accepted (16) as a valid WCS keyrecord. +CUNIT2A = 'deg' / Degree units are required + Accepted (17) as a valid WCS keyrecord. +CTYPE2A = 'DEC--SZP' / Declination in a slant zenithal projection + Accepted (18) as a valid WCS keyrecord. +CRVAL2A = -30.0 / [deg] Declination at the reference point + Accepted (19) as a valid WCS keyrecord. +CNAME2A = 'Declination (J2000)' / Axis name for labelling purposes + Accepted (20) as a valid WCS keyrecord. +PV1_1A = 0.0 / [deg] Native longitude of the reference point + Accepted (21) as a valid WCS keyrecord. +PV1_2A = 90.0 / [deg] Native latitude of the reference point + Accepted (22) as a valid WCS keyrecord. +PV1_3A = 195.0 / [deg] LONPOLEa by another name (precedence) + Accepted (23) as a valid WCS keyrecord. +PV1_4A = 999.0 / [deg] LATPOLEa by another name (precedence) + Accepted (24) as a valid WCS keyrecord. +PV2_1A = 0.0 / SZP distance, in spherical radii + Accepted (25) as a valid WCS keyrecord. +PV2_2A = 180.0 / [deg] SZP P-longitude + Accepted (26) as a valid WCS keyrecord. +PV2_3A = 45.0 / [deg] SZP P-latitude + Accepted (27) as a valid WCS keyrecord. +LONPOLEA= 195.0 / [deg] Native longitude of the NCP + Accepted (28) as a valid WCS keyrecord. +LATPOLEA= 999.0 / [deg] Native latitude of the NCP + Accepted (29) as a valid WCS keyrecord. +RADESYSA= 'FK5' / Mean equatorial coordinates, IAU 1984 system + Accepted (30) as a valid WCS keyrecord. +EQUINOXA= 2000.0 / [yr] Equinox of equatorial coordinates + Accepted (31) as a valid WCS keyrecord. +CDELT3A = -9.635265432e-6 / [m] Wavelength scale + Accepted (32) as a valid WCS keyrecord. +CUNIT3A = 'm' / Wavelength units + Accepted (33) as a valid WCS keyrecord. +CTYPE3A = 'WAVE-F2W' / Frequency axis expressed as wavelength + Accepted (34) as a valid WCS keyrecord. +CRVAL3A = 0.214982042 / [m] Reference wavelength + Accepted (35) as a valid WCS keyrecord. +CNAME3A = 'Wavelength' / Axis name for labelling purposes + Accepted (36) as a valid WCS keyrecord. +CRDER3A = 1.0e-11 / [m] Wavelength calibration, random error + Accepted (37) as a valid WCS keyrecord. +CSYER3A = 1.0e-12 / [m] Wavelength calibration, systematic error + Accepted (38) as a valid WCS keyrecord. +RESTFRQA= 1.42040575e9 / [Hz] HI rest frequency + Accepted (39) as a valid WCS keyrecord. +RESTWAVA= 0.211061141 / [m] HI rest wavelength + Accepted (40) as a valid WCS keyrecord. +SPECSYSA= 'BARYCENT' / Reference frame of spectral coordinates + Accepted (41) as a valid WCS keyrecord. +SSYSOBSA= 'TOPOCENT' / Reference frame of observation + Accepted (42) as a valid WCS keyrecord. +VELOSYSA= 1500.0 / [m/s] Bary-topo velocity towards the source + Accepted (43) as a valid WCS keyrecord. +SSYSSRCA= 'LSRK' / Reference frame of source redshift + Accepted (44) as a valid WCS keyrecord. +ZSOURCEA= 0.0025 / Redshift of the source + Accepted (45) as a valid WCS keyrecord. +CDELT4A = 1.0 / [s] Time scale + Accepted (46) as a valid WCS keyrecord. +CUNIT4A = 's' / Time units + Accepted (47) as a valid WCS keyrecord. +CTYPE4A = 'TIME''x''' / String value and comment containing quotes (') + Accepted (48) as a valid WCS keyrecord. +CRVAL4A = -2e3 / [s] Time at the reference point + Accepted (49) as a valid WCS keyrecord. +CNAME4A = 'Time offset' / Axis name for labelling purposes + Accepted (50) as a valid WCS keyrecord. +PS4_0A = 'UTC' / Time measurement system + Accepted (51) as a valid WCS keyrecord. +TIMESYS = 'UTC' / Time scale + Accepted (52) as a valid WCS keyrecord. +TREFPOS = 'TOPOCENTRE' / Time reference position, with OBSGEO-[XYZLBH] + Accepted (53) as a valid WCS keyrecord. +TREFDIR = 'RA_NOM,DEC_NOM' / Time reference direction + Accepted (54) as a valid WCS keyrecord. +PLEPHEM = 'DE405' / Ephemerides used for pathlength delays + Accepted (55) as a valid WCS keyrecord. +TIMEUNIT= 's' / Time units + Accepted (56) as a valid WCS keyrecord. +DATEREF = '1957-02-14T15:00:00'/ Date-time of fiducial time + Accepted (57) as a valid WCS keyrecord. +MJDREF = 35883.625 / [d] MJD corresponding to DATEREF + Accepted (58) as a valid WCS keyrecord. +MJDREFI = 35883 / [d] MJDREF, integer part + Accepted (59) as a valid WCS keyrecord. +MJDREFF = 0.625 / [d] MJDREF, fractional part + Accepted (60) as a valid WCS keyrecord. +JDREF = 2435884.125 / [d] JD corresponding to DATEREF + Accepted (61) as a valid WCS keyrecord. +JDREFI = 2435884 / [d] JDREF, integer part + Accepted (62) as a valid WCS keyrecord. +JDREFF = 0.125 / [d] JDREF, fractional part + Accepted (63) as a valid WCS keyrecord. +TIMEOFFS= 0.010 / [s] Clock correction + Accepted (64) as a valid WCS keyrecord. +DATE-OBS= '1957-02-14T15:00:00'/ UTC Date-time at start of observation + Accepted (65) as a valid WCS keyrecord. +MJD-OBS = 35883.625 / [d] MJD corresponding to DATE-OBS + Accepted (66) as a valid WCS keyrecord. +JEPOCH = 1957.125598905 / [a] Julian epoch corresponding to DATE-OBS + Accepted (67) as a valid WCS keyrecord. +BEPOCH = 1957.125960663 / [a] Besselian epoch corresponding to DATE-OBS + Accepted (68) as a valid WCS keyrecord. +DATE-BEG= '1957-02-14T15:00:00'/ Date-time at start of observation (UTC) + Accepted (69) as a valid WCS keyrecord. +MJD-BEG = 35883.625 / [d] MJD corresponding to DATE-BEG + Accepted (70) as a valid WCS keyrecord. +TSTART = 0.0 / [s] Start time with respect to DATEREF + Accepted (71) as a valid WCS keyrecord. +DATE-AVG= '1957-02-14T16:48:00'/ UTC Date-time at midpoint of observation + Accepted (72) as a valid WCS keyrecord. +MJD-AVG = 35883.700 / [d] MJD corresponding to DATE-AVG + Accepted (73) as a valid WCS keyrecord. +DATE-END= '1957-02-14T18:36:00'/ UTC Date-time at end of observation + Accepted (74) as a valid WCS keyrecord. +MJD-END = 35883.775 / [d] MJD corresponding to DATE-END + Accepted (75) as a valid WCS keyrecord. +TSTOP = 12960.0 / [s] Stop time with respect to DATEREF + Accepted (76) as a valid WCS keyrecord. +XPOSURE = 12960.0 / [s] Exposure (integration) time + Accepted (77) as a valid WCS keyrecord. +TELAPSE = 12960.0 / [s] Elapsed time (start to stop) + Accepted (78) as a valid WCS keyrecord. +TIMSYER = 5E-5 / [s] Systematic error in time measurements + Accepted (79) as a valid WCS keyrecord. +TIMRDER = 1E-9 / [s] Relative error in time measurements + Accepted (80) as a valid WCS keyrecord. +TIMEDEL = 1.0 / [s] Time resolution + Accepted (81) as a valid WCS keyrecord. +TIMEPIXR= 0.5 / Reference position of timestamp in binned data + Accepted (82) as a valid WCS keyrecord. +OBSGEO-X= -4554231.533 / [m] WGS84 coordinates of Parkes radiotelescope + Accepted (83) as a valid WCS keyrecord. +OBSGEO-Y= 2816759.109 / [m] WGS84 observatory y-coordinate + Accepted (84) as a valid WCS keyrecord. +OBSGEO-Z= -3454036.323 / [m] WGS84 observatory z-coordinate + Accepted (85) as a valid WCS keyrecord. +OBSGEO-L= 148.263510 / [deg] WGS84, IAU(1976) ellipsoid, longitude + Accepted (86) as a valid WCS keyrecord. +OBSGEO-B= -32.998406 / [deg] WGS84, IAU(1976) ellipsoid, latitude + Accepted (87) as a valid WCS keyrecord. +OBSGEO-H= 411.793 / [m] WGS84, IAU(1976) ellipsoid, height + Accepted (88) as a valid WCS keyrecord. +OBSORBIT= 'sputnik-1957.eph' / Spacecraft orbit ephemeris file + Accepted (89) as a valid WCS keyrecord. +PV4_1A = 1.0 + Accepted (90) as a valid WCS keyrecord. +PV4_2A = 2.0/ + Accepted (91) as a valid WCS keyrecord. +PV4_3A = 3.0 / + Accepted (92) as a valid WCS keyrecord. +PV4_4A = 4.0 / + Accepted (93) as a valid WCS keyrecord. +PS4_1A = 'ABC' + Accepted (94) as a valid WCS keyrecord. +PS4_2A = 'DEF'/ + Accepted (95) as a valid WCS keyrecord. +PS4_3A = 'GHI' / + Accepted (96) as a valid WCS keyrecord. +PS4_4A = 'JKL' / + Accepted (97) as a valid WCS keyrecord. +WCSNAMEX= 'eXtraneous' / Name of this coordinate system + Rejected (1), syntactically valid WCS keyrecord has no effect. +LONPOLEX= 180.0 / [deg] Native longitude of the NCP + Rejected (2), syntactically valid WCS keyrecord has no effect. +LATPOLEX= 999.0 / [deg] Native latitude of the NCP + Rejected (3), syntactically valid WCS keyrecord has no effect. +RESTFRQX= 1.42040575e9 / [Hz] HI rest frequency + Rejected (4), syntactically valid WCS keyrecord has no effect. +RESTWAVX= 0.211061141 / [m] HI rest wavelength + Rejected (5), syntactically valid WCS keyrecord has no effect. +EQUINOXX= 2000.0 / [yr] Equinox of equatorial coordinates + Rejected (6), syntactically valid WCS keyrecord has no effect. +RADESYSX= 'ICRS' / Mean equatorial coordinates, IAU 1984 system + Rejected (7), syntactically valid WCS keyrecord has no effect. +SPECSYSX= 'BARYCENT' / Reference frame of spectral coordinates + Rejected (8), syntactically valid WCS keyrecord has no effect. +SSYSOBSX= 'TOPOCENT' / Reference frame of observation + Rejected (9), syntactically valid WCS keyrecord has no effect. +SSYSSRCX= 'LSRK' / Reference frame of source redshift + Rejected (10), syntactically valid WCS keyrecord has no effect. +VELANGLX= 35.25 / Velocity orientation angle + Rejected (11), syntactically valid WCS keyrecord has no effect. +VELOSYSX= 1500.0 / [m/s] Bary-topo velocity towards the source + Rejected (12), syntactically valid WCS keyrecord has no effect. +ZSOURCEX= 0.0025 / Redshift of the source + Rejected (13), syntactically valid WCS keyrecord has no effect. +WCSNAMEB= B means BAD! / Name of this system + Rejected (14), a string value was expected. +WCSAXESB= -4 / Four coordinate axes + Rejected (15), negative value of WCSAXESa ignored. +CRPIX0B = 0.0 / Not a valid CRPIXja keyword + Rejected (16), axis number must exceed 0. +CDELT0B = 1.0 / Not a valid CDELTia keyword + Rejected (17), axis number must exceed 0. +CUNIT0B = 'INVALID' / Not a valid CUNITia keyword + Rejected (18), axis number must exceed 0. +CTYPE0B = 'INVALID' / Not a valid CTYPEia keyword + Rejected (19), axis number must exceed 0. +CRVAL0B = 0.0 / Not a valid CRVALia keyword + Rejected (20), axis number must exceed 0. +CNAME0B = 'INVALID' / Not a valid CNAMEia keyword + Rejected (21), axis number must exceed 0. +CRDER0B = 0.0 / Not a valid CRDERia keyword + Rejected (22), axis number must exceed 0. +CSYER0B = 0.0 / Not a valid CSYERia keyword + Rejected (23), axis number must exceed 0. +PC0_0B = 0.0 / Not a valid PCi_ja keyword + Rejected (24), axis number must exceed 0. +CD0_0B = 0.0 / Not a valid CDi_ja keyword + Rejected (25), axis number must exceed 0. +PV0_1B = 0.0 / Not a valid PVi_ma keyword + Rejected (26), axis number must exceed 0. +PS0_1B = 'INVALID' / Not a valid PSi_ma keyword + Rejected (27), axis number must exceed 0. +CRPIX01B= 0.0 / Invalid CRPIXja keyword syntax + Rejected (28), indices in parameterized keywords must not have leading zeroes. +CDELT01B= 1.0 / Invalid CDELTia keyword syntax + Rejected (29), indices in parameterized keywords must not have leading zeroes. +CUNIT01B= 'INVALID' / Invalid CUNITia keyword syntax + Rejected (30), indices in parameterized keywords must not have leading zeroes. +CTYPE01B= 'INVALID' / Invalid CTYPEia keyword syntax + Rejected (31), indices in parameterized keywords must not have leading zeroes. +CRVAL01B= 0.0 / Invalid CRVALia keyword syntax + Rejected (32), indices in parameterized keywords must not have leading zeroes. +CNAME01B= 'INVALID' / Invalid CNAMEia keyword syntax + Rejected (33), indices in parameterized keywords must not have leading zeroes. +CRDER01B= 0.0 / Invalid CRDERia keyword syntax + Rejected (34), indices in parameterized keywords must not have leading zeroes. +CSYER01B= 0.0 / Invalid CSYERia keyword syntax + Rejected (35), indices in parameterized keywords must not have leading zeroes. +PC01_1B = 1.0 / Invalid PCi_ja keyword syntax + Rejected (36), indices in parameterized keywords must not have leading zeroes. +PC1_01B = 0.0 / Invalid PCi_ja keyword syntax + Rejected (37), indices in parameterized keywords must not have leading zeroes. +PC01_01B= 0.0 / Invalid PCi_ja keyword syntax + Rejected (38), indices in parameterized keywords must not have leading zeroes. +PC1-1B = 1.0 / Invalid PCi_ja keyword syntax + Rejected (39), PCi_ja keyword must use an underscore, not a dash. +CD01_1B = 1.0 / Invalid CDi_ja keyword syntax + Rejected (40), indices in parameterized keywords must not have leading zeroes. +CD1_01B = 0.0 / Invalid CDi_ja keyword syntax + Rejected (41), indices in parameterized keywords must not have leading zeroes. +CD01_01B= 0.0 / Invalid CDi_ja keyword syntax + Rejected (42), indices in parameterized keywords must not have leading zeroes. +CD1-1B = 1.0 / Invalid CDi_ja keyword syntax + Rejected (43), CDi_ja keyword must use an underscore, not a dash. +PV01_1B = 0.0 / Invalid PVi_ma keyword syntax + Rejected (44), indices in parameterized keywords must not have leading zeroes. +PV1_01B = 0.0 / Invalid PVi_ma keyword syntax + Rejected (45), indices in parameterized keywords must not have leading zeroes. +PV01_01B= 0.0 / Invalid PVi_ma keyword syntax + Rejected (46), indices in parameterized keywords must not have leading zeroes. +PV1-1B = 0.0 / Invalid PVi_ma keyword syntax + Rejected (47), PVi_ma keyword must use an underscore, not a dash. +PS01_1B = 'INVALID' / Invalid PSi_ma keyword syntax + Rejected (48), indices in parameterized keywords must not have leading zeroes. +PS1_01B = 'INVALID' / Invalid PSi_ma keyword syntax + Rejected (49), indices in parameterized keywords must not have leading zeroes. +PS01_01B= 'INVALID' / Invalid PSi_ma keyword syntax + Rejected (50), indices in parameterized keywords must not have leading zeroes. +PS1-1B = 'INVALID' / Invalid PSi_ma keyword syntax + Rejected (51), PSi_ma keyword must use an underscore, not a dash. +EQUINOX1= 0.0 / Invalid EQUINOXa keyword syntax + Rejected (52), invalid alternate code, keyword resembles EQUINOXa but isn't. +LONPOLE2= 0.0 / Invalid LONPOLEa keyword syntax + Rejected (53), invalid alternate code, keyword resembles LONPOLEa but isn't. +LATPOLE3= 0.0 / Invalid LATPOLEa keyword syntax + Rejected (54), invalid alternate code, keyword resembles LATPOLEa but isn't. +RESTFRQ4= 0.0 / Invalid RESTFRQa keyword syntax + Rejected (55), invalid alternate code, keyword resembles RESTFRQa but isn't. +RESTWAV5= 0.0 / Invalid RESTWAVa keyword syntax + Rejected (56), invalid alternate code, keyword resembles RESTWAVa but isn't. +RADESYS6= 'INVALID' / Invalid RADESYSa keyword syntax + Rejected (57), invalid alternate code, keyword resembles RADESYSa but isn't. +SPECSYS7= 'INVALID' / Invalid SPECSYSa keyword syntax + Rejected (58), invalid alternate code, keyword resembles SPECSYSa but isn't. +SSYSOBS8= 'INVALID' / Invalid SSYSOBSa keyword syntax + Rejected (59), invalid alternate code, keyword resembles SSYSOBSa but isn't. +SSYSSRC9= 'INVALID' / Invalid SSYSSRCa keyword syntax + Rejected (60), invalid alternate code, keyword resembles SSYSSRCa but isn't. +VELANGL-= 0.0 / Invalid VELANGLa keyword syntax + Rejected (61), invalid alternate code, keyword resembles VELANGLa but isn't. +VELOSYS_= 0.0 / Invalid VELOSYSa keyword syntax + Rejected (62), invalid alternate code, keyword resembles VELOSYSa but isn't. +WCSNAMEb= 'INVALID' / Invalid WCSNAMEa keyword syntax + Rejected (63), invalid alternate code, keyword resembles WCSNAMEa but isn't. +ZSOURCE*= 0.0 / Invalid ZSOURCEa keyword syntax + Rejected (64), invalid alternate code, keyword resembles ZSOURCEa but isn't. +CRPIX2B = INVALID / Not a valid CRPIXja keyvalue + Rejected (65), a floating-point value was expected. +CDELT2B = (137, -1) / Not a valid CDELTia keyvalue + Rejected (66), a floating-point value was expected. +CUNIT2B = -1 / Not a valid CUNITia keyvalue + Rejected (67), a string value was expected. +CTYPE2B = T / Not a valid CTYPEia keyvalue + Rejected (68), a string value was expected. +CRVAL2B = 'INVALID' / Not a valid CRVALia keyvalue + Rejected (69), a floating-point value was expected. +CNAME2B = F / Not a valid CNAMEia keyvalue + Rejected (70), a string value was expected. +CRDER2B = (10E5,-0.1) / Not a valid CRDERia keyvalue + Rejected (71), a floating-point value was expected. +CSYER2B = 'INVALID' / Not a valid CSYERia keyvalue + Rejected (72), a floating-point value was expected. +PC1_1B = 0xff / Not a valid PCi_ja keyvalue + Rejected (73), invalid keyvalue. +CD1_1B = 'INVALID' / Not a valid CDi_ja keyvalue + Rejected (74), a floating-point value was expected. +PV1_1B = 'INVALID' / Not a valid PVi_ma keyvalue + Rejected (75), a floating-point value was expected. +PS1_1B = 0 / Not a valid PSi_ma keyvalue + Rejected (76), a string value was expected. +LONPOLEB= 'INVALID' / Not a valid LONPOLEa keyvalue + Rejected (77), a floating-point value was expected. +LATPOLEB= 'INVALID' / Not a valid LATPOLEa keyvalue + Rejected (78), a floating-point value was expected. +RESTFRQB= 'INVALID' / Not a valid RESTFRQa keyvalue + Rejected (79), a floating-point value was expected. +RESTWAVB= 'INVALID' / Not a valid RESTWAVa keyvalue + Rejected (80), a floating-point value was expected. +WCSNAMEB= 0.0 / Not a valid WCSNAMEa keyvalue + Rejected (81), a string value was expected. +TIMESYS = F / Not a valid TIMESYS keyvalue + Rejected (82), a string value was expected. +TREFPOS = F / Not a valid TREFPOS keyvalue + Rejected (83), a string value was expected. +TREFDIR = F / Not a valid TREFDIR keyvalue + Rejected (84), a string value was expected. +PLEPHEM = F / Not a valid PLEPHEM keyvalue + Rejected (85), a string value was expected. +TIMEUNIT= F / Not a valid TIMEUNIT keyvalue + Rejected (86), a string value was expected. +DATEREF = F / Not a valid DATEREF keyvalue + Rejected (87), a string value was expected. +MJDREF = F / Not a valid MJDREF keyvalue + Rejected (88), a floating-point value was expected. +MJDREFI = F / Not a valid MJDREFI keyvalue + Rejected (89), a floating-point value was expected. +MJDREFF = F / Not a valid MJDREFF keyvalue + Rejected (90), a floating-point value was expected. +JDREF = 'INVALID' / Not a valid JDREF keyvalue + Rejected (91), a floating-point value was expected. +JDREFI = 'INVALID' / Not a valid JDREFI keyvalue + Rejected (92), a floating-point value was expected. +JDREFF = 'INVALID' / Not a valid JDREFF keyvalue + Rejected (93), a floating-point value was expected. +TIMEOFFS= F / Not a valid TIMEOFFS keyvalue + Rejected (94), a floating-point value was expected. +DATE-OBS= 0.0 / Not a valid DATE-OBS keyvalue + Rejected (95), a string value was expected. +DATE-BEG= 0.0 / Not a valid DATE-BEG keyvalue + Rejected (96), a string value was expected. +DATE-AVG= 0.0 / Not a valid DATE-AVG keyvalue + Rejected (97), a string value was expected. +DATE-END= 0.0 / Not a valid DATE-END keyvalue + Rejected (98), a string value was expected. +MJD-OBS = 'INVALID' / Not a valid MJD-OBS keyvalue + Rejected (99), a floating-point value was expected. +MJD-BEG = 'INVALID' / Not a valid MJD-BEG keyvalue + Rejected (100), a floating-point value was expected. +MJD-AVG = 'INVALID' / Not a valid MJD-AVG keyvalue + Rejected (101), a floating-point value was expected. +MJD-END = 'INVALID' / Not a valid MJD-END keyvalue + Rejected (102), a floating-point value was expected. +JEPOCH = F / Not a valid JEPOCH keyvalue + Rejected (103), a floating-point value was expected. +BEPOCH = F / Not a valid BEPOCH keyvalue + Rejected (104), a floating-point value was expected. +TSTART = F / Not a valid TSTART keyvalue + Rejected (105), a floating-point value was expected. +TSTOP = F / Not a valid TSTOP keyvalue + Rejected (106), a floating-point value was expected. +XPOSURE = F / Not a valid XPOSURE keyvalue + Rejected (107), a floating-point value was expected. +TELAPSE = F / Not a valid TELAPSE keyvalue + Rejected (108), a floating-point value was expected. +TIMSYER = 'INVALID' / Not a valid TIMSYER keyvalue + Rejected (109), a floating-point value was expected. +TIMRDER = 'INVALID' / Not a valid TIMRDER keyvalue + Rejected (110), a floating-point value was expected. +TIMEDEL = 'INVALID' / Not a valid TIMEDEL keyvalue + Rejected (111), a floating-point value was expected. +TIMEPIXR= 2.0 / Not a valid TIMEPIXR keyvalue + Rejected (112), invalid keyvalue. +OBSGEO-X= 'INVALID' / Not a valid OBSGEO-X keyvalue + Rejected (113), a floating-point value was expected. +OBSGEO-Y= 'INVALID' / Not a valid OBSGEO-Y keyvalue + Rejected (114), a floating-point value was expected. +OBSGEO-Z= 'INVALID' / Not a valid OBSGEO-Z keyvalue + Rejected (115), a floating-point value was expected. +OBSGEO-L= 'INVALID' / Not a valid OBSGEO-L keyvalue + Rejected (116), a floating-point value was expected. +OBSGEO-B= 'INVALID' / Not a valid OBSGEO-B keyvalue + Rejected (117), a floating-point value was expected. +OBSGEO-H= 'INVALID' / Not a valid OBSGEO-H keyvalue + Rejected (118), a floating-point value was expected. +OBSORBIT= T / Not a valid OBSORBIT keyvalue + Rejected (119), a string value was expected. +RADESYSB= ICRS / Not a valid RADESYSa keyvalue + Rejected (120), a string value was expected. +EPOCH = 'B1950.0' / Not a valid EPOCH keyvalue + Rejected (121), the EPOCH keyword is deprecated, use EQUINOXa. +EQUINOXB= '2000.0' / Not a valid EQUINOXa keyvalue + Rejected (122), a floating-point value was expected. +SPECSYSB= 0.0 / Not a valid SPECSYSa keyvalue + Rejected (123), a string value was expected. +SSYSOBSB= 0.0 / Not a valid SSYSOBSa keyvalue + Rejected (124), a string value was expected. +VELOSYSB= 'INVALID' / Not a valid VELOSYSa keyvalue + Rejected (125), a floating-point value was expected. +ZSOURCEB= 'INVALID' / Not a valid ZSOURCEa keyvalue + Rejected (126), a floating-point value was expected. +SSYSSRCB= 0.0 / Not a valid SSYSSRCa keyvalue + Rejected (127), a string value was expected. +VELANGLB= 'INVALID' / Not a valid VELANGLa keyvalue + Rejected (128), a floating-point value was expected. +CRPIX3B= 0.0 / Illegal, "= " not in columns 9-10 + Rejected (129), keyword looks very much like CRPIXja but isn't. +CDELT3B = 1.0 / Illegal, "= " not in columns 9-10 + Rejected (130), invalid KEYWORD = VALUE syntax. +CUNIT3B ='deg' / Illegal, "= " not in columns 9-10 + Rejected (131), invalid KEYWORD = VALUE syntax. +CTYPE3B 'FREQ' / Illegal, "= " not in columns 9-10 + Rejected (132), invalid KEYWORD = VALUE syntax. +CRVAL3B = 2 + 2 / Not a valid keyvalue + Rejected (133), invalid keyvalue. +CNAME3B = 'IN' 'VALID' / Not a valid keyvalue + Rejected (134), invalid keyvalue. +CRDER3B = 1934-638 / Not a valid keyvalue + Rejected (135), invalid keyvalue. +CSYER3B = 1.2.3 / Not a valid keyvalue + Rejected (136), invalid keyvalue. +PC1_1B = 12h34m56s / Not a valid keyvalue + Rejected (137), invalid keyvalue. +CD1_1B = 0xFF / Not a valid keyvalue + Rejected (138), invalid keyvalue. +PV1_1B = 58 - 21 / Not a valid keyvalue + Rejected (139), invalid keyvalue. +PS1_1B = "UTC" / Not a valid keyvalue + Rejected (140), a string value was expected. +EQUINOXB= J2000 / Not a valid keyvalue + Rejected (141), a floating-point value was expected. +EPOCH = B1950.0 / Not a valid keyvalue + Rejected (142), the EPOCH keyword is deprecated, use EQUINOXa. +LONPOLEB= 180:00:00 / Not a valid keyvalue + Rejected (143), invalid keyvalue. +LATPOLEB= $9.99 / Not a valid keyvalue + Rejected (144), a floating-point value was expected. +RESTFRQB= / Not a valid keyvalue + Rejected (145), a floating-point value was expected. +RESTWAVB= / Not a valid keyvalue + Rejected (146), a floating-point value was expected. +RADESYSB= ICRS / Not a valid keyvalue + Rejected (147), a string value was expected. +SPECSYSB= 'BARYCENT' Invalid keycomment + Rejected (148), invalid keyvalue or malformed keycomment. +SSYSOBSB= 'TOPOCENT' 1/8 = 0.125 + Rejected (149), invalid keyvalue. +PV3_1B = 1.0O + Rejected (150), invalid keyvalue. +PV3_2B = 2 + 2 + Rejected (151), invalid keyvalue or malformed keycomment. +PV3_3B = 3.0 : + Rejected (152), invalid keyvalue or malformed keycomment. +PS3_1B = 'Jean-Pierre O'Toole' + Rejected (153), invalid keyvalue. +PS3_2B = 'UVW' : + Rejected (154), invalid keyvalue or malformed keycomment. +PS3_3B = 'XYZ' : + Rejected (155), invalid keyvalue or malformed keycomment. +CRPIX4A_= 'PHONEY' / Lookalike keyword is not CRPIXja + Rejected (156), keyword looks very much like CRPIXja but isn't. +CDELT4_B= 'PHONEY' / Lookalike keyword is not CDELTia + Rejected (157), keyword looks very much like CDELTia but isn't. +CUNIT4-B= 'PHONEY' / Lookalike keyword is not CUNITia + Rejected (158), keyword looks very much like CUNITia but isn't. +CTYPE-4B= 'PHONEY' / Lookalike keyword is not CTYPEia + Rejected (159), keyword looks very much like CTYPEia but isn't. +CRVAL_4B= 'PHONEY' / Lookalike keyword is not CRVALia + Rejected (160), keyword looks very much like CRVALia but isn't. +CNAME4_ = 'PHONEY' / Lookalike keyword is not CNAMEia + Rejected (161), keyword looks very much like CNAMEia but isn't. +CRDER4_ = 'PHONEY' / Lookalike keyword is not CRDERia + Rejected (162), keyword looks very much like CRDERia but isn't. +CSYER4_ = 'PHONEY' / Lookalike keyword is not CSYERia + Rejected (163), keyword looks very much like CSYERia but isn't. +PC4X4B = 'PHONEY' / Lookalike keyword is not PCi_ja + Not a recognized WCS keyword. +PC4__4B = 'PHONEY' / Lookalike keyword is not PCi_ja + Not a recognized WCS keyword. +PC4_IB = 'PHONEY' / Lookalike keyword is not PCi_ja + Not a recognized WCS keyword. +PC4 4B = 'PHONEY' / Lookalike keyword is not PCi_ja + Not a recognized WCS keyword. +CD4X4B = 'PHONEY' / Lookalike keyword is not CDi_ja + Not a recognized WCS keyword. +CD4__4B = 'PHONEY' / Lookalike keyword is not CDi_ja + Not a recognized WCS keyword. +CD4_IB = 'PHONEY' / Lookalike keyword is not CDi_ja + Not a recognized WCS keyword. +CD4 4B = 'PHONEY' / Lookalike keyword is not CDi_ja + Not a recognized WCS keyword. +PV4X4B = 'PHONEY' / Lookalike keyword is not PVi_ja + Not a recognized WCS keyword. +PV4__4B = 'PHONEY' / Lookalike keyword is not PVi_ja + Not a recognized WCS keyword. +PV4_OB = 'PHONEY' / Lookalike keyword is not PVi_ja + Not a recognized WCS keyword. +PV4 0B = 'PHONEY' / Lookalike keyword is not PVi_ja + Not a recognized WCS keyword. +PS4X4B = 'PHONEY' / Lookalike keyword is not PSi_ja + Not a recognized WCS keyword. +PS4__4B = 'PHONEY' / Lookalike keyword is not PSi_ja + Not a recognized WCS keyword. +PS4_IB = 'PHONEY' / Lookalike keyword is not PSi_ja + Not a recognized WCS keyword. +PS4 0B = 'PHONEY' / Lookalike keyword is not PSi_ja + Not a recognized WCS keyword. +CRPIXELS= 0.0 / Furphy, not CRPIXja + Rejected (164), keyword looks very much like CRPIXja but isn't. +PCATALOG= 0.0 / Furphy, not PCi_ja + Not a recognized WCS keyword. +CDELTA = 0.0 / Furphy, not CDELTia + Rejected (165), keyword looks very much like CDELTia but isn't. +CDI_JA = 0.0 / Furphy, not CDi_ja + Not a recognized WCS keyword. +CUNITARY= 0.0 / Furphy, not CUNITia + Rejected (166), keyword looks very much like CUNITia but isn't. +CTYPEXY = 0.0 / Furphy, not CTYPEia + Rejected (167), keyword looks very much like CTYPEia but isn't. +CRVALUE = 0.0 / Furphy, not CRVALia + Rejected (168), keyword looks very much like CRVALia but isn't. +CNAME = 0.0 / Furphy, not CNAMEia + Rejected (169), keyword looks very much like CNAMEia but isn't. +PV1_1AL = 0.0 / Furphy, not PVi_ma + Not a recognized WCS keyword. +PSEUDO = 0.0 / Furphy, not PSi_ma + Not a recognized WCS keyword. +EPOCHAL = 0.0 / Furphy, not EPOCH + Not a recognized WCS keyword. +VELREF1 = 0.0 / Furphy, not VELREF + Not a recognized WCS keyword. +EPOCHB = 0.0 / Invalid alternate code on EPOCH keyword + Rejected (170), the EPOCH keyword is deprecated, use EQUINOXa. +VELREFB = 0 / Invalid alternate code on VELREF keyword + Rejected (171), the VELREF keyword is deprecated, use SPECSYSa. +PC001001= 1.0 / PC00i00j keyword is deprecated, use PCi_ja + Rejected (172), this form of the PCi_ja keyword is deprecated, use PCi_ja. +CD001001= 1.0 / PC00i00j keyword is deprecated, use CDi_ja + Rejected (173), this form of the CDi_ja keyword is deprecated, use CDi_ja. +VSOURCEB= 0.0 / VSOURCEa keyword is deprecated, use ZSOURCEa + Rejected (174), the VSOURCEa keyword is deprecated, use ZSOURCEa. +RADECSYS= 'DEPRECATED' / RADECSYS keyword is deprecated, use RADESYSa + Rejected (175), the RADECSYS keyword is deprecated, use RADESYSa. +PROJP1 = 0.0 / PROJPn keyword is deprecated, use PVi_ma + Rejected (176), the PROJPn keyword is deprecated, use PVi_ma. +CROTA1 = 0.0 / CROTAn keyword is deprecated, use PCi_ja + Rejected (177), the CROTAn keyword is deprecated, use PCi_ja. +RESTFREQ= 0.0 / Use RESTFRQa in preference to RESTFREQ + Rejected (178), the RESTFREQ keyword is deprecated, use RESTFRQa. +ALTRPIX = 0.0 / AIPS spectral convention, not recognised + Not a recognized WCS keyword. +ALTRVAL = 0.0 / AIPS spectral convention, not recognised + Not a recognized WCS keyword. +END + Not a recognized WCS keyword. + + 178 keyrecords were rejected for syntax or other errors, + 97 were recognized as syntactically valid, and + 28 others were not recognized as WCS keyrecords. + +The rejected keyrecords do not conform strictly to the FITS WCS standard. + +wcslint test header + + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + crval: 0x
+ 150.00 -30.000 0.21498 -2000.0 + cunit: 0x
+ "deg" + "deg" + "m" + "s" + ctype: 0x
+ "RA---SZP" + "DEC--SZP" + "WAVE-F2W" + "TIME'x'" + lonpole: 195.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.211061 + npv: 11 + npvmax: 11 + pv: 0x
+ 1 1 0.0000 + 1 2 90.000 + 1 3 195.00 + 1 4 -30.000 + 2 1 0.0000 + 2 2 180.00 + 2 3 45.000 + 4 1 1.0000 + 4 2 2.0000 + 4 3 3.0000 + 4 4 4.0000 + nps: 5 + npsmax: 5 + ps: 0x
+ 4 0 UTC + 4 1 ABC + 4 2 DEF + 4 3 GHI + 4 4 JKL + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 1 + velref: 0 + alt: 'A' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Wavelength" + "Time offset" + crder: 0x
+ UNDEFINED UNDEFINED 1.0000e-11 UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED 1.0000e-12 UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "wcslint test header" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: "TOPOCENT" + velosys: 1500.000000000 + zsource: 0.002500000 + ssyssrc: "LSRK" + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 0 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.086603 -0.050000 -0.0000 -0.0000 +piximg[1][]: -0.050000 0.086603 0.0000 0.0000 +piximg[2][]: -0.0000 -0.0000 -9.6353e-06 -0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -8.6603 -5.0000 -0.0000 -0.0000 +imgpix[1][]: -5.0000 8.6603 0.0000 0.0000 +imgpix[2][]: -0.0000 -0.0000 -1.0379e+05 -0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 195.00 -30.000 + prj: (see below) + euler: 150.00 120.00 195.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 102 + code: "SZP" + r0: 57.295780 + pv: (0) + 0.0000 180.00 45.000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "slant zenithal perspective" + category: 1 (zenithal) + pvrange: 103 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 -0.0000 -0.0000 1.0000 -0.0000 + -0.0000 57.296 -1.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 110 + type: "WAVE" + code: "F2W" + crval: 0.21498 + restfrq: 1420405750.000000 + restwav: 0.211061 + pv: (not used) + w: 0.0000 1.3945e+09 -6.4866e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x
diff --git a/deps/wcslib/C/test/twcsmix.c b/deps/wcslib/C/test/twcsmix.c new file mode 100644 index 0000000..616c7b4 --- /dev/null +++ b/deps/wcslib/C/test/twcsmix.c @@ -0,0 +1,830 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcsmix.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* twcsmix tests wcsmix() for closure on the 1 degree celestial graticule for +* a number of selected projections. Points with good solutions are marked +* with a white dot on a graphical display of the projection while bad +* solutions are flagged with a red circle. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include +#include + + +void mixex(double, double, double, double); +void id(struct wcsprm *, int *, double, double, double, double); +void grdplt(struct wcsprm *, double, double, double, double); +void parser(struct wcsprm *); + +// Set to 1 to skip wcsmix(), primarily for debugging purposes. +const int skip_wcsmix = 0; + +// Reporting tolerance for mixex(). +const double tol = 1.0e-9; + + +// In real life these would be encoded as FITS header keyrecords. +const int NAXIS = 4; +const double CRPIX[4] = { 513.0, 0.0, 0.0, 0.0}; +const double PC[4][4] = {{ 1.1, 0.0, 0.0, 0.0}, + { 0.0, 1.0, 0.0, 0.1}, + { 0.0, 0.0, 1.0, 0.0}, + { 0.0, 0.2, 0.0, 1.0}}; +const double CDELT[4] = {-9.635265432e-6, 1.0, 1.0, -1.0}; + + // The "xxx" is reset in main(). +char CTYPE[4][9] = {"WAVE-F2W", "XLAT-xxx", "TIME ", "XLON-xxx"}; + + // Will be reset in mixex(). +double CRVAL[4] = {0.214982042, -30.0, -2e3, 150.0}; +double LONPOLE = 150.0; +double LATPOLE = 999.0; +double RESTFRQ = 1.42040575e9; +double RESTWAV = 0.0; + +int NPV; +struct pvcard PV[10]; // Projection parameters are set in main(). + +int main() + +{ + char text[80]; + register int status; + + + printf("Testing WCSLIB wcsmix() routine (twcsmix.c)\n" + "-------------------------------------------\n"); + + // List status return messages. + printf("\nList of wcs status return values:\n"); + for (status = 1; status <= 13; status++) { + printf("%4d: %s.\n", status, wcs_errmsg[status]); + } + + + // PGPLOT initialization. + strcpy(text, "/xwindow"); + cpgbeg(0, text, 1, 1); + + // Define pen colours. + cpgscr(0, 0.00f, 0.00f, 0.00f); + cpgscr(1, 1.00f, 1.00f, 0.00f); + cpgscr(2, 1.00f, 1.00f, 1.00f); + cpgscr(3, 0.50f, 0.50f, 0.80f); + cpgscr(4, 0.80f, 0.50f, 0.50f); + cpgscr(5, 0.80f, 0.80f, 0.80f); + cpgscr(6, 0.50f, 0.50f, 0.80f); + cpgscr(7, 0.80f, 0.50f, 0.50f); + cpgscr(8, 0.30f, 0.50f, 0.30f); + cpgscr(9, 1.00f, 0.75f, 0.00f); + + + //------------------------------------------------------------ + // Set the PVi_m keyvalues for the longitude axis so that + // the fiducial native coordinates are at the native pole, + // i.e. (phi0,theta0) = (0,90), but without any fiducial + // offset. We do this as a test, and also so that all + // projections will be exercised with the same obliquity + // parameters. + //------------------------------------------------------------ + PV[0].i = 4; // Longitude is on axis 4. + PV[0].m = 1; // Parameter number 1. + PV[0].value = 0.0; // Fiducial native longitude. + + PV[1].i = 4; // Longitude is on axis 4. + PV[1].m = 2; // Parameter number 2. + PV[1].value = 90.0; // Fiducial native latitude. + + // Set the PVi_m keyvalues for the latitude axis. + PV[2].i = 2; // Latitude is on axis 2. + PV[2].m = 1; // Parameter number 1. + PV[2].value = 0.0; // PVi_1 (set below). + + PV[3].i = 2; // Latitude is on axis 2. + PV[3].m = 2; // Parameter number 2. + PV[3].value = 0.0; // PVi_2 (set below). + + // ARC: zenithal/azimuthal equidistant. + memcpy(&CTYPE[1][5], "ARC", 3); + memcpy(&CTYPE[3][5], "ARC", 3); + NPV = 2; + mixex(-190.0, 190.0, -190.0, 190.0); + + // ZEA: zenithal/azimuthal equal area. + memcpy(&CTYPE[1][5], "ZEA", 3); + memcpy(&CTYPE[3][5], "ZEA", 3); + NPV = 2; + mixex(-120.0, 120.0, -120.0, 120.0); + + // CYP: cylindrical perspective. + memcpy(&CTYPE[1][5], "CYP", 3); + memcpy(&CTYPE[3][5], "CYP", 3); + NPV = 4; + PV[2].value = 3.0; + PV[3].value = 0.8; + mixex(-170.0, 170.0, -170.0, 170.0); + + // CEA: cylindrical equal area. + memcpy(&CTYPE[1][5], "CEA", 3); + memcpy(&CTYPE[3][5], "CEA", 3); + NPV = 3; + PV[2].value = 0.75; + mixex(-200.0, 200.0, -200.0, 200.0); + + // CAR: plate carree. + memcpy(&CTYPE[1][5], "CAR", 3); + memcpy(&CTYPE[3][5], "CAR", 3); + NPV = 2; + mixex(-210.0, 210.0, -210.0, 210.0); + + // SFL: Sanson-Flamsteed. + memcpy(&CTYPE[1][5], "SFL", 3); + memcpy(&CTYPE[3][5], "SFL", 3); + NPV = 2; + mixex(-190.0, 190.0, -190.0, 190.0); + + // PAR: parabolic. + memcpy(&CTYPE[1][5], "PAR", 3); + memcpy(&CTYPE[3][5], "PAR", 3); + NPV = 2; + mixex(-190.0, 190.0, -190.0, 190.0); + + // MOL: Mollweide's projection. + memcpy(&CTYPE[1][5], "MOL", 3); + memcpy(&CTYPE[3][5], "MOL", 3); + NPV = 2; + mixex(-170.0, 170.0, -170.0, 170.0); + + // AIT: Hammer-Aitoff. + memcpy(&CTYPE[1][5], "AIT", 3); + memcpy(&CTYPE[3][5], "AIT", 3); + NPV = 2; + mixex(-170.0, 170.0, -170.0, 170.0); + + // COE: conic equal area. + memcpy(&CTYPE[1][5], "COE", 3); + memcpy(&CTYPE[3][5], "COE", 3); + NPV = 4; + PV[2].value = 60.0; + PV[3].value = 15.0; + mixex(-140.0, 140.0, -120.0, 160.0); + + // COD: conic equidistant. + memcpy(&CTYPE[1][5], "COD", 3); + memcpy(&CTYPE[3][5], "COD", 3); + NPV = 4; + PV[2].value = 60.0; + PV[3].value = 15.0; + mixex(-200.0, 200.0, -180.0, 220.0); + + // BON: Bonne's projection. + memcpy(&CTYPE[1][5], "BON", 3); + memcpy(&CTYPE[3][5], "BON", 3); + NPV = 3; + PV[2].value = 30.0; + mixex(-160.0, 160.0, -160.0, 160.0); + + // PCO: polyconic. + memcpy(&CTYPE[1][5], "PCO", 3); + memcpy(&CTYPE[3][5], "PCO", 3); + NPV = 2; + mixex(-190.0, 190.0, -190.0, 190.0); + + // TSC: tangential spherical cube. + memcpy(&CTYPE[1][5], "TSC", 3); + memcpy(&CTYPE[3][5], "TSC", 3); + NPV = 2; + mixex(-340.0, 80.0, -210.0, 210.0); + + // QSC: quadrilateralized spherical cube. + memcpy(&CTYPE[1][5], "QSC", 3); + memcpy(&CTYPE[3][5], "QSC", 3); + NPV = 2; + mixex(-340.0, 80.0, -210.0, 210.0); + + cpgend(); + + return 0; +} + + +/*---------------------------------------------------------------------------- +* mixex() tests wcsmix(). +*---------------------------------------------------------------------------*/ + +void mixex(imin, imax, jmin, jmax) + +double imax, imin, jmax, jmin; + +{ + int doid, lat, lng, wcslat, wcslng, stat, status; + float ipt[1], jpt[1]; + double lng1, lat1, phi, theta; + double latspan[2], lngspan[2]; + double img[4], pix1[4], pix2[4], pix3[4], world[4]; + double pixlng, pixlat, *worldlat, *worldlng; + struct wcsprm wcs; + struct prjprm *wcsprj = &(wcs.cel.prj); + + + // This routine simulates the actions of a FITS header parser. + wcs.flag = -1; + parser(&wcs); + + + // Draw the coordinate graticule. + grdplt(&wcs, imin, imax, jmin, jmax); + if (skip_wcsmix) return; + + + printf("Testing %s; reporting tolerance %5.1g deg.\n", wcsprj->code, tol); + + // Cache frequently used values. + wcslng = wcs.lng; + wcslat = wcs.lat; + worldlng = world + wcslng; + worldlat = world + wcslat; + + world[0] = 0.0; + world[1] = 0.0; + world[2] = 0.0; + world[3] = 0.0; + + world[wcs.spec] = 2.99792458e8 / RESTFRQ; + + for (lat = 90; lat >= -90; lat--) { + lat1 = (double)lat; + + for (lng = -180; lng <= 180; lng+=15) { + lng1 = (double)lng; + + *worldlng = lng1; + *worldlat = lat1; + if ((status = wcss2p(&wcs, 1, 4, world, &phi, &theta, img, pix1, + &stat))) { + printf("%3s(s2x): lng1 =%20.15f lat1 =%20.15f ERROR %3d\n", + wcsprj->code, lng1, lat1, status); + continue; + } + + pixlng = pix1[wcslng]; + pixlat = pix1[wcslat]; + + ipt[0] = pixlng; + jpt[0] = pixlat; + cpgpt(1, ipt, jpt, -1); + + lngspan[0] = lng1 - 9.3; + if (lngspan[0] < -180.0) lngspan[0] = -180.0; + lngspan[1] = lng1 + 4.1; + if (lngspan[1] > 180.0) lngspan[1] = 180.0; + latspan[0] = lat1 - 3.7; + if (latspan[0] < -90.0) latspan[0] = -90.0; + latspan[1] = lat1 + 7.2; + if (latspan[1] > 90.0) latspan[1] = 90.0; + + doid = 1; + + pix2[wcslng] = pixlng; + if ((status = wcsmix(&wcs, wcslng, 1, latspan, 1.0, 0, world, &phi, + &theta, img, pix2))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" A: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, + pix3, &stat))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" A: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if (fabs(pix3[wcslng]-pixlng) > tol && + (fabs(*worldlat-lat1) > tol || + fabs(pix2[wcslat]-pixlat) > tol)) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" A: (lng2) =%20.15f lat2 =%20.15f\n", *worldlng, + *worldlat); + printf(" phi =%20.15f theta =%20.15f\n", phi, theta); + printf(" (i2) =%20.15f j2 =%20.15f\n", pix2[wcslng], + pix2[wcslat]); + } + + + pix2[wcslat] = pixlat; + if ((status = wcsmix(&wcs, wcslat, 1, latspan, 1.0, 0, world, &phi, + &theta, img, pix2))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" B: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, + pix3, &stat))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" B: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if (fabs(pix3[wcslat]-pixlat) > tol && + (fabs(*worldlat-lat1) > tol || + fabs(pix2[wcslng]-pixlng) > tol)) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" B: (lng2) =%20.15f lat2 =%20.15f\n", *worldlng, + *worldlat); + printf(" phi =%20.15f theta =%20.15f\n", phi, theta); + printf(" i2 =%20.15f (j2) =%20.15f\n", pix2[wcslng], + pix2[wcslat]); + } + + *worldlat = lat1; + + pix2[wcslng] = pixlng; + if ((status = wcsmix(&wcs, wcslng, 2, lngspan, 1.0, 0, world, &phi, + &theta, img, pix2))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" C: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, + pix3, &stat))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" C: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if (fabs(pix3[wcslng]-pixlng) > tol && + (fabs(*worldlng-lng1) > tol || + fabs(pix2[wcslat]-pixlat) > tol)) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" C: lng2 =%20.15f (lat2) =%20.15f\n", *worldlng, + *worldlat); + printf(" phi =%20.15f theta =%20.15f\n", phi, theta); + printf(" (i2) =%20.15f j2 =%20.15f\n", pix2[wcslng], + pix2[wcslat]); + } + + + pix2[wcslat] = pixlat; + if ((status = wcsmix(&wcs, wcslat, 2, lngspan, 1.0, 0, world, &phi, + &theta, img, pix2))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" D: wcsmix ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if ((status = wcss2p(&wcs, 1, 0, world, &phi, &theta, img, + pix3, &stat))) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" D: wcss2p ERROR %d: %s.\n", status, wcs_errmsg[status]); + + } else if (fabs(pix3[wcslat]-pixlat) > tol && + (fabs(*worldlng-lng1) > tol || + fabs(pix2[wcslng]-pixlng) > tol)) { + id(&wcs, &doid, lng1, lat1, pixlng, pixlat); + printf(" D: lng2 =%20.15f (lat2) =%20.15f\n", *worldlng, + *worldlat); + printf(" phi =%20.15f theta =%20.15f\n", phi, theta); + printf(" i2 =%20.15f (j2) =%20.15f\n", pix2[wcslng], + pix2[wcslat]); + } + + } + } + + wcsfree(&wcs); + + return; +} + +//---------------------------------------------------------------------------- + +void id(wcs, doid, lng1, lat1, pixlng, pixlat) + +struct wcsprm *wcs; +int *doid; +double lng1, lat1, pixlng, pixlat; + +{ + float ipt[1], jpt[1]; + double phi, theta; + struct celprm *wcscel = &(wcs->cel); + struct prjprm *wcsprj = &(wcscel->prj); + + if (*doid) { + // Compute native coordinates. + sphs2x(wcscel->euler, 1, 1, 1, 1, &lng1, &lat1, &phi, &theta); + + printf("\n%3s: lng1 =%20.15f lat1 =%20.15f\n", wcsprj->code, lng1, + lat1); + printf( " phi =%20.15f theta =%20.15f\n", phi, theta); + printf( " i1 =%20.15f j1 =%20.15f\n", pixlng, pixlat); + *doid = 0; + + cpgsci(9); + ipt[0] = pixlng; + jpt[0] = pixlat; + cpgpt(1, ipt, jpt, 21); + cpgsci(2); + } + + return; +} + +//---------------------------------------------------------------------------- + +void grdplt(wcs, imin, imax, jmin, jmax) + +struct wcsprm *wcs; +double imax, imin, jmax, jmin; + +{ +#define NELEM 9 + + char text[80]; + int ci, ilat, ilng, j, k, stat[361]; + float fimax, fimin, fjmax, fjmin, ir[1024], jr[1024]; + double freq, img[361][NELEM], lat, lng, phi[361], pix[361][NELEM], step, + theta[361], world[361][NELEM]; + double *pixlat, *pixlng, *worldlat, *worldlng; + struct wcsprm native; + struct celprm *wcscel = &(wcs->cel); + struct prjprm *wcsprj = &(wcscel->prj); + struct prjprm *ntvprj = &(native.cel.prj); + + + // Initialize non-celestial world coordinates. + freq = 1.42040595e9 - 180.0 * 62500.0; + for (j = 0; j < 361; j++) { + world[j][0] = 0.0; + world[j][1] = 0.0; + world[j][2] = 0.0; + world[j][3] = 0.0; + + world[j][wcs->spec] = 2.99792458e8 / freq; + freq += 62500.0; + } + + + // Define PGPLOT viewport. + fimax = (float)imax; + fimin = (float)imin; + fjmax = (float)jmax; + fjmin = (float)jmin; + cpgenv(fimin, fimax, fjmin, fjmax, 1, -2); + + // Draw face boundaries of the quad-cube projections. + if (wcsprj->category == QUADCUBE) { + cpgsci(8); + + // Draw the map boundary. + for (j = 0; j < 9; j++) { + img[j][0] = 0.0; + img[j][1] = 0.0; + img[j][2] = 0.0; + img[j][3] = 0.0; + } + + img[0][wcs->lng] = -wcsprj->w[0]; + img[0][wcs->lat] = wcsprj->w[0]; + img[1][wcs->lng] = -wcsprj->w[0]; + img[1][wcs->lat] = wcsprj->w[0]*3.0; + img[2][wcs->lng] = wcsprj->w[0]; + img[2][wcs->lat] = wcsprj->w[0]*3.0; + img[3][wcs->lng] = wcsprj->w[0]; + img[3][wcs->lat] = -wcsprj->w[0]*3.0; + img[4][wcs->lng] = -wcsprj->w[0]; + img[4][wcs->lat] = -wcsprj->w[0]*3.0; + img[5][wcs->lng] = -wcsprj->w[0]; + img[5][wcs->lat] = wcsprj->w[0]; + img[6][wcs->lng] = wcsprj->w[0]*7.0; + img[6][wcs->lat] = wcsprj->w[0]; + img[7][wcs->lng] = wcsprj->w[0]*7.0; + img[7][wcs->lat] = -wcsprj->w[0]; + img[8][wcs->lng] = -wcsprj->w[0]; + img[8][wcs->lat] = -wcsprj->w[0]; + + linx2p(&(wcs->lin), 9, NELEM, img[0], pix[0]); + + for (j = 0; j < 9; j++) { + ir[j] = pix[j][wcs->lng]; + jr[j] = pix[j][wcs->lat]; + } + + cpgline(9, ir, jr); + } + + if (wcsprj->category == POLYCONIC) { + step = 10.0; + } else { + step = 15.0; + } + + + // Draw the native coordinate graticule faintly in the background. + native.flag = -1; + (void)wcscopy(1, wcs, &native); + native.crval[wcs->lng] = 0.0; + native.crval[wcs->lat] = 90.0; + native.lonpole = 180.0; + (void)wcsset(&native); + + cpgsci(8); + + // Draw native meridians of longitude. + for (ilng = -180; ilng <= 180; ilng += 15) { + lng = (double)ilng; + if (ilng == -180) lng = -179.99; + if (ilng == 180) lng = 179.99; + + worldlng = world[0] + native.lng; + worldlat = world[0] + native.lat; + for (ilat = -90; ilat <= 90; ilat++) { + *worldlng = lng; + *worldlat = (double)ilat; + + worldlng += NELEM; + worldlat += NELEM; + } + + if (wcss2p(&native, 181, NELEM, world[0], phi, theta, img[0], pix[0], + stat)) { + continue; + } + + k = 0; + pixlng = pix[0] + native.lng; + pixlat = pix[0] + native.lat; + for (ilat = -90; ilat <= 90; ilat++) { + if (ntvprj->category == QUADCUBE && k > 0) { + if (fabs(*pixlng - ir[k-1]) > 2.0 || + fabs(*pixlat - jr[k-1]) > 5.0) { + if (k > 1) cpgline(k, ir, jr); + k = 0; + } + } + + ir[k] = *pixlng; + jr[k] = *pixlat; + k++; + + pixlng += NELEM; + pixlat += NELEM; + } + + cpgline(k, ir, jr); + } + + // Draw native parallels of latitude. + for (ilat = -90; ilat <= 90; ilat += 15) { + lat = (double)ilat; + + worldlng = world[0] + native.lng; + worldlat = world[0] + native.lat; + for (ilng = -180; ilng <= 180; ilng++) { + lng = (double)ilng; + if (ilng == -180) lng = -179.99; + if (ilng == 180) lng = 179.99; + + *worldlng = lng; + *worldlat = lat; + + worldlng += NELEM; + worldlat += NELEM; + } + + if (wcss2p(&native, 361, NELEM, world[0], phi, theta, img[0], pix[0], + stat)) { + continue; + } + + k = 0; + pixlng = pix[0] + native.lng; + pixlat = pix[0] + native.lat; + for (ilng = -180; ilng <= 180; ilng++) { + if (ntvprj->category == QUADCUBE && k > 0) { + if (fabs(*pixlng - ir[k-1]) > 2.0 || + fabs(*pixlat - jr[k-1]) > 5.0) { + if (k > 1) cpgline(k, ir, jr); + k = 0; + } + } + + ir[k] = *pixlng; + jr[k] = *pixlat; + k++; + + pixlng += NELEM; + pixlat += NELEM; + } + + cpgline(k, ir, jr); + } + + wcsfree(&native); + + + // Draw a colour-coded celestial coordinate graticule. + ci = 1; + + // Draw celestial meridians of longitude. + for (ilng = -180; ilng <= 180; ilng += 15) { + lng = (double)ilng; + + if (++ci > 7) ci = 2; + cpgsci(ilng?ci:1); + + worldlng = world[0] + wcs->lng; + worldlat = world[0] + wcs->lat; + for (ilat = -90; ilat <= 90; ilat++) { + lat = (double)ilat; + + *worldlng = lng; + *worldlat = lat; + + worldlng += NELEM; + worldlat += NELEM; + } + + if (wcss2p(wcs, 181, NELEM, world[0], phi, theta, img[0], pix[0], + stat)) { + continue; + } + + k = 0; + pixlng = pix[0] + wcs->lng; + pixlat = pix[0] + wcs->lat; + for (ilat = -90; ilat <= 90; ilat++) { + // Test for discontinuities. + if (k > 0) { + if (fabs(*pixlng - ir[k-1]) > step || + fabs(*pixlat - jr[k-1]) > step) { + if (k > 1) cpgline(k, ir, jr); + k = 0; + } + } + + ir[k] = *pixlng; + jr[k] = *pixlat; + k++; + + pixlng += NELEM; + pixlat += NELEM; + } + + cpgline(k, ir, jr); + } + + // Draw celestial parallels of latitude. + ci = 1; + for (ilat = -90; ilat <= 90; ilat += 15) { + lat = (double)ilat; + + if (++ci > 7) ci = 2; + cpgsci(ilat?ci:1); + + worldlng = world[0] + wcs->lng; + worldlat = world[0] + wcs->lat; + for (ilng = -180; ilng <= 180; ilng++) { + lng = (double)ilng; + + *worldlng = lng; + *worldlat = lat; + + worldlng += NELEM; + worldlat += NELEM; + } + + if (wcss2p(wcs, 361, NELEM, world[0], phi, theta, img[0], pix[0], + stat)) { + continue; + } + + k = 0; + pixlng = pix[0] + wcs->lng; + pixlat = pix[0] + wcs->lat; + for (ilng = -180; ilng <= 180; ilng++) { + // Test for discontinuities. + if (k > 0) { + if (fabs(*pixlng - ir[k-1]) > step || + fabs(*pixlat - jr[k-1]) > step) { + if (k > 1) cpgline(k, ir, jr); + k = 0; + } + } + + ir[k] = *pixlng; + jr[k] = *pixlat; + k++; + + pixlng += NELEM; + pixlat += NELEM; + } + + cpgline(k, ir, jr); + } + + + // Write a descriptive title. + cpgsci(1); + sprintf(text, "%s projection - 15 degree graticule", wcsprj->code); + printf("\n\n%s\n", text); + fjmin = jmin - 10.0; + cpgtext(fimin, fjmin, text); + + sprintf(text, "centered on celestial coordinates (%6.2f,%6.2f)", + wcscel->ref[0], wcscel->ref[1]); + printf("%s\n", text); + fjmin = jmin - 20.0; + cpgtext(fimin, fjmin, text); + + sprintf(text, "with celestial pole at native coordinates (%7.2f,%7.2f)", + wcscel->ref[2], wcscel->ref[3]); + printf("%s\n", text); + fjmin = jmin - 30.0; + cpgtext(fimin, fjmin, text); + + cpgsci(2); + + + return; +} + +//---------------------------------------------------------------------------- + +void parser(wcs) + +struct wcsprm *wcs; + +{ + int i, j, status; + double *pcij; + + // In practice a parser would read the FITS header until it encountered + // the NAXIS keyword which must occur near the start, before any of the + // WCS keywords. It would then use wcsini() to allocate memory for + // arrays in the wcsprm struct and set default values. In this + // simulation the header keyvalues are set as global variables. + wcsini(1, NAXIS, wcs); + + + // Now the parser scans the FITS header, identifying WCS keywords and + // loading their values into the appropriate elements of the wcsprm + // struct. + + for (j = 0; j < NAXIS; j++) { + wcs->crpix[j] = CRPIX[j]; + } + + pcij = wcs->pc; + for (i = 0; i < NAXIS; i++) { + for (j = 0; j < NAXIS; j++) { + *(pcij++) = PC[i][j]; + } + } + + for (i = 0; i < NAXIS; i++) { + wcs->cdelt[i] = CDELT[i]; + } + + for (i = 0; i < NAXIS; i++) { + strcpy(wcs->ctype[i], &CTYPE[i][0]); + } + + for (i = 0; i < NAXIS; i++) { + wcs->crval[i] = CRVAL[i]; + } + + wcs->lonpole = LONPOLE; + wcs->latpole = LATPOLE; + + wcs->restfrq = RESTFRQ; + wcs->restwav = RESTWAV; + + wcs->npv = NPV; + for (i = 0; i < NPV; i++) { + wcs->pv[i] = PV[i]; + } + + // Extract information from the FITS header. + if ((status = wcsset(wcs))) { + printf("wcsset ERROR%3d\n", status); + } + + return; +} diff --git a/deps/wcslib/C/test/twcssub.c b/deps/wcslib/C/test/twcssub.c new file mode 100644 index 0000000..88400bc --- /dev/null +++ b/deps/wcslib/C/test/twcssub.c @@ -0,0 +1,290 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcssub.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* twcssub tests wcssub() which extracts the coordinate description for a +* subimage from a wcsprm struct. +* +*---------------------------------------------------------------------------*/ + +#include +#include + +#include +#include +#include + + +// In real life these would be encoded as FITS header keyrecords. +const int NAXIS = 4; +const double CRPIX[4] = { 1025.0, 64.0, 1.0, 1.0}; +const double PC[4][4] = {{ 1.1, 0.0, 0.0, 0.0}, + { 0.0, 1.0, 0.0, 0.0}, + { 0.0, 0.0, 1.0, 0.1}, + { 0.0, 0.0, 0.2, 1.0}}; +const double CDELT[4] = {-9.2e-6, 10.0, 1.0, -1.0}; +char CUNIT[4][16] = {"m", "s", "deg", "deg"}; +char CTYPE[4][16] = {"WAVE-F2W", "TIME", "XLAT-TAB", "XLON-TAB"}; + +const double CRVAL[4] = {0.214982042, -2e3, 135.0, 95.0}; + +char CNAME[4][16] = {"Wavelength", "Time", "Latitude", "Longitude"}; + +const int NPS = 6; +const int NPV = 6; + +// Lookup table parameters. +const int M = 2; +const int K1 = 7; +const int K2 = 3; +const int map[] = {3, 2}; +const double crval[] = {CRVAL[2], CRVAL[3]}; + + +int main() + +{ + // Simulate FITS PSi_ma and PVi_ma keywords describing the table. + struct pscard PS[NPS]; + PS[0].i = 3; // Table latitude on axis 3. + PS[0].m = 0; // Parameter number 0. + strcpy(PS[0].value, "WCSTAB"); // PS3_0 (EXTNAME). + + PS[1].i = 3; // Table latitude on axis 3. + PS[1].m = 1; // Parameter number 1. + strcpy(PS[1].value, "COORDS"); // PS3_1 (TTYPEn for coord array). + + PS[2].i = 3; // Table latitude on axis 3. + PS[2].m = 2; // Parameter number 2. + strcpy(PS[2].value, "LATIDX"); // PS3_2 (TTYPEn for index array). + + PS[3].i = 4; // Table latitude on axis 4. + PS[3].m = 0; // Parameter number 0. + strcpy(PS[3].value, "WCSTAB"); // PS4_0 (EXTNAME). + + PS[4].i = 4; // Table latitude on axis 4. + PS[4].m = 1; // Parameter number 1. + strcpy(PS[4].value, "COORDS"); // PS4_1 (TTYPEn for coord array). + + PS[5].i = 4; // Table latitude on axis 4. + PS[5].m = 2; // Parameter number 2. + strcpy(PS[5].value, "LNGIDX"); // PS4_2 (TTYPEn for index array). + + struct pvcard PV[NPV]; + PV[0].i = 3; // Table latitude on axis 3. + PV[0].m = 1; // Parameter number 1. + PV[0].value = 1; // PV3_1 (EXTVER). + + PV[1].i = 3; // Table latitude on axis 3. + PV[1].m = 2; // Parameter number 2. + PV[1].value = 1; // PV3_2 (EXTLEVEL). + + PV[2].i = 3; // Table latitude on axis 3. + PV[2].m = 3; // Parameter number 3. + PV[2].value = 2; // PV3_3 (axis number in array). + + PV[3].i = 4; // Table longitude on axis 4. + PV[3].m = 1; // Parameter number 1. + PV[3].value = 1; // PV4_1 (EXTVER). + + PV[4].i = 4; // Table longitude on axis 4. + PV[4].m = 2; // Parameter number 2. + PV[4].value = 1; // PV4_2 (EXTLEVEL). + + PV[5].i = 4; // Table longitude on axis 4. + PV[5].m = 3; // Parameter number 3. + PV[5].value = 1; // PV4_3 (axis number in array). + + + // Set up the lookup table. + int K[] = {K1, K2}; + struct tabprm tab; + tab.flag = -1; + + int status; + if ((status = tabini(1, M, K, &tab))) { + printf("tabini ERROR %d: %s.\n", status, tab_errmsg[status]); + return 1; + } + + tab.M = M; + for (int m = 0; m < tab.M; m++) { + tab.K[m] = K[m]; + tab.map[m] = map[m]; + tab.crval[m] = crval[m]; + + for (int k = 0; k < tab.K[m]; k++) { + tab.index[m][k] = (double)k; + } + } + + // Set lookup table coordinate array to approximate Bonne's projection. + double x[K1], y[K2]; + for (int i = 0; i < K1; i++) { + x[i] = (double)(1 - i); + } + for (int j = 0; j < K2; j++) { + y[j] = (double)(j - 1); + } + + struct prjprm prj; + prjini(&prj); + prj.pv[1] = 35.0; + + int stat[K2*K1]; + status = bonx2s(&prj, K1, K2, 1, 2, x, y, tab.coord, tab.coord+1, stat); + + + // Set up the wcsprm struct. + struct wcsprm wcs; + wcs.flag = -1; + wcsini(1, NAXIS, &wcs); + + for (int j = 0; j < NAXIS; j++) { + wcs.crpix[j] = CRPIX[j]; + } + + double *pcij = wcs.pc; + for (int i = 0; i < NAXIS; i++) { + for (int j = 0; j < NAXIS; j++) { + *(pcij++) = PC[i][j]; + } + } + + for (int i = 0; i < NAXIS; i++) { + wcs.cdelt[i] = CDELT[i]; + } + + for (int i = 0; i < NAXIS; i++) { + strcpy(wcs.cunit[i], &CUNIT[i][0]); + strcpy(wcs.ctype[i], &CTYPE[i][0]); + strcpy(wcs.cname[i], &CNAME[i][0]); + } + + for (int i = 0; i < NAXIS; i++) { + wcs.crval[i] = CRVAL[i]; + } + + wcs.npv = NPV; + for (int i = 0; i < NPV; i++) { + wcs.pv[i] = PV[i]; + } + + wcs.nps = NPS; + for (int i = 0; i < NPS; i++) { + wcs.ps[i] = PS[i]; + } + + wcs.ntab = 1; + wcs.tab = &tab; + + + // Initialize the wcsprm struct. + wcserr_enable(1); + (void) wcsset(&wcs); + + printf("Testing WCSLIB subimage extraction routine (twcssub.c)\n" + "------------------------------------------------------\n"); + printf("\nInitial contents of wcsprm struct:\n"); + wcsprt(&wcs); + + + // Extract the coordinate description for a subimage and add a new axis. + // Note that the time axis is extracted only once, whereas the prescription + // would have it extracted twice. Consequently, the extracted coordinate + // system should have four axes, not five. + int axes[5], nsub = 5; + struct wcsprm wcsext; + wcsext.flag = -1; + axes[0] = WCSSUB_LONGITUDE; + axes[1] = WCSSUB_LATITUDE; + axes[2] = WCSSUB_TIME; + axes[3] = -(WCSSUB_SPECTRAL | WCSSUB_STOKES); + axes[4] = 0; + printf("\n------------------------------------" + "------------------------------------\n" + "Extracted contents of wcsprm struct:\n"); + if (wcssub(1, &wcs, &nsub, axes, &wcsext)) { + wcsperr(&wcsext, ""); + } else if (nsub == 0) { + printf("None of the requested subimage axes were found.\n"); + } else if (wcsset(&wcsext)) { + wcsperr(&wcsext, ""); + } else { + wcsprt(&wcsext); + } + + wcsfree(&wcsext); + + + // Now test invalid subimaging requests. + printf("\n\nTesting invalid subimaging requests; ignore status 13 messages " + "below.\n"); + + // Reset the PCi_j matrix to unity. + pcij = wcs.pc; + for (int i = 0; i < NAXIS; i++) { + for (int j = 0; j < NAXIS; j++) { + *(pcij++) = (i == j) ? 1.0 : 0.0; + } + } + + // Set it up for failure by extracting only one axis from a 2-D table. + nsub = 2; + axes[0] = WCSSUB_LONGITUDE; + axes[1] = WCSSUB_SPECTRAL; + status = wcssub(1, &wcs, &nsub, axes, &wcsext); + if (status == WCSERR_NON_SEPARABLE) { + printf("\nReceived wcssub status %d as expected for a non-separable " + "subimage\ncoordinate system. The error message was\n", + WCSERR_NON_SEPARABLE); + wcsperr(&wcsext, " "); + } else { + printf("\n\nERROR: expected wcssub status %d for a non-separable " + "subimage coordinate\nsystem, but received status %d instead.\n", + WCSERR_NON_SEPARABLE, status); + } + + wcsfree(&wcsext); + + // As above, but with PC1_3 non-zero. + *(wcs.pc+2) = 1.0; + status = wcssub(1, &wcs, &nsub, axes, &wcsext); + if (status == WCSERR_NON_SEPARABLE) { + printf("\nReceived wcssub status %d as expected for a non-separable " + "subimage\ncoordinate system. The error message was\n", + WCSERR_NON_SEPARABLE); + wcsperr(&wcsext, " "); + } else { + printf("\n\nERROR: expected wcssub status %d for a non-separable " + "subimage coordinate\nsystem, but received status %d instead.\n", + WCSERR_NON_SEPARABLE, status); + } + + wcsfree(&wcsext); + + tabfree(&tab); + wcsfree(&wcs); + + return 0; +} diff --git a/deps/wcslib/C/test/twcssub.out b/deps/wcslib/C/test/twcssub.out new file mode 100644 index 0000000..22a081d --- /dev/null +++ b/deps/wcslib/C/test/twcssub.out @@ -0,0 +1,620 @@ +Testing WCSLIB subimage extraction routine (twcssub.c) +------------------------------------------------------ + +Initial contents of wcsprm struct: + flag: 137 + naxis: 4 + crpix: 0x
+ 1025.0 64.000 1.0000 1.0000 + pc: 0x
+ pc[0][]: 1.1000 0.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.10000 + pc[3][]: 0.0000 0.0000 0.20000 1.0000 + cdelt: 0x
+ -9.2000e-06 10.000 1.0000 -1.0000 + crval: 0x
+ 0.21498 -2000.0 135.00 95.000 + cunit: 0x
+ "m" + "s" + "deg" + "deg" + ctype: 0x
+ "WAVE-F2W" + "TIME" + "XLAT-TAB" + "XLON-TAB" + lonpole: UNDEFINED + latpole: 90.000000 + restfrq: 0.000000 + restwav: 0.000000 + npv: 6 + npvmax: 64 + pv: 0x
+ 3 1 1.0000 + 3 2 1.0000 + 3 3 2.0000 + 4 1 1.0000 + 4 2 1.0000 + 4 3 1.0000 + nps: 6 + npsmax: 8 + ps: 0x
+ 3 0 WCSTAB + 3 1 COORDS + 3 2 LATIDX + 4 0 WCSTAB + 4 1 COORDS + 4 2 LNGIDX + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 0 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Wavelength" + "Time" + "Latitude" + "Longitude" + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: UNDEFINED + equinox: UNDEFINED + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 1 + tab: 0x
(see below) + nwtb: 0 + wtb: 0x0 + lngtyp: "XLON" + lattyp: "XLAT" + lng: 3 + lat: 2 + spec: 0 + time: 1 + cubeface: -1 + chksum: + types: 0x
+ 3300 4000 2501 2500 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 + m_wtb: 0x0 (= wtb) + +tab[0].* + flag: 137 + M: 2 + K: 0x
+ 7 3 + map: 0x
+ 3 2 + crval: 0x
+ 135.00 95.000 + index: 0x
+ index[0]: 0x
+ 0.0000 1.0000 2.0000 3.0000 4.0000 + 5.0000 6.0000 + index[1]: 0x
+ 0.0000 1.0000 2.0000 + coord: 0x
+ (*,1,1) 1.0002 -1.0042 + (*,2,1) 0.0000 -1.0000 + (*,3,1) -1.0002 -1.0042 + (*,4,1) -2.0004 -1.0170 + (*,5,1) -3.0008 -1.0382 + (*,6,1) -4.0015 -1.0679 + (*,7,1) -5.0024 -1.1060 + (*,1,2) 1.0000 -0.0042798 + (*,2,2) 0.0000 0.0000 + (*,3,2) -1.0000 -0.0042798 + (*,4,2) -2.0001 -0.017118 + (*,5,2) -3.0003 -0.038512 + (*,6,2) -4.0008 -0.068457 + (*,7,2) -5.0015 -0.10695 + (*,1,3) 1.0002 0.99568 + (*,2,3) 0.0000 1.0000 + (*,3,3) -1.0002 0.99568 + (*,4,3) -2.0004 0.98273 + (*,5,3) -3.0008 0.96116 + (*,6,3) -4.0013 0.93095 + (*,7,3) -5.0022 0.89213 + nc: 21 + sense: 0x
+ 1 1 + p0: 0x
+ 0 0 + delta: 0x
+ 0.0000 0.0000 + extrema: 0x
+ (*,*,1) -5.5029 -1.1251 -> 1.5002 -1.0000 + (*,*,2) -5.5019 -0.12619 -> 1.5000 0.0000 + (*,*,3) -5.5026 0.87272 -> 1.5002 1.0000 + err: 0x0 + m_flag: 137 + m_M: 2 + m_N: 42 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_indxs[1]: 0x
(= index[1]) + m_coord: 0x
(= coord) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 1025.0 64.000 1.0000 1.0000 + pc: 0x
+ pc[0][]: 1.1000 0.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.10000 + pc[3][]: 0.0000 0.0000 0.20000 1.0000 + cdelt: 0x
+ -9.2000e-06 10.000 1.0000 -1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -1.0120e-05 -0.0000 -0.0000 -0.0000 +piximg[1][]: 0.0000 10.000 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 1.0000 0.10000 +piximg[3][]: -0.0000 -0.0000 -0.20000 -1.0000 +imgpix[0][]: -98814. -0.0000 -0.0000 -0.0000 +imgpix[1][]: 0.0000 0.10000 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.0204 0.10204 +imgpix[3][]: -0.0000 -0.0000 -0.20408 -1.0204 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 0 + offset: 0 + phi0: UNDEFINED + theta0: UNDEFINED + ref: 0.0000 0.0000 9.8765e+107 90.000 + prj: (see below) + euler: 0.0000 0.0000 0.0000 0.0000 0.0000 + latpreq: -1 (UNDEFINED) + isolat: 0 + err: 0x0 + + prj.* + flag: 0 + code: " " + r0: 0.000000 + pv: (not used) + phi0: UNDEFINED + theta0: UNDEFINED + bounds: 7 + + name: "undefined" + category: 0 (undefined) + pvrange: 0 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x0 + prjs2x: 0x0 + + spc.* + flag: 110 + type: "WAVE" + code: "F2W" + crval: 0.21498 + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 1.3945e+09 -6.4866e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x
+ +------------------------------------------------------------------------ +Extracted contents of wcsprm struct: + flag: 137 + naxis: 4 + crpix: 0x
+ 1.0000 1.0000 64.000 0.0000 + pc: 0x
+ pc[0][]: 1.0000 0.20000 0.0000 0.0000 + pc[1][]: 0.10000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -1.0000 1.0000 10.000 1.0000 + crval: 0x
+ 95.000 135.00 -2000.0 0.0000 + cunit: 0x
+ "deg" + "deg" + "s" + "" + ctype: 0x
+ "XLON-TAB" + "XLAT-TAB" + "TIME" + "" + lonpole: UNDEFINED + latpole: 90.000000 + restfrq: 0.000000 + restwav: 0.000000 + npv: 6 + npvmax: 6 + pv: 0x
+ 2 1 1.0000 + 2 2 1.0000 + 2 3 2.0000 + 1 1 1.0000 + 1 2 1.0000 + 1 3 1.0000 + nps: 6 + npsmax: 6 + ps: 0x
+ 2 0 WCSTAB + 2 1 COORDS + 2 2 LATIDX + 1 0 WCSTAB + 1 1 COORDS + 1 2 LNGIDX + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 0 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Longitude" + "Latitude" + "Time" + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: UNDEFINED + equinox: UNDEFINED + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 1 + tab: 0x
(see below) + nwtb: 0 + wtb: 0x0 + lngtyp: "XLON" + lattyp: "XLAT" + lng: 0 + lat: 1 + spec: -1 + time: 2 + cubeface: -1 + chksum: + types: 0x
+ 2500 2501 4000 0 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x
(= tab) + m_wtb: 0x0 (= wtb) + +tab[0].* + flag: 137 + M: 2 + K: 0x
+ 7 3 + map: 0x
+ 0 1 + crval: 0x
+ 135.00 95.000 + index: 0x
+ index[0]: 0x
+ 0.0000 1.0000 2.0000 3.0000 4.0000 + 5.0000 6.0000 + index[1]: 0x
+ 0.0000 1.0000 2.0000 + coord: 0x
+ (*,1,1) 1.0002 -1.0042 + (*,2,1) 0.0000 -1.0000 + (*,3,1) -1.0002 -1.0042 + (*,4,1) -2.0004 -1.0170 + (*,5,1) -3.0008 -1.0382 + (*,6,1) -4.0015 -1.0679 + (*,7,1) -5.0024 -1.1060 + (*,1,2) 1.0000 -0.0042798 + (*,2,2) 0.0000 0.0000 + (*,3,2) -1.0000 -0.0042798 + (*,4,2) -2.0001 -0.017118 + (*,5,2) -3.0003 -0.038512 + (*,6,2) -4.0008 -0.068457 + (*,7,2) -5.0015 -0.10695 + (*,1,3) 1.0002 0.99568 + (*,2,3) 0.0000 1.0000 + (*,3,3) -1.0002 0.99568 + (*,4,3) -2.0004 0.98273 + (*,5,3) -3.0008 0.96116 + (*,6,3) -4.0013 0.93095 + (*,7,3) -5.0022 0.89213 + nc: 21 + sense: 0x
+ 1 1 + p0: 0x
+ 0 0 + delta: 0x
+ 0.0000 0.0000 + extrema: 0x
+ (*,*,1) -5.5029 -1.1251 -> 1.5002 -1.0000 + (*,*,2) -5.5019 -0.12619 -> 1.5000 0.0000 + (*,*,3) -5.5026 0.87272 -> 1.5002 1.0000 + err: 0x0 + m_flag: 137 + m_M: 2 + m_N: 42 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_indxs[1]: 0x
(= index[1]) + m_coord: 0x
(= coord) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 1.0000 1.0000 64.000 0.0000 + pc: 0x
+ pc[0][]: 1.0000 0.20000 0.0000 0.0000 + pc[1][]: 0.10000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -1.0000 1.0000 10.000 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -1.0000 -0.20000 -0.0000 -0.0000 +piximg[1][]: 0.10000 1.0000 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 10.000 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -1.0204 -0.20408 -0.0000 -0.0000 +imgpix[1][]: 0.10204 1.0204 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 0.10000 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 0 + offset: 0 + phi0: UNDEFINED + theta0: UNDEFINED + ref: 0.0000 0.0000 9.8765e+107 90.000 + prj: (see below) + euler: 0.0000 0.0000 0.0000 0.0000 0.0000 + latpreq: -1 (UNDEFINED) + isolat: 0 + err: 0x0 + + prj.* + flag: 0 + code: " " + r0: 0.000000 + pv: (not used) + phi0: UNDEFINED + theta0: UNDEFINED + bounds: 7 + + name: "undefined" + category: 0 (undefined) + pvrange: 0 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x0 + prjs2x: 0x0 + + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + + +Testing invalid subimaging requests; ignore status 13 messages below. + +Received wcssub status 13 as expected for a non-separable subimage +coordinate system. The error message was + ERROR 13 in wcssub() at line 1338 of file wcs.c: + Table with M>1 depends on axis excluded from the subimage. + +Received wcssub status 13 as expected for a non-separable subimage +coordinate system. The error message was + ERROR 13 in wcssub() at line 955 of file wcs.c: + Non-zero off-diagonal matrix elements excluded from the subimage. diff --git a/deps/wcslib/C/test/twcstab.c b/deps/wcslib/C/test/twcstab.c new file mode 100644 index 0000000..064f2c9 --- /dev/null +++ b/deps/wcslib/C/test/twcstab.c @@ -0,0 +1,388 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: twcstab.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* twcstab tests wcstab() and also provides sample code for using it in +* conjunction with wcspih() and fits_read_wcstab(). Although this example +* and fits_read_wcstab() are based on the CFITSIO library, wcstab() itself +* is completely independent of it. +* +* The input FITS file is constructed by create_input() from a list of header +* keyrecords in wcstab.keyrec together with some hard-coded parameters. The +* output fits file, wcstab.fits, is left for inspection. +* +*===========================================================================*/ + +#include +#include +#include + +#include + +#include +#include + +int create_input(); +int do_wcs_stuff(fitsfile *fptr, struct wcsprm *wcs); +double lcprng(); + +int main() + +{ + char *header; + int i, nkeyrec, nreject, nwcs, stat[NWCSFIX], status = 0; + fitsfile *fptr; + struct wcsprm *wcs; + + + // Set line buffering in case stdout is redirected to a file, otherwise + // stdout and stderr messages will be jumbled (stderr is unbuffered). + setvbuf(stdout, NULL, _IOLBF, 0); + + printf("Testing -TAB interpreter (twcstab.c)\n" + "------------------------------------\n\n"); + + // Create the input FITS test file. + if (create_input()) { + fprintf(stderr, "Failed to create FITS test file."); + return 1; + } + + // Open the FITS test file and read the primary header. + fits_open_file(&fptr, "wcstab.fits", READONLY, &status); + if ((status = fits_hdr2str(fptr, 1, NULL, 0, &header, &nkeyrec, + &status))) { + fits_report_error(stderr, status); + return 1; + } + + + //------------------------------------------------------------------------- + // Basic steps required to interpret a FITS WCS header, including -TAB. + //------------------------------------------------------------------------- + + // Parse the primary header of the FITS file. + if ((status = wcspih(header, nkeyrec, WCSHDR_all, 2, &nreject, &nwcs, + &wcs))) { + fprintf(stderr, "wcspih ERROR %d: %s.\n", status,wcshdr_errmsg[status]); + } + + // Read coordinate arrays from the binary table extension. + if ((status = fits_read_wcstab(fptr, wcs->nwtb, (wtbarr *)wcs->wtb, + &status))) { + fits_report_error(stderr, status); + return 1; + } + + // Translate non-standard WCS keyvalues. + if ((status = wcsfix(7, 0, wcs, stat))) { + for (i = 0; i < NWCSFIX; i++) { + if (stat[i] > 0) { + fprintf(stderr, "wcsfix ERROR %d: %s.\n", status, + wcsfix_errmsg[stat[i]]); + } + } + + return 1; + } + + //------------------------------------------------------------------------- + // The wcsprm struct is now ready for use. + //------------------------------------------------------------------------- + + // Do something with it. + do_wcs_stuff(fptr, wcs); + + // Finished with the FITS file. + fits_close_file(fptr, &status); + fits_free_memory(header, &status); + + // Clean up. + status = wcsvfree(&nwcs, &wcs); + + return 0; +} + +//---------------------------------------------------------------------------- + +// The celestial plane is 256 x 128 with the table indexed at every fourth +// pixel on each axis, but the image is rotated by 5 deg so the table needs +// to be a bit wider than 65 x 33. + +#define K1 70L +#define K2 40L + +int create_input() + +{ + const double TWOPI = 2.0 * 3.14159265358979323846; + + // These must match wcstab.keyrec. + const char infile[] = "test/wcstab.keyrec"; + const long NAXIS1 = 256; + const long NAXIS2 = 128; + const long NAXIS3 = 4; + const char *ttype1[3] = {"CelCoords", "RAIndex", "DecIndex"}; + const char *tform1[3] = {"5600E", "70E", "40E"}; + const char *tunit1[3] = {"deg", "", ""}; + const char *ttype2[4] = {"WaveIndex", "WaveCoord", + "TimeIndex", "TimeCoord"}; + const char *tform2[4] = {"8E", "8D", "8E", "8D"}; + const char *tunit2[4] = {"", "m", "", "a"}; + + // The remaining parameters may be chosen at will. + float refval[] = {150.0f, -30.0f}; + float span[] = {5.0f, (5.0f*K2)/K1}; + float sigma[] = {0.10f, 0.05f}; + double wcoord[] = {0.21106114, 0.21076437, 2.0e-6, 2.2e-6, + 500.0e-9, 650.0e-9, 1.24e-9, 2.48e-9}; + double windex[] = {0.5, 1.5, 1.5, 2.5, 2.5, 3.5, 3.5, 4.5}; + double tcoord[] = {1997.84512, 1997.84631, 1993.28451, 1993.28456, + 2001.59234, 2001.59239, 2002.18265, 2002.18301}; + double tindex[] = {0.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0}; + + char keyrec[84]; + int status; + size_t iz; + long dummy, firstelem, k1, k2, p1, p2, p3; + float array[2*K1*K2], *fp, image[256]; + double s, t, x1, x2, z, z1, z2; + FILE *stream; + fitsfile *fptr; + + // Look for the input header keyrecords. + if ((stream = fopen(infile+5, "r")) == 0x0) { + if ((stream = fopen(infile, "r")) == 0x0) { + printf("ERROR opening %s\n", infile); + return 1; + } + } + + // Create the FITS output file, deleting any pre-existing file. + status = 0; + fits_create_file(&fptr, "!wcstab.fits", &status); + + // Convert header keyrecords to FITS. + while (fgets(keyrec, 82, stream) != NULL) { + // Ignore meta-comments (copyright information, etc.). + if (keyrec[0] == '#') continue; + + // Strip off the newline. + iz = strlen(keyrec) - 1; + if (keyrec[iz] == '\n') keyrec[iz] = '\0'; + + fits_write_record(fptr, keyrec, &status); + } + fclose(stream); + + // Create and write some phoney image data. + firstelem = 1; + for (p3 = 0; p3 < NAXIS3; p3++) { + for (p2 = 0; p2 < NAXIS2; p2++) { + fp = image; + s = (p3 + 1) * cos(0.2 * p2); + t = cos(0.8*p2); + for (p1 = 0; p1 < NAXIS1; p1++) { + // Do not adjust your set! + *(fp++) = sin(0.1*(p1+p2) + s) * cos(0.4*p1) * t; + } + + fits_write_img_flt(fptr, 0L, firstelem, NAXIS1, image, &status); + firstelem += NAXIS1; + } + } + + + // Add the first binary table extension. + fits_create_tbl(fptr, BINARY_TBL, 1L, 3L, (char **)ttype1, (char **)tform1, + (char **)tunit1, NULL, &status); + + // Write EXTNAME and EXTVER near the top, after TFIELDS. + fits_read_key_lng(fptr, "TFIELDS", &dummy, NULL, &status); + fits_insert_key_str(fptr, "EXTNAME", "WCS-TABLE", + "WCS Coordinate lookup table", &status); + fits_insert_key_lng(fptr, "EXTVER", 1L, "Table number 1", &status); + + // Write the TDIM1 keyrecord after TFORM1. + fits_read_key_str(fptr, "TFORM1", keyrec, NULL, &status); + sprintf(keyrec, "(2,%ld,%ld)", K1, K2); + fits_insert_key_str(fptr, "TDIM1", keyrec, "Dimensions of 3-D array", + &status); + + // Plate carrée projection with a bit of noise for the sake of realism. + fp = array; + for (k2 = 0; k2 < K2; k2++) { + for (k1 = 0; k1 < K1; k1++) { + // Box-Muller transformation: uniform -> normal distribution. + x1 = lcprng(); + x2 = lcprng(); + if (x1 == 0.0) x1 = 1.0; + z = sqrt(-2.0 * log(x1)); + x2 *= TWOPI; + z1 = z * cos(x2); + z2 = z * sin(x2); + + *(fp++) = refval[0] + span[0] * (k1/(K1-1.0) - 0.5) + z1 * sigma[0]; + *(fp++) = refval[1] + span[1] * (k2/(K2-1.0) - 0.5) + z2 * sigma[1]; + } + } + fits_write_col_flt(fptr, 1, 1L, 1L, 2*K1*K2, array, &status); + + fp = array; + for (k1 = 0; k1 < K1; k1++) { + *(fp++) = 4.0f * k1; + } + fits_write_col_flt(fptr, 2, 1L, 1L, K1, array, &status); + + fp = array; + for (k2 = 0; k2 < K2; k2++) { + *(fp++) = 4.0f * k2; + } + fits_write_col_flt(fptr, 3, 1L, 1L, K2, array, &status); + + + // Add the second binary table extension. + if (fits_create_tbl(fptr, BINARY_TBL, 1L, 4L, (char **)ttype2, + (char **)tform2, (char **)tunit2, NULL, &status)) { + fits_report_error(stderr, status); + return 1; + } + + // Write EXTNAME and EXTVER near the top, after TFIELDS. + fits_read_key_lng(fptr, "TFIELDS", &dummy, NULL, &status); + fits_insert_key_str(fptr, "EXTNAME", "WCS-TABLE", + "WCS Coordinate lookup table", &status); + fits_insert_key_lng(fptr, "EXTVER", 2L, "Table number 2", &status); + + // Write the TDIM2 keyrecord after TFORM2. + fits_read_key_str(fptr, "TFORM2", keyrec, NULL, &status); + fits_insert_key_str(fptr, "TDIM2", "(1,8)", "Dimensions of 2-D array", + &status); + + // Write the TDIM4 keyrecord after TFORM4. + fits_read_key_str(fptr, "TFORM4", keyrec, NULL, &status); + fits_insert_key_str(fptr, "TDIM4", "(1,8)", "Dimensions of 2-D array", + &status); + + + fits_write_col_dbl(fptr, 1, 1L, 1L, 8L, windex, &status); + fits_write_col_dbl(fptr, 2, 1L, 1L, 8L, wcoord, &status); + fits_write_col_dbl(fptr, 3, 1L, 1L, 8L, tindex, &status); + fits_write_col_dbl(fptr, 4, 1L, 1L, 8L, tcoord, &status); + + fits_close_file(fptr, &status); + + if (status) { + fits_report_error(stderr, status); + return 1; + } + + return 0; +} + +/*---------------------------------------------------------------------------- +* A simple linear congruential pseudo-random number generator that produces +* the same results on all systems so that the test output can be compared. +* It produces a fixed sequence of uniformly distributed numbers in [0,1]. +* Adapted from the example in Numerical Recipes in C. +*---------------------------------------------------------------------------*/ + +double lcprng() +{ + static unsigned long next = 137UL; + + next = next * 1664525UL + 1013904223UL; + return (double)(next % 1073741824UL) / 1073741823.0; +} + +//---------------------------------------------------------------------------- + +int do_wcs_stuff(fitsfile *fptr, struct wcsprm *wcs) + +{ + int i1, i2, i3, k, naxis1, naxis2, naxis3, stat[8], status; + double phi[8], pixcrd[8][4], imgcrd[8][4], theta[8], world[8][4], + x1, x2, x3; + + // Initialize the wcsprm struct, also taking control of memory allocated by + // fits_read_wcstab(). + if ((status = wcsset(wcs))) { + fprintf(stderr, "wcsset ERROR %d: %s.\n", status, wcs_errmsg[status]); + return 1; + } + + // Print the struct. + if ((status = wcsprt(wcs))) return status; + + // Compute coordinates in the corners. + fits_read_key(fptr, TINT, "NAXIS1", &naxis1, NULL, &status); + fits_read_key(fptr, TINT, "NAXIS2", &naxis2, NULL, &status); + fits_read_key(fptr, TINT, "NAXIS3", &naxis3, NULL, &status); + + k = 0; + x3 = 1.0f; + for (i3 = 0; i3 < 2; i3++) { + x2 = 0.5f; + + for (i2 = 0; i2 < 2; i2++) { + x1 = 0.5f; + + for (i1 = 0; i1 < 2; i1++) { + pixcrd[k][0] = x1; + pixcrd[k][1] = x2; + pixcrd[k][2] = x3; + pixcrd[k][3] = 1.0f; + + k++; + x1 = naxis1 + 0.5f; + } + + x2 = naxis2 + 0.5f; + } + + x3 = naxis3; + } + + if ((status = wcsp2s(wcs, 8, 4, pixcrd[0], imgcrd[0], phi, theta, world[0], + stat))) { + fprintf(stderr, "\n\nwcsp2s ERROR %d: %s.\n", status, + wcs_errmsg[status]); + + // Invalid pixel coordinates. + if (status == 8) status = 0; + } + + if (status == 0) { + printf("\n\nCorner world coordinates:\n" + " Pixel World\n"); + for (k = 0; k < 8; k++) { + printf(" (%5.1f,%6.1f,%4.1f,%4.1f) -> (%7.3f,%8.3f,%9g,%11.5f)", + pixcrd[k][0], pixcrd[k][1], pixcrd[k][2], pixcrd[k][3], + world[k][0], world[k][1], world[k][2], world[k][3]); + if (stat[k]) printf(" (BAD)"); + printf("\n"); + } + } + + return 0; +} diff --git a/deps/wcslib/C/test/twcstab.out b/deps/wcslib/C/test/twcstab.out new file mode 100644 index 0000000..6e916da --- /dev/null +++ b/deps/wcslib/C/test/twcstab.out @@ -0,0 +1,3337 @@ +Testing -TAB interpreter (twcstab.c) +------------------------------------ + + flag: 137 + naxis: 4 + crpix: 0x
+ 129.00 65.000 0.50000 1.0000 + pc: 0x
+ pc[0][]: 0.99619 0.087156 0.0000 0.0000 + pc[1][]: -0.087156 0.99619 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 1.0000 1.0000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + crval: 0x
+ 136.00 76.000 0.50000 0.0000 + cunit: 0x
+ "deg" + "deg" + "m" + "a" + ctype: 0x
+ "RA---TAB" + "DEC--TAB" + "WAVE-TAB" + "TIME-TAB" + lonpole: UNDEFINED + latpole: 90.000000 + restfrq: 0.000000 + restwav: 0.000000 + npv: 12 + npvmax: 12 + pv: 0x
+ 1 1 1.0000 + 1 2 1.0000 + 1 3 1.0000 + 2 1 1.0000 + 2 2 1.0000 + 2 3 2.0000 + 3 1 2.0000 + 3 2 1.0000 + 3 3 1.0000 + 4 1 2.0000 + 4 2 1.0000 + 4 3 1.0000 + nps: 12 + npsmax: 12 + ps: 0x
+ 1 0 WCS-TABLE + 1 1 CelCoords + 1 2 RAIndex + 2 0 WCS-TABLE + 2 1 CelCoords + 2 2 DecIndex + 3 0 WCS-TABLE + 3 1 WaveCoord + 3 2 WaveIndex + 4 0 WCS-TABLE + 4 1 TimeCoord + 4 2 TimeIndex + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 1 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Wavelength" + "Observation date" + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "-TAB test file" + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: "FK5" + equinox: 2000.000000000 + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 3 + tab: 0x
(see below) + nwtb: 7 + wtb: 0x
(see below) + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: 3 + cubeface: -1 + chksum: + types: 0x
+ 2500 2501 3510 4520 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x
(= tab) + m_wtb: 0x
(= wtb) + +wtb[0].* + i: 1 + m: 1 + kind: c + extnam: WCS-TABLE + extver: 1 + extlev: 1 + ttype: CelCoords + row: 1 + ndim: 3 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[1].* + i: 1 + m: 1 + kind: i + extnam: WCS-TABLE + extver: 1 + extlev: 1 + ttype: RAIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[2].* + i: 2 + m: 2 + kind: i + extnam: WCS-TABLE + extver: 1 + extlev: 1 + ttype: DecIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[3].* + i: 3 + m: 1 + kind: c + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: WaveCoord + row: 1 + ndim: 2 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[4].* + i: 3 + m: 1 + kind: i + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: WaveIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[5].* + i: 4 + m: 1 + kind: c + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: TimeCoord + row: 1 + ndim: 2 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[6].* + i: 4 + m: 1 + kind: i + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: TimeIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +tab[0].* + flag: 137 + M: 2 + K: 0x
+ 70 40 + map: 0x
+ 0 1 + crval: 0x
+ 136.00 76.000 + index: 0x
+ index[0]: 0x
+ 0.0000 4.0000 8.0000 12.000 16.000 + 20.000 24.000 28.000 32.000 36.000 + 40.000 44.000 48.000 52.000 56.000 + 60.000 64.000 68.000 72.000 76.000 + 80.000 84.000 88.000 92.000 96.000 + 100.00 104.00 108.00 112.00 116.00 + 120.00 124.00 128.00 132.00 136.00 + 140.00 144.00 148.00 152.00 156.00 + 160.00 164.00 168.00 172.00 176.00 + 180.00 184.00 188.00 192.00 196.00 + 200.00 204.00 208.00 212.00 216.00 + 220.00 224.00 228.00 232.00 236.00 + 240.00 244.00 248.00 252.00 256.00 + 260.00 264.00 268.00 272.00 276.00 + index[1]: 0x
+ 0.0000 4.0000 8.0000 12.000 16.000 + 20.000 24.000 28.000 32.000 36.000 + 40.000 44.000 48.000 52.000 56.000 + 60.000 64.000 68.000 72.000 76.000 + 80.000 84.000 88.000 92.000 96.000 + 100.00 104.00 108.00 112.00 116.00 + 120.00 124.00 128.00 132.00 136.00 + 140.00 144.00 148.00 152.00 156.00 + coord: 0x
+ (*, 1, 1) 147.58 -31.516 + (*, 2, 1) 147.69 -31.445 + (*, 3, 1) 147.65 -31.392 + (*, 4, 1) 147.64 -31.462 + (*, 5, 1) 147.81 -31.459 + (*, 6, 1) 147.87 -31.398 + (*, 7, 1) 147.98 -31.402 + (*, 8, 1) 147.81 -31.416 + (*, 9, 1) 148.01 -31.446 + (*,10, 1) 147.97 -31.449 + (*,11, 1) 148.17 -31.447 + (*,12, 1) 148.29 -31.405 + (*,13, 1) 148.43 -31.367 + (*,14, 1) 148.49 -31.495 + (*,15, 1) 148.56 -31.473 + (*,16, 1) 148.70 -31.389 + (*,17, 1) 148.71 -31.493 + (*,18, 1) 148.77 -31.394 + (*,19, 1) 148.84 -31.405 + (*,20, 1) 148.72 -31.455 + (*,21, 1) 149.04 -31.488 + (*,22, 1) 149.00 -31.299 + (*,23, 1) 149.17 -31.359 + (*,24, 1) 149.15 -31.411 + (*,25, 1) 149.34 -31.386 + (*,26, 1) 149.33 -31.444 + (*,27, 1) 149.50 -31.366 + (*,28, 1) 149.47 -31.481 + (*,29, 1) 149.50 -31.379 + (*,30, 1) 149.50 -31.424 + (*,31, 1) 149.51 -31.462 + (*,32, 1) 149.88 -31.451 + (*,33, 1) 149.85 -31.462 + (*,34, 1) 149.99 -31.479 + (*,35, 1) 150.01 -31.401 + (*,36, 1) 150.04 -31.455 + (*,37, 1) 150.15 -31.497 + (*,38, 1) 150.34 -31.482 + (*,39, 1) 150.29 -31.463 + (*,40, 1) 150.29 -31.418 + (*,41, 1) 150.35 -31.328 + (*,42, 1) 150.41 -31.390 + (*,43, 1) 150.53 -31.388 + (*,44, 1) 150.72 -31.395 + (*,45, 1) 150.76 -31.519 + (*,46, 1) 150.75 -31.475 + (*,47, 1) 150.72 -31.413 + (*,48, 1) 150.95 -31.434 + (*,49, 1) 151.12 -31.371 + (*,50, 1) 151.06 -31.373 + (*,51, 1) 150.96 -31.437 + (*,52, 1) 151.17 -31.366 + (*,53, 1) 151.38 -31.350 + (*,54, 1) 151.36 -31.396 + (*,55, 1) 151.52 -31.454 + (*,56, 1) 151.54 -31.438 + (*,57, 1) 151.53 -31.417 + (*,58, 1) 151.55 -31.454 + (*,59, 1) 151.77 -31.462 + (*,60, 1) 151.87 -31.401 + (*,61, 1) 151.83 -31.365 + (*,62, 1) 151.98 -31.475 + (*,63, 1) 152.08 -31.468 + (*,64, 1) 152.14 -31.410 + (*,65, 1) 152.19 -31.430 + (*,66, 1) 152.40 -31.460 + (*,67, 1) 152.23 -31.494 + (*,68, 1) 152.34 -31.461 + (*,69, 1) 152.26 -31.432 + (*,70, 1) 152.49 -31.509 + (*, 1, 2) 147.34 -31.303 + (*, 2, 2) 147.48 -31.423 + (*, 3, 2) 147.68 -31.442 + (*, 4, 2) 147.58 -31.353 + (*, 5, 2) 147.85 -31.388 + (*, 6, 2) 147.95 -31.317 + (*, 7, 2) 147.87 -31.262 + (*, 8, 2) 147.98 -31.483 + (*, 9, 2) 148.06 -31.292 + (*,10, 2) 148.23 -31.437 + (*,11, 2) 148.33 -31.416 + (*,12, 2) 148.28 -31.337 + (*,13, 2) 148.46 -31.316 + (*,14, 2) 148.47 -31.307 + (*,15, 2) 148.38 -31.360 + (*,16, 2) 148.57 -31.387 + (*,17, 2) 148.67 -31.311 + (*,18, 2) 148.79 -31.407 + (*,19, 2) 148.87 -31.392 + (*,20, 2) 148.86 -31.367 + (*,21, 2) 148.96 -31.332 + (*,22, 2) 149.05 -31.339 + (*,23, 2) 148.95 -31.399 + (*,24, 2) 149.21 -31.388 + (*,25, 2) 149.26 -31.340 + (*,26, 2) 149.29 -31.305 + (*,27, 2) 149.47 -31.289 + (*,28, 2) 149.53 -31.302 + (*,29, 2) 149.48 -31.278 + (*,30, 2) 149.45 -31.352 + (*,31, 2) 149.71 -31.372 + (*,32, 2) 149.82 -31.414 + (*,33, 2) 149.68 -31.310 + (*,34, 2) 149.84 -31.323 + (*,35, 2) 150.11 -31.284 + (*,36, 2) 150.12 -31.295 + (*,37, 2) 150.21 -31.355 + (*,38, 2) 150.04 -31.432 + (*,39, 2) 150.40 -31.449 + (*,40, 2) 150.44 -31.230 + (*,41, 2) 150.44 -31.349 + (*,42, 2) 150.49 -31.350 + (*,43, 2) 150.54 -31.353 + (*,44, 2) 150.84 -31.460 + (*,45, 2) 150.73 -31.394 + (*,46, 2) 150.87 -31.427 + (*,47, 2) 150.67 -31.278 + (*,48, 2) 150.85 -31.339 + (*,49, 2) 151.08 -31.337 + (*,50, 2) 151.02 -31.377 + (*,51, 2) 151.34 -31.281 + (*,52, 2) 151.16 -31.432 + (*,53, 2) 151.22 -31.295 + (*,54, 2) 151.28 -31.426 + (*,55, 2) 151.57 -31.397 + (*,56, 2) 151.39 -31.268 + (*,57, 2) 151.47 -31.389 + (*,58, 2) 151.47 -31.352 + (*,59, 2) 151.74 -31.336 + (*,60, 2) 151.72 -31.348 + (*,61, 2) 151.74 -31.249 + (*,62, 2) 152.01 -31.298 + (*,63, 2) 152.03 -31.383 + (*,64, 2) 152.05 -31.318 + (*,65, 2) 152.07 -31.288 + (*,66, 2) 152.19 -31.388 + (*,67, 2) 152.26 -31.343 + (*,68, 2) 152.23 -31.384 + (*,69, 2) 152.37 -31.289 + (*,70, 2) 152.61 -31.380 + (*, 1, 3) 147.44 -31.323 + (*, 2, 3) 147.38 -31.229 + (*, 3, 3) 147.51 -31.286 + (*, 4, 3) 147.76 -31.179 + (*, 5, 3) 147.88 -31.280 + (*, 6, 3) 147.82 -31.271 + (*, 7, 3) 147.92 -31.283 + (*, 8, 3) 148.01 -31.330 + (*, 9, 3) 148.15 -31.176 + (*,10, 3) 148.23 -31.316 + (*,11, 3) 148.18 -31.270 + (*,12, 3) 148.51 -31.241 + (*,13, 3) 148.33 -31.312 + (*,14, 3) 148.43 -31.283 + (*,15, 3) 148.51 -31.236 + (*,16, 3) 148.47 -31.302 + (*,17, 3) 148.77 -31.291 + (*,18, 3) 148.78 -31.251 + (*,19, 3) 148.66 -31.287 + (*,20, 3) 148.67 -31.362 + (*,21, 3) 148.93 -31.345 + (*,22, 3) 149.02 -31.284 + (*,23, 3) 149.17 -31.227 + (*,24, 3) 149.14 -31.315 + (*,25, 3) 149.14 -31.231 + (*,26, 3) 149.35 -31.233 + (*,27, 3) 149.33 -31.321 + (*,28, 3) 149.56 -31.374 + (*,29, 3) 149.47 -31.311 + (*,30, 3) 149.74 -31.303 + (*,31, 3) 149.63 -31.270 + (*,32, 3) 149.73 -31.251 + (*,33, 3) 149.91 -31.321 + (*,34, 3) 149.91 -31.320 + (*,35, 3) 149.87 -31.257 + (*,36, 3) 149.90 -31.308 + (*,37, 3) 150.21 -31.273 + (*,38, 3) 150.12 -31.255 + (*,39, 3) 150.35 -31.258 + (*,40, 3) 150.18 -31.266 + (*,41, 3) 150.28 -31.242 + (*,42, 3) 150.47 -31.314 + (*,43, 3) 150.47 -31.229 + (*,44, 3) 150.56 -31.379 + (*,45, 3) 150.80 -31.242 + (*,46, 3) 150.80 -31.345 + (*,47, 3) 150.85 -31.265 + (*,48, 3) 150.90 -31.282 + (*,49, 3) 150.86 -31.256 + (*,50, 3) 151.11 -31.236 + (*,51, 3) 151.22 -31.236 + (*,52, 3) 151.03 -31.301 + (*,53, 3) 151.27 -31.311 + (*,54, 3) 151.33 -31.224 + (*,55, 3) 151.43 -31.268 + (*,56, 3) 151.53 -31.236 + (*,57, 3) 151.41 -31.211 + (*,58, 3) 151.52 -31.362 + (*,59, 3) 151.81 -31.318 + (*,60, 3) 151.93 -31.330 + (*,61, 3) 151.94 -31.308 + (*,62, 3) 151.71 -31.307 + (*,63, 3) 152.25 -31.314 + (*,64, 3) 152.23 -31.271 + (*,65, 3) 152.13 -31.346 + (*,66, 3) 152.13 -31.331 + (*,67, 3) 152.21 -31.292 + (*,68, 3) 152.25 -31.300 + (*,69, 3) 152.45 -31.376 + (*,70, 3) 152.49 -31.230 + (*, 1, 4) 147.42 -31.165 + (*, 2, 4) 147.49 -31.209 + (*, 3, 4) 147.61 -31.202 + (*, 4, 4) 147.57 -31.247 + (*, 5, 4) 147.88 -31.324 + (*, 6, 4) 147.85 -31.101 + (*, 7, 4) 148.06 -31.209 + (*, 8, 4) 148.01 -31.195 + (*, 9, 4) 148.09 -31.165 + (*,10, 4) 148.11 -31.164 + (*,11, 4) 148.45 -31.212 + (*,12, 4) 148.34 -31.156 + (*,13, 4) 148.34 -31.249 + (*,14, 4) 148.52 -31.109 + (*,15, 4) 148.56 -31.203 + (*,16, 4) 148.58 -31.215 + (*,17, 4) 148.63 -31.282 + (*,18, 4) 148.68 -31.243 + (*,19, 4) 148.85 -31.265 + (*,20, 4) 148.88 -31.254 + (*,21, 4) 148.71 -31.281 + (*,22, 4) 149.11 -31.176 + (*,23, 4) 149.05 -31.161 + (*,24, 4) 149.05 -31.223 + (*,25, 4) 149.16 -31.224 + (*,26, 4) 149.30 -31.203 + (*,27, 4) 149.21 -31.164 + (*,28, 4) 149.42 -31.171 + (*,29, 4) 149.45 -31.243 + (*,30, 4) 149.50 -31.245 + (*,31, 4) 149.59 -31.224 + (*,32, 4) 149.64 -31.215 + (*,33, 4) 149.81 -31.196 + (*,34, 4) 149.75 -31.158 + (*,35, 4) 149.97 -31.250 + (*,36, 4) 150.13 -31.214 + (*,37, 4) 150.17 -31.266 + (*,38, 4) 149.99 -31.118 + (*,39, 4) 150.34 -31.229 + (*,40, 4) 150.30 -31.218 + (*,41, 4) 150.24 -31.229 + (*,42, 4) 150.54 -31.360 + (*,43, 4) 150.50 -31.176 + (*,44, 4) 150.68 -31.182 + (*,45, 4) 150.52 -31.188 + (*,46, 4) 150.75 -31.208 + (*,47, 4) 150.73 -31.170 + (*,48, 4) 151.05 -31.112 + (*,49, 4) 151.01 -31.120 + (*,50, 4) 151.07 -31.202 + (*,51, 4) 151.09 -31.224 + (*,52, 4) 151.09 -31.253 + (*,53, 4) 151.30 -31.164 + (*,54, 4) 151.28 -31.222 + (*,55, 4) 151.47 -31.226 + (*,56, 4) 151.54 -31.149 + (*,57, 4) 151.59 -31.233 + (*,58, 4) 151.54 -31.287 + (*,59, 4) 151.82 -31.157 + (*,60, 4) 151.93 -31.042 + (*,61, 4) 151.76 -31.180 + (*,62, 4) 151.95 -31.194 + (*,63, 4) 151.95 -31.268 + (*,64, 4) 152.03 -31.229 + (*,65, 4) 152.10 -31.307 + (*,66, 4) 152.16 -31.283 + (*,67, 4) 152.30 -31.254 + (*,68, 4) 152.28 -31.222 + (*,69, 4) 152.31 -31.169 + (*,70, 4) 152.50 -31.219 + (*, 1, 5) 147.38 -31.115 + (*, 2, 5) 147.51 -31.154 + (*, 3, 5) 147.68 -31.037 + (*, 4, 5) 147.70 -31.165 + (*, 5, 5) 147.84 -31.089 + (*, 6, 5) 147.86 -31.140 + (*, 7, 5) 147.85 -31.264 + (*, 8, 5) 147.93 -31.055 + (*, 9, 5) 147.98 -31.197 + (*,10, 5) 148.01 -31.160 + (*,11, 5) 148.40 -31.111 + (*,12, 5) 148.20 -31.184 + (*,13, 5) 148.36 -31.164 + (*,14, 5) 148.40 -31.083 + (*,15, 5) 148.52 -31.083 + (*,16, 5) 148.47 -31.119 + (*,17, 5) 148.66 -31.211 + (*,18, 5) 148.70 -31.173 + (*,19, 5) 148.65 -31.112 + (*,20, 5) 149.02 -31.030 + (*,21, 5) 149.05 -31.133 + (*,22, 5) 148.96 -31.148 + (*,23, 5) 149.00 -31.209 + (*,24, 5) 149.08 -31.137 + (*,25, 5) 149.18 -31.136 + (*,26, 5) 149.42 -31.111 + (*,27, 5) 149.18 -31.152 + (*,28, 5) 149.59 -31.165 + (*,29, 5) 149.61 -31.144 + (*,30, 5) 149.73 -31.183 + (*,31, 5) 149.58 -31.149 + (*,32, 5) 149.76 -31.138 + (*,33, 5) 149.91 -31.093 + (*,34, 5) 149.95 -31.152 + (*,35, 5) 149.88 -31.109 + (*,36, 5) 150.08 -31.167 + (*,37, 5) 150.14 -31.107 + (*,38, 5) 150.30 -31.150 + (*,39, 5) 150.14 -31.220 + (*,40, 5) 150.08 -31.249 + (*,41, 5) 150.27 -31.179 + (*,42, 5) 150.58 -31.179 + (*,43, 5) 150.52 -31.140 + (*,44, 5) 150.62 -31.113 + (*,45, 5) 150.75 -31.116 + (*,46, 5) 150.90 -31.160 + (*,47, 5) 150.87 -31.029 + (*,48, 5) 151.11 -31.176 + (*,49, 5) 151.12 -31.182 + (*,50, 5) 151.02 -31.056 + (*,51, 5) 151.16 -31.135 + (*,52, 5) 151.25 -31.104 + (*,53, 5) 151.25 -31.107 + (*,54, 5) 151.38 -31.176 + (*,55, 5) 151.58 -31.042 + (*,56, 5) 151.53 -31.089 + (*,57, 5) 151.50 -31.047 + (*,58, 5) 151.60 -31.092 + (*,59, 5) 151.52 -31.195 + (*,60, 5) 151.73 -31.164 + (*,61, 5) 151.85 -31.162 + (*,62, 5) 151.90 -31.144 + (*,63, 5) 151.99 -31.122 + (*,64, 5) 152.03 -31.238 + (*,65, 5) 151.98 -31.146 + (*,66, 5) 152.14 -31.070 + (*,67, 5) 152.31 -31.042 + (*,68, 5) 152.48 -31.139 + (*,69, 5) 152.51 -31.123 + (*,70, 5) 152.30 -31.209 + (*, 1, 6) 147.41 -31.091 + (*, 2, 6) 147.56 -31.023 + (*, 3, 6) 147.79 -31.031 + (*, 4, 6) 147.75 -31.041 + (*, 5, 6) 147.90 -30.988 + (*, 6, 6) 147.99 -31.094 + (*, 7, 6) 147.82 -31.142 + (*, 8, 6) 147.85 -31.139 + (*, 9, 6) 148.00 -31.111 + (*,10, 6) 148.23 -30.986 + (*,11, 6) 148.14 -31.045 + (*,12, 6) 148.31 -31.042 + (*,13, 6) 148.43 -31.031 + (*,14, 6) 148.56 -31.102 + (*,15, 6) 148.56 -31.020 + (*,16, 6) 148.46 -30.871 + (*,17, 6) 148.57 -31.089 + (*,18, 6) 148.61 -31.086 + (*,19, 6) 148.75 -31.042 + (*,20, 6) 148.93 -31.125 + (*,21, 6) 149.00 -31.151 + (*,22, 6) 148.84 -30.944 + (*,23, 6) 148.89 -31.112 + (*,24, 6) 149.14 -31.010 + (*,25, 6) 149.05 -31.071 + (*,26, 6) 149.28 -31.127 + (*,27, 6) 149.41 -31.007 + (*,28, 6) 149.39 -31.070 + (*,29, 6) 149.61 -31.152 + (*,30, 6) 149.69 -31.080 + (*,31, 6) 149.53 -31.047 + (*,32, 6) 149.67 -31.063 + (*,33, 6) 149.81 -31.139 + (*,34, 6) 149.91 -31.016 + (*,35, 6) 150.12 -31.137 + (*,36, 6) 150.01 -30.995 + (*,37, 6) 150.16 -31.002 + (*,38, 6) 150.20 -31.099 + (*,39, 6) 150.18 -31.007 + (*,40, 6) 150.31 -31.059 + (*,41, 6) 150.43 -31.061 + (*,42, 6) 150.42 -31.003 + (*,43, 6) 150.45 -31.038 + (*,44, 6) 150.54 -31.102 + (*,45, 6) 150.57 -31.047 + (*,46, 6) 150.74 -31.148 + (*,47, 6) 150.87 -31.100 + (*,48, 6) 150.82 -31.001 + (*,49, 6) 150.99 -31.139 + (*,50, 6) 151.31 -31.026 + (*,51, 6) 151.37 -30.941 + (*,52, 6) 151.25 -31.050 + (*,53, 6) 151.38 -31.056 + (*,54, 6) 151.25 -31.099 + (*,55, 6) 151.53 -31.121 + (*,56, 6) 151.42 -31.066 + (*,57, 6) 151.37 -30.949 + (*,58, 6) 151.59 -31.069 + (*,59, 6) 151.70 -31.103 + (*,60, 6) 151.77 -31.006 + (*,61, 6) 151.84 -31.046 + (*,62, 6) 151.89 -31.059 + (*,63, 6) 152.19 -30.948 + (*,64, 6) 151.96 -31.071 + (*,65, 6) 152.04 -31.017 + (*,66, 6) 152.08 -30.972 + (*,67, 6) 152.34 -31.108 + (*,68, 6) 152.34 -31.009 + (*,69, 6) 152.55 -31.038 + (*,70, 6) 152.51 -31.071 + (*, 1, 7) 147.70 -30.901 + (*, 2, 7) 147.41 -30.985 + (*, 3, 7) 147.67 -31.015 + (*, 4, 7) 147.56 -31.006 + (*, 5, 7) 147.96 -31.035 + (*, 6, 7) 147.87 -30.997 + (*, 7, 7) 147.79 -31.058 + (*, 8, 7) 148.12 -31.026 + (*, 9, 7) 148.02 -30.974 + (*,10, 7) 148.08 -30.897 + (*,11, 7) 148.17 -30.972 + (*,12, 7) 148.49 -30.962 + (*,13, 7) 148.41 -31.083 + (*,14, 7) 148.25 -31.013 + (*,15, 7) 148.62 -30.929 + (*,16, 7) 148.67 -31.005 + (*,17, 7) 148.77 -30.952 + (*,18, 7) 148.84 -31.024 + (*,19, 7) 148.83 -31.070 + (*,20, 7) 148.95 -31.008 + (*,21, 7) 148.92 -31.050 + (*,22, 7) 149.03 -30.967 + (*,23, 7) 149.10 -31.001 + (*,24, 7) 149.02 -30.901 + (*,25, 7) 149.24 -31.010 + (*,26, 7) 149.19 -30.994 + (*,27, 7) 149.38 -31.011 + (*,28, 7) 149.32 -31.024 + (*,29, 7) 149.55 -31.048 + (*,30, 7) 149.61 -30.986 + (*,31, 7) 149.73 -30.958 + (*,32, 7) 149.77 -30.983 + (*,33, 7) 149.92 -31.025 + (*,34, 7) 150.03 -31.055 + (*,35, 7) 149.85 -31.031 + (*,36, 7) 150.20 -31.000 + (*,37, 7) 150.23 -30.990 + (*,38, 7) 150.38 -30.997 + (*,39, 7) 150.25 -30.940 + (*,40, 7) 150.28 -31.086 + (*,41, 7) 150.43 -30.939 + (*,42, 7) 150.43 -30.993 + (*,43, 7) 150.50 -30.937 + (*,44, 7) 150.72 -30.998 + (*,45, 7) 150.65 -31.038 + (*,46, 7) 150.72 -31.056 + (*,47, 7) 150.94 -30.980 + (*,48, 7) 150.93 -30.998 + (*,49, 7) 150.93 -31.044 + (*,50, 7) 151.23 -30.955 + (*,51, 7) 151.14 -31.033 + (*,52, 7) 151.13 -30.986 + (*,53, 7) 151.20 -31.055 + (*,54, 7) 151.43 -30.924 + (*,55, 7) 151.32 -30.975 + (*,56, 7) 151.41 -30.965 + (*,57, 7) 151.72 -30.997 + (*,58, 7) 151.59 -30.935 + (*,59, 7) 151.76 -30.968 + (*,60, 7) 151.81 -31.029 + (*,61, 7) 151.77 -30.988 + (*,62, 7) 151.88 -31.064 + (*,63, 7) 152.09 -31.107 + (*,64, 7) 151.99 -31.014 + (*,65, 7) 152.02 -31.067 + (*,66, 7) 152.20 -31.006 + (*,67, 7) 152.31 -31.013 + (*,68, 7) 152.37 -31.003 + (*,69, 7) 152.41 -31.042 + (*,70, 7) 152.46 -30.966 + (*, 1, 8) 147.57 -30.924 + (*, 2, 8) 147.47 -30.898 + (*, 3, 8) 147.61 -30.884 + (*, 4, 8) 147.59 -30.845 + (*, 5, 8) 147.87 -30.804 + (*, 6, 8) 147.88 -30.824 + (*, 7, 8) 147.98 -30.871 + (*, 8, 8) 148.10 -30.910 + (*, 9, 8) 147.99 -30.940 + (*,10, 8) 148.22 -30.922 + (*,11, 8) 148.34 -30.886 + (*,12, 8) 148.23 -30.929 + (*,13, 8) 148.19 -30.808 + (*,14, 8) 148.58 -30.968 + (*,15, 8) 148.53 -30.898 + (*,16, 8) 148.62 -31.042 + (*,17, 8) 148.54 -30.863 + (*,18, 8) 148.63 -30.877 + (*,19, 8) 148.64 -30.939 + (*,20, 8) 148.89 -30.967 + (*,21, 8) 148.88 -31.024 + (*,22, 8) 149.14 -30.931 + (*,23, 8) 149.18 -31.009 + (*,24, 8) 149.34 -30.852 + (*,25, 8) 148.86 -30.861 + (*,26, 8) 149.28 -30.904 + (*,27, 8) 149.35 -30.864 + (*,28, 8) 149.52 -30.909 + (*,29, 8) 149.64 -30.908 + (*,30, 8) 149.61 -30.897 + (*,31, 8) 149.73 -30.869 + (*,32, 8) 149.76 -30.905 + (*,33, 8) 149.73 -30.882 + (*,34, 8) 149.85 -30.897 + (*,35, 8) 150.18 -30.917 + (*,36, 8) 150.11 -30.853 + (*,37, 8) 150.13 -30.939 + (*,38, 8) 150.18 -30.874 + (*,39, 8) 150.15 -30.931 + (*,40, 8) 150.53 -30.931 + (*,41, 8) 150.32 -30.971 + (*,42, 8) 150.47 -30.973 + (*,43, 8) 150.50 -31.006 + (*,44, 8) 150.64 -30.915 + (*,45, 8) 150.47 -30.940 + (*,46, 8) 150.83 -31.012 + (*,47, 8) 150.86 -30.944 + (*,48, 8) 150.94 -30.971 + (*,49, 8) 150.96 -30.990 + (*,50, 8) 151.24 -30.849 + (*,51, 8) 151.29 -30.838 + (*,52, 8) 151.19 -30.955 + (*,53, 8) 151.29 -30.947 + (*,54, 8) 151.37 -30.922 + (*,55, 8) 151.30 -30.938 + (*,56, 8) 151.49 -30.909 + (*,57, 8) 151.40 -30.887 + (*,58, 8) 151.56 -30.919 + (*,59, 8) 151.74 -31.009 + (*,60, 8) 152.04 -30.916 + (*,61, 8) 151.81 -30.956 + (*,62, 8) 151.89 -30.878 + (*,63, 8) 151.91 -30.874 + (*,64, 8) 151.95 -30.952 + (*,65, 8) 152.17 -30.881 + (*,66, 8) 152.27 -30.999 + (*,67, 8) 152.15 -30.865 + (*,68, 8) 152.35 -30.900 + (*,69, 8) 152.54 -30.936 + (*,70, 8) 152.48 -30.911 + (*, 1, 9) 147.55 -30.819 + (*, 2, 9) 147.63 -30.835 + (*, 3, 9) 147.75 -30.775 + (*, 4, 9) 147.71 -30.888 + (*, 5, 9) 147.87 -30.834 + (*, 6, 9) 147.98 -30.835 + (*, 7, 9) 147.91 -30.796 + (*, 8, 9) 148.10 -30.882 + (*, 9, 9) 148.15 -30.804 + (*,10, 9) 148.36 -30.873 + (*,11, 9) 148.09 -30.901 + (*,12, 9) 148.23 -30.759 + (*,13, 9) 148.35 -30.833 + (*,14, 9) 148.48 -30.836 + (*,15, 9) 148.50 -30.850 + (*,16, 9) 148.52 -30.896 + (*,17, 9) 148.57 -30.854 + (*,18, 9) 148.81 -30.814 + (*,19, 9) 148.88 -30.788 + (*,20, 9) 149.12 -30.841 + (*,21, 9) 149.08 -30.820 + (*,22, 9) 149.00 -30.871 + (*,23, 9) 149.06 -30.791 + (*,24, 9) 149.16 -30.819 + (*,25, 9) 149.13 -30.821 + (*,26, 9) 149.34 -30.852 + (*,27, 9) 149.52 -30.869 + (*,28, 9) 149.53 -30.842 + (*,29, 9) 149.52 -30.864 + (*,30, 9) 149.72 -30.836 + (*,31, 9) 149.62 -30.788 + (*,32, 9) 149.78 -30.813 + (*,33, 9) 149.84 -30.795 + (*,34, 9) 149.88 -30.851 + (*,35, 9) 150.13 -30.882 + (*,36, 9) 149.94 -30.835 + (*,37, 9) 149.81 -30.833 + (*,38, 9) 150.27 -30.754 + (*,39, 9) 150.18 -30.899 + (*,40, 9) 150.37 -30.913 + (*,41, 9) 150.38 -30.872 + (*,42, 9) 150.68 -30.864 + (*,43, 9) 150.63 -30.773 + (*,44, 9) 150.66 -30.895 + (*,45, 9) 150.88 -30.799 + (*,46, 9) 150.60 -30.889 + (*,47, 9) 150.74 -30.838 + (*,48, 9) 151.07 -30.831 + (*,49, 9) 150.87 -30.869 + (*,50, 9) 150.98 -30.887 + (*,51, 9) 151.30 -30.855 + (*,52, 9) 151.25 -30.869 + (*,53, 9) 151.34 -30.830 + (*,54, 9) 151.38 -30.781 + (*,55, 9) 151.31 -30.805 + (*,56, 9) 151.48 -30.832 + (*,57, 9) 151.47 -30.818 + (*,58, 9) 151.60 -30.788 + (*,59, 9) 151.64 -30.761 + (*,60, 9) 151.77 -30.807 + (*,61, 9) 151.88 -30.816 + (*,62, 9) 151.94 -30.907 + (*,63, 9) 151.94 -30.914 + (*,64, 9) 152.09 -30.855 + (*,65, 9) 152.23 -30.790 + (*,66, 9) 152.14 -30.810 + (*,67, 9) 152.38 -30.888 + (*,68, 9) 152.28 -30.844 + (*,69, 9) 152.42 -30.843 + (*,70, 9) 152.60 -30.819 + (*, 1,10) 147.37 -30.829 + (*, 2,10) 147.60 -30.737 + (*, 3,10) 147.81 -30.705 + (*, 4,10) 147.69 -30.774 + (*, 5,10) 147.74 -30.769 + (*, 6,10) 147.80 -30.745 + (*, 7,10) 147.97 -30.806 + (*, 8,10) 148.08 -30.716 + (*, 9,10) 148.02 -30.788 + (*,10,10) 148.23 -30.783 + (*,11,10) 148.15 -30.762 + (*,12,10) 148.38 -30.820 + (*,13,10) 148.33 -30.676 + (*,14,10) 148.47 -30.733 + (*,15,10) 148.49 -30.818 + (*,16,10) 148.45 -30.847 + (*,17,10) 148.56 -30.761 + (*,18,10) 148.62 -30.765 + (*,19,10) 148.78 -30.757 + (*,20,10) 148.90 -30.769 + (*,21,10) 149.09 -30.814 + (*,22,10) 149.12 -30.825 + (*,23,10) 149.17 -30.791 + (*,24,10) 149.28 -30.826 + (*,25,10) 149.30 -30.817 + (*,26,10) 149.49 -30.775 + (*,27,10) 149.42 -30.702 + (*,28,10) 149.42 -30.784 + (*,29,10) 149.71 -30.851 + (*,30,10) 149.54 -30.728 + (*,31,10) 149.58 -30.784 + (*,32,10) 149.71 -30.717 + (*,33,10) 149.85 -30.739 + (*,34,10) 149.88 -30.798 + (*,35,10) 150.18 -30.861 + (*,36,10) 150.02 -30.766 + (*,37,10) 150.12 -30.825 + (*,38,10) 150.25 -30.822 + (*,39,10) 150.05 -30.650 + (*,40,10) 150.27 -30.798 + (*,41,10) 150.44 -30.707 + (*,42,10) 150.33 -30.659 + (*,43,10) 150.68 -30.744 + (*,44,10) 150.60 -30.797 + (*,45,10) 150.38 -30.719 + (*,46,10) 150.78 -30.771 + (*,47,10) 150.95 -30.775 + (*,48,10) 151.10 -30.715 + (*,49,10) 151.13 -30.756 + (*,50,10) 151.25 -30.745 + (*,51,10) 151.05 -30.731 + (*,52,10) 151.19 -30.675 + (*,53,10) 151.16 -30.717 + (*,54,10) 151.42 -30.743 + (*,55,10) 151.50 -30.694 + (*,56,10) 151.43 -30.823 + (*,57,10) 151.46 -30.766 + (*,58,10) 151.73 -30.808 + (*,59,10) 151.70 -30.776 + (*,60,10) 151.80 -30.790 + (*,61,10) 151.91 -30.846 + (*,62,10) 151.81 -30.794 + (*,63,10) 152.04 -30.764 + (*,64,10) 152.00 -30.767 + (*,65,10) 152.12 -30.758 + (*,66,10) 152.30 -30.744 + (*,67,10) 152.14 -30.839 + (*,68,10) 152.29 -30.727 + (*,69,10) 152.52 -30.740 + (*,70,10) 152.63 -30.795 + (*, 1,11) 147.37 -30.629 + (*, 2,11) 147.73 -30.808 + (*, 3,11) 147.56 -30.720 + (*, 4,11) 147.80 -30.663 + (*, 5,11) 147.94 -30.602 + (*, 6,11) 147.92 -30.641 + (*, 7,11) 148.03 -30.752 + (*, 8,11) 148.01 -30.629 + (*, 9,11) 148.10 -30.723 + (*,10,11) 148.09 -30.736 + (*,11,11) 148.17 -30.708 + (*,12,11) 148.43 -30.649 + (*,13,11) 148.26 -30.691 + (*,14,11) 148.44 -30.683 + (*,15,11) 148.44 -30.636 + (*,16,11) 148.59 -30.673 + (*,17,11) 148.83 -30.631 + (*,18,11) 148.63 -30.704 + (*,19,11) 148.64 -30.643 + (*,20,11) 149.01 -30.692 + (*,21,11) 149.05 -30.666 + (*,22,11) 148.95 -30.701 + (*,23,11) 148.91 -30.723 + (*,24,11) 149.14 -30.717 + (*,25,11) 149.17 -30.677 + (*,26,11) 149.37 -30.593 + (*,27,11) 149.47 -30.647 + (*,28,11) 149.65 -30.770 + (*,29,11) 149.71 -30.783 + (*,30,11) 149.86 -30.685 + (*,31,11) 149.55 -30.736 + (*,32,11) 149.58 -30.677 + (*,33,11) 149.70 -30.711 + (*,34,11) 149.81 -30.761 + (*,35,11) 150.11 -30.706 + (*,36,11) 150.08 -30.657 + (*,37,11) 150.03 -30.707 + (*,38,11) 150.19 -30.667 + (*,39,11) 150.30 -30.713 + (*,40,11) 150.37 -30.688 + (*,41,11) 150.55 -30.632 + (*,42,11) 150.42 -30.681 + (*,43,11) 150.44 -30.731 + (*,44,11) 150.67 -30.742 + (*,45,11) 150.73 -30.829 + (*,46,11) 150.76 -30.610 + (*,47,11) 150.69 -30.654 + (*,48,11) 150.77 -30.742 + (*,49,11) 151.20 -30.755 + (*,50,11) 151.07 -30.814 + (*,51,11) 151.06 -30.655 + (*,52,11) 151.19 -30.714 + (*,53,11) 151.12 -30.705 + (*,54,11) 151.40 -30.652 + (*,55,11) 151.45 -30.700 + (*,56,11) 151.54 -30.615 + (*,57,11) 151.70 -30.606 + (*,58,11) 151.81 -30.662 + (*,59,11) 151.40 -30.731 + (*,60,11) 151.86 -30.762 + (*,61,11) 151.87 -30.622 + (*,62,11) 151.96 -30.670 + (*,63,11) 151.86 -30.653 + (*,64,11) 152.09 -30.651 + (*,65,11) 151.83 -30.756 + (*,66,11) 152.30 -30.723 + (*,67,11) 152.23 -30.733 + (*,68,11) 152.26 -30.674 + (*,69,11) 152.58 -30.653 + (*,70,11) 152.54 -30.742 + (*, 1,12) 147.66 -30.669 + (*, 2,12) 147.45 -30.599 + (*, 3,12) 147.69 -30.650 + (*, 4,12) 147.52 -30.619 + (*, 5,12) 147.69 -30.665 + (*, 6,12) 147.77 -30.590 + (*, 7,12) 147.83 -30.495 + (*, 8,12) 147.95 -30.611 + (*, 9,12) 148.08 -30.599 + (*,10,12) 148.11 -30.613 + (*,11,12) 148.25 -30.656 + (*,12,12) 148.29 -30.693 + (*,13,12) 148.48 -30.600 + (*,14,12) 148.37 -30.624 + (*,15,12) 148.46 -30.592 + (*,16,12) 148.62 -30.563 + (*,17,12) 148.74 -30.636 + (*,18,12) 148.72 -30.640 + (*,19,12) 148.77 -30.640 + (*,20,12) 148.83 -30.654 + (*,21,12) 148.83 -30.644 + (*,22,12) 148.89 -30.656 + (*,23,12) 149.12 -30.569 + (*,24,12) 148.99 -30.597 + (*,25,12) 149.21 -30.649 + (*,26,12) 149.46 -30.643 + (*,27,12) 149.55 -30.541 + (*,28,12) 149.39 -30.614 + (*,29,12) 149.59 -30.669 + (*,30,12) 149.63 -30.671 + (*,31,12) 149.54 -30.655 + (*,32,12) 149.87 -30.650 + (*,33,12) 149.80 -30.604 + (*,34,12) 149.85 -30.614 + (*,35,12) 150.12 -30.640 + (*,36,12) 150.13 -30.628 + (*,37,12) 150.28 -30.527 + (*,38,12) 150.26 -30.631 + (*,39,12) 150.30 -30.583 + (*,40,12) 150.42 -30.604 + (*,41,12) 150.21 -30.597 + (*,42,12) 150.81 -30.582 + (*,43,12) 150.57 -30.625 + (*,44,12) 150.72 -30.748 + (*,45,12) 150.64 -30.558 + (*,46,12) 150.74 -30.655 + (*,47,12) 151.11 -30.665 + (*,48,12) 150.97 -30.578 + (*,49,12) 150.90 -30.587 + (*,50,12) 151.00 -30.683 + (*,51,12) 151.01 -30.549 + (*,52,12) 151.09 -30.643 + (*,53,12) 151.31 -30.569 + (*,54,12) 151.35 -30.702 + (*,55,12) 151.28 -30.591 + (*,56,12) 151.44 -30.671 + (*,57,12) 151.40 -30.616 + (*,58,12) 151.58 -30.622 + (*,59,12) 151.75 -30.636 + (*,60,12) 152.04 -30.477 + (*,61,12) 151.96 -30.737 + (*,62,12) 152.02 -30.503 + (*,63,12) 152.01 -30.640 + (*,64,12) 152.00 -30.635 + (*,65,12) 152.06 -30.621 + (*,66,12) 152.36 -30.594 + (*,67,12) 152.11 -30.553 + (*,68,12) 152.44 -30.629 + (*,69,12) 152.36 -30.668 + (*,70,12) 152.46 -30.664 + (*, 1,13) 147.48 -30.540 + (*, 2,13) 147.51 -30.492 + (*, 3,13) 147.63 -30.563 + (*, 4,13) 147.69 -30.587 + (*, 5,13) 147.67 -30.587 + (*, 6,13) 147.82 -30.496 + (*, 7,13) 147.97 -30.581 + (*, 8,13) 148.01 -30.587 + (*, 9,13) 147.99 -30.576 + (*,10,13) 148.11 -30.543 + (*,11,13) 148.28 -30.523 + (*,12,13) 148.25 -30.650 + (*,13,13) 148.36 -30.578 + (*,14,13) 148.32 -30.506 + (*,15,13) 148.51 -30.549 + (*,16,13) 148.77 -30.522 + (*,17,13) 148.50 -30.512 + (*,18,13) 148.59 -30.572 + (*,19,13) 149.00 -30.544 + (*,20,13) 148.70 -30.617 + (*,21,13) 148.89 -30.595 + (*,22,13) 149.08 -30.645 + (*,23,13) 149.19 -30.631 + (*,24,13) 148.99 -30.553 + (*,25,13) 149.21 -30.579 + (*,26,13) 149.24 -30.603 + (*,27,13) 149.43 -30.622 + (*,28,13) 149.37 -30.499 + (*,29,13) 149.62 -30.527 + (*,30,13) 149.48 -30.577 + (*,31,13) 149.59 -30.630 + (*,32,13) 149.74 -30.566 + (*,33,13) 150.04 -30.512 + (*,34,13) 149.71 -30.531 + (*,35,13) 149.78 -30.568 + (*,36,13) 149.99 -30.626 + (*,37,13) 150.16 -30.586 + (*,38,13) 150.05 -30.593 + (*,39,13) 150.10 -30.489 + (*,40,13) 150.44 -30.522 + (*,41,13) 150.33 -30.570 + (*,42,13) 150.40 -30.570 + (*,43,13) 150.67 -30.517 + (*,44,13) 150.57 -30.489 + (*,45,13) 150.70 -30.524 + (*,46,13) 150.77 -30.580 + (*,47,13) 150.77 -30.514 + (*,48,13) 150.91 -30.548 + (*,49,13) 150.99 -30.582 + (*,50,13) 151.06 -30.583 + (*,51,13) 151.07 -30.517 + (*,52,13) 151.30 -30.525 + (*,53,13) 151.41 -30.551 + (*,54,13) 151.30 -30.464 + (*,55,13) 151.44 -30.537 + (*,56,13) 151.41 -30.609 + (*,57,13) 151.61 -30.567 + (*,58,13) 151.64 -30.531 + (*,59,13) 151.58 -30.603 + (*,60,13) 151.66 -30.496 + (*,61,13) 151.98 -30.568 + (*,62,13) 152.05 -30.625 + (*,63,13) 151.94 -30.626 + (*,64,13) 152.11 -30.447 + (*,65,13) 152.17 -30.420 + (*,66,13) 152.19 -30.588 + (*,67,13) 152.24 -30.584 + (*,68,13) 152.32 -30.522 + (*,69,13) 152.53 -30.565 + (*,70,13) 152.54 -30.548 + (*, 1,14) 147.49 -30.590 + (*, 2,14) 147.65 -30.462 + (*, 3,14) 147.64 -30.443 + (*, 4,14) 147.96 -30.455 + (*, 5,14) 147.87 -30.443 + (*, 6,14) 147.92 -30.476 + (*, 7,14) 147.96 -30.389 + (*, 8,14) 148.00 -30.442 + (*, 9,14) 148.21 -30.526 + (*,10,14) 148.11 -30.490 + (*,11,14) 148.31 -30.461 + (*,12,14) 148.42 -30.443 + (*,13,14) 148.30 -30.531 + (*,14,14) 148.43 -30.493 + (*,15,14) 148.45 -30.524 + (*,16,14) 148.42 -30.455 + (*,17,14) 148.80 -30.486 + (*,18,14) 148.69 -30.487 + (*,19,14) 148.76 -30.449 + (*,20,14) 148.90 -30.455 + (*,21,14) 148.87 -30.400 + (*,22,14) 149.06 -30.450 + (*,23,14) 149.16 -30.481 + (*,24,14) 149.41 -30.510 + (*,25,14) 149.25 -30.361 + (*,26,14) 149.26 -30.442 + (*,27,14) 149.42 -30.478 + (*,28,14) 149.45 -30.454 + (*,29,14) 149.47 -30.531 + (*,30,14) 149.68 -30.517 + (*,31,14) 149.74 -30.458 + (*,32,14) 149.80 -30.495 + (*,33,14) 149.66 -30.572 + (*,34,14) 150.01 -30.424 + (*,35,14) 150.16 -30.507 + (*,36,14) 150.04 -30.337 + (*,37,14) 150.21 -30.441 + (*,38,14) 150.14 -30.442 + (*,39,14) 150.26 -30.444 + (*,40,14) 150.29 -30.474 + (*,41,14) 150.50 -30.453 + (*,42,14) 150.50 -30.450 + (*,43,14) 150.59 -30.538 + (*,44,14) 150.67 -30.412 + (*,45,14) 150.77 -30.462 + (*,46,14) 150.77 -30.462 + (*,47,14) 150.77 -30.392 + (*,48,14) 151.01 -30.389 + (*,49,14) 150.89 -30.514 + (*,50,14) 151.24 -30.365 + (*,51,14) 151.19 -30.522 + (*,52,14) 151.15 -30.478 + (*,53,14) 151.25 -30.451 + (*,54,14) 151.32 -30.498 + (*,55,14) 151.55 -30.441 + (*,56,14) 151.62 -30.499 + (*,57,14) 151.58 -30.505 + (*,58,14) 151.60 -30.397 + (*,59,14) 151.67 -30.461 + (*,60,14) 151.71 -30.435 + (*,61,14) 151.88 -30.402 + (*,62,14) 151.84 -30.513 + (*,63,14) 151.98 -30.473 + (*,64,14) 151.98 -30.519 + (*,65,14) 152.19 -30.520 + (*,66,14) 152.07 -30.594 + (*,67,14) 152.56 -30.521 + (*,68,14) 152.34 -30.514 + (*,69,14) 152.58 -30.515 + (*,70,14) 152.57 -30.523 + (*, 1,15) 147.45 -30.443 + (*, 2,15) 147.83 -30.390 + (*, 3,15) 147.76 -30.450 + (*, 4,15) 147.67 -30.401 + (*, 5,15) 147.71 -30.437 + (*, 6,15) 147.94 -30.484 + (*, 7,15) 147.91 -30.424 + (*, 8,15) 147.85 -30.394 + (*, 9,15) 148.03 -30.443 + (*,10,15) 148.16 -30.384 + (*,11,15) 148.18 -30.335 + (*,12,15) 148.26 -30.289 + (*,13,15) 148.39 -30.382 + (*,14,15) 148.46 -30.353 + (*,15,15) 148.58 -30.413 + (*,16,15) 148.70 -30.384 + (*,17,15) 148.70 -30.342 + (*,18,15) 148.85 -30.433 + (*,19,15) 148.85 -30.424 + (*,20,15) 148.95 -30.344 + (*,21,15) 148.92 -30.402 + (*,22,15) 149.05 -30.359 + (*,23,15) 149.25 -30.451 + (*,24,15) 149.28 -30.499 + (*,25,15) 149.25 -30.386 + (*,26,15) 149.18 -30.409 + (*,27,15) 149.53 -30.360 + (*,28,15) 149.52 -30.375 + (*,29,15) 149.48 -30.418 + (*,30,15) 149.73 -30.437 + (*,31,15) 149.40 -30.374 + (*,32,15) 149.83 -30.382 + (*,33,15) 149.91 -30.414 + (*,34,15) 149.83 -30.396 + (*,35,15) 149.88 -30.348 + (*,36,15) 150.07 -30.311 + (*,37,15) 150.17 -30.395 + (*,38,15) 150.13 -30.487 + (*,39,15) 150.14 -30.444 + (*,40,15) 150.33 -30.352 + (*,41,15) 150.19 -30.314 + (*,42,15) 150.38 -30.413 + (*,43,15) 150.53 -30.384 + (*,44,15) 150.73 -30.448 + (*,45,15) 150.72 -30.366 + (*,46,15) 150.74 -30.355 + (*,47,15) 150.77 -30.432 + (*,48,15) 150.89 -30.346 + (*,49,15) 150.96 -30.353 + (*,50,15) 151.20 -30.404 + (*,51,15) 151.26 -30.414 + (*,52,15) 151.25 -30.358 + (*,53,15) 151.15 -30.341 + (*,54,15) 151.37 -30.398 + (*,55,15) 151.39 -30.392 + (*,56,15) 151.55 -30.471 + (*,57,15) 151.42 -30.437 + (*,58,15) 151.82 -30.449 + (*,59,15) 151.78 -30.357 + (*,60,15) 151.92 -30.469 + (*,61,15) 151.87 -30.382 + (*,62,15) 151.90 -30.384 + (*,63,15) 151.97 -30.413 + (*,64,15) 151.96 -30.416 + (*,65,15) 152.08 -30.416 + (*,66,15) 152.19 -30.399 + (*,67,15) 152.16 -30.389 + (*,68,15) 152.44 -30.396 + (*,69,15) 152.37 -30.442 + (*,70,15) 152.43 -30.416 + (*, 1,16) 147.60 -30.324 + (*, 2,16) 147.55 -30.276 + (*, 3,16) 147.68 -30.280 + (*, 4,16) 147.86 -30.382 + (*, 5,16) 147.89 -30.400 + (*, 6,16) 148.02 -30.385 + (*, 7,16) 147.91 -30.355 + (*, 8,16) 147.94 -30.372 + (*, 9,16) 148.02 -30.415 + (*,10,16) 148.12 -30.312 + (*,11,16) 148.20 -30.245 + (*,12,16) 148.29 -30.266 + (*,13,16) 148.30 -30.357 + (*,14,16) 148.32 -30.300 + (*,15,16) 148.58 -30.308 + (*,16,16) 148.70 -30.287 + (*,17,16) 148.64 -30.271 + (*,18,16) 148.82 -30.381 + (*,19,16) 148.80 -30.359 + (*,20,16) 148.94 -30.213 + (*,21,16) 148.95 -30.358 + (*,22,16) 148.90 -30.255 + (*,23,16) 149.21 -30.327 + (*,24,16) 149.09 -30.296 + (*,25,16) 149.28 -30.238 + (*,26,16) 149.33 -30.378 + (*,27,16) 149.59 -30.384 + (*,28,16) 149.30 -30.334 + (*,29,16) 149.54 -30.254 + (*,30,16) 149.48 -30.351 + (*,31,16) 149.77 -30.327 + (*,32,16) 149.88 -30.275 + (*,33,16) 149.85 -30.327 + (*,34,16) 149.85 -30.310 + (*,35,16) 149.98 -30.389 + (*,36,16) 150.07 -30.286 + (*,37,16) 150.15 -30.255 + (*,38,16) 150.20 -30.296 + (*,39,16) 150.05 -30.305 + (*,40,16) 150.32 -30.322 + (*,41,16) 150.36 -30.337 + (*,42,16) 150.39 -30.294 + (*,43,16) 150.59 -30.311 + (*,44,16) 150.63 -30.348 + (*,45,16) 150.67 -30.193 + (*,46,16) 150.85 -30.278 + (*,47,16) 150.82 -30.376 + (*,48,16) 150.83 -30.350 + (*,49,16) 151.00 -30.292 + (*,50,16) 151.06 -30.276 + (*,51,16) 151.26 -30.384 + (*,52,16) 151.18 -30.368 + (*,53,16) 151.24 -30.352 + (*,54,16) 151.46 -30.339 + (*,55,16) 151.21 -30.284 + (*,56,16) 151.38 -30.365 + (*,57,16) 151.58 -30.303 + (*,58,16) 151.55 -30.267 + (*,59,16) 151.56 -30.317 + (*,60,16) 151.74 -30.274 + (*,61,16) 151.81 -30.363 + (*,62,16) 151.81 -30.322 + (*,63,16) 151.94 -30.388 + (*,64,16) 152.10 -30.322 + (*,65,16) 152.15 -30.361 + (*,66,16) 152.09 -30.248 + (*,67,16) 152.29 -30.339 + (*,68,16) 152.36 -30.310 + (*,69,16) 152.30 -30.402 + (*,70,16) 152.49 -30.385 + (*, 1,17) 147.40 -30.197 + (*, 2,17) 147.62 -30.210 + (*, 3,17) 147.56 -30.288 + (*, 4,17) 147.62 -30.207 + (*, 5,17) 147.78 -30.286 + (*, 6,17) 147.83 -30.378 + (*, 7,17) 147.85 -30.245 + (*, 8,17) 147.82 -30.217 + (*, 9,17) 148.07 -30.250 + (*,10,17) 148.14 -30.280 + (*,11,17) 148.26 -30.308 + (*,12,17) 148.30 -30.235 + (*,13,17) 148.40 -30.155 + (*,14,17) 148.46 -30.304 + (*,15,17) 148.40 -30.355 + (*,16,17) 148.60 -30.251 + (*,17,17) 148.66 -30.282 + (*,18,17) 148.65 -30.235 + (*,19,17) 148.64 -30.184 + (*,20,17) 148.88 -30.374 + (*,21,17) 148.90 -30.292 + (*,22,17) 148.91 -30.210 + (*,23,17) 149.09 -30.317 + (*,24,17) 148.94 -30.217 + (*,25,17) 149.24 -30.205 + (*,26,17) 149.38 -30.186 + (*,27,17) 149.30 -30.222 + (*,28,17) 149.66 -30.286 + (*,29,17) 149.69 -30.266 + (*,30,17) 149.79 -30.328 + (*,31,17) 149.63 -30.236 + (*,32,17) 149.69 -30.228 + (*,33,17) 149.88 -30.181 + (*,34,17) 149.88 -30.237 + (*,35,17) 150.00 -30.220 + (*,36,17) 149.96 -30.199 + (*,37,17) 150.18 -30.236 + (*,38,17) 150.35 -30.159 + (*,39,17) 150.24 -30.269 + (*,40,17) 150.13 -30.252 + (*,41,17) 150.46 -30.258 + (*,42,17) 150.46 -30.293 + (*,43,17) 150.53 -30.284 + (*,44,17) 150.67 -30.221 + (*,45,17) 150.83 -30.289 + (*,46,17) 150.76 -30.341 + (*,47,17) 150.80 -30.255 + (*,48,17) 150.92 -30.193 + (*,49,17) 150.93 -30.176 + (*,50,17) 150.97 -30.190 + (*,51,17) 151.04 -30.363 + (*,52,17) 151.04 -30.281 + (*,53,17) 151.29 -30.263 + (*,54,17) 151.26 -30.221 + (*,55,17) 151.26 -30.259 + (*,56,17) 151.50 -30.251 + (*,57,17) 151.56 -30.212 + (*,58,17) 151.68 -30.218 + (*,59,17) 151.80 -30.263 + (*,60,17) 151.91 -30.263 + (*,61,17) 151.96 -30.255 + (*,62,17) 152.20 -30.239 + (*,63,17) 151.95 -30.330 + (*,64,17) 152.16 -30.243 + (*,65,17) 152.14 -30.283 + (*,66,17) 152.14 -30.289 + (*,67,17) 152.19 -30.365 + (*,68,17) 152.28 -30.202 + (*,69,17) 152.47 -30.242 + (*,70,17) 152.64 -30.185 + (*, 1,18) 147.28 -30.162 + (*, 2,18) 147.18 -30.138 + (*, 3,18) 147.65 -30.260 + (*, 4,18) 147.81 -30.263 + (*, 5,18) 147.67 -30.191 + (*, 6,18) 147.86 -30.174 + (*, 7,18) 147.98 -30.123 + (*, 8,18) 148.25 -30.198 + (*, 9,18) 148.25 -30.271 + (*,10,18) 148.12 -30.228 + (*,11,18) 148.15 -30.141 + (*,12,18) 148.34 -30.238 + (*,13,18) 148.41 -30.184 + (*,14,18) 148.43 -30.114 + (*,15,18) 148.43 -30.267 + (*,16,18) 148.63 -30.201 + (*,17,18) 148.88 -30.235 + (*,18,18) 148.79 -30.123 + (*,19,18) 148.78 -30.105 + (*,20,18) 148.84 -30.252 + (*,21,18) 148.90 -30.248 + (*,22,18) 149.03 -30.148 + (*,23,18) 149.07 -30.188 + (*,24,18) 149.10 -30.173 + (*,25,18) 149.30 -30.220 + (*,26,18) 149.26 -30.227 + (*,27,18) 149.42 -30.195 + (*,28,18) 149.57 -30.134 + (*,29,18) 149.36 -30.183 + (*,30,18) 149.50 -30.149 + (*,31,18) 149.67 -30.211 + (*,32,18) 149.77 -30.234 + (*,33,18) 149.78 -30.113 + (*,34,18) 149.72 -30.188 + (*,35,18) 149.91 -30.240 + (*,36,18) 150.01 -30.038 + (*,37,18) 150.21 -30.222 + (*,38,18) 150.28 -30.296 + (*,39,18) 150.29 -30.104 + (*,40,18) 150.37 -30.233 + (*,41,18) 150.35 -30.198 + (*,42,18) 150.60 -30.208 + (*,43,18) 150.49 -30.056 + (*,44,18) 150.56 -30.116 + (*,45,18) 150.72 -30.155 + (*,46,18) 150.70 -30.170 + (*,47,18) 150.70 -30.138 + (*,48,18) 150.89 -30.183 + (*,49,18) 151.11 -30.170 + (*,50,18) 151.04 -30.112 + (*,51,18) 151.13 -30.186 + (*,52,18) 151.13 -30.198 + (*,53,18) 151.16 -30.251 + (*,54,18) 151.28 -30.176 + (*,55,18) 151.38 -30.157 + (*,56,18) 151.62 -30.166 + (*,57,18) 151.61 -30.168 + (*,58,18) 151.67 -30.164 + (*,59,18) 151.55 -30.147 + (*,60,18) 151.78 -30.233 + (*,61,18) 151.90 -30.184 + (*,62,18) 151.79 -30.212 + (*,63,18) 152.20 -30.244 + (*,64,18) 152.08 -30.133 + (*,65,18) 152.13 -30.188 + (*,66,18) 152.24 -30.247 + (*,67,18) 152.37 -30.237 + (*,68,18) 152.37 -30.082 + (*,69,18) 152.32 -30.169 + (*,70,18) 152.65 -30.071 + (*, 1,19) 147.56 -30.055 + (*, 2,19) 147.44 -30.169 + (*, 3,19) 147.62 -30.099 + (*, 4,19) 147.65 -30.066 + (*, 5,19) 147.66 -30.032 + (*, 6,19) 147.85 -30.099 + (*, 7,19) 147.99 -30.096 + (*, 8,19) 147.99 -30.117 + (*, 9,19) 147.90 -30.127 + (*,10,19) 148.17 -30.150 + (*,11,19) 148.29 -30.198 + (*,12,19) 148.34 -30.106 + (*,13,19) 148.28 -30.163 + (*,14,19) 148.29 -30.092 + (*,15,19) 148.63 -30.122 + (*,16,19) 148.43 -30.098 + (*,17,19) 148.81 -30.095 + (*,18,19) 148.68 -30.137 + (*,19,19) 148.78 -30.128 + (*,20,19) 148.83 -30.081 + (*,21,19) 149.00 -30.073 + (*,22,19) 148.81 -30.114 + (*,23,19) 149.00 -30.127 + (*,24,19) 149.30 -30.183 + (*,25,19) 149.21 -30.118 + (*,26,19) 149.19 -30.125 + (*,27,19) 149.51 -30.065 + (*,28,19) 149.24 -30.087 + (*,29,19) 149.42 -30.027 + (*,30,19) 149.74 -30.118 + (*,31,19) 149.72 -30.149 + (*,32,19) 149.54 -30.141 + (*,33,19) 149.81 -30.073 + (*,34,19) 149.87 -30.164 + (*,35,19) 150.03 -30.102 + (*,36,19) 149.99 -30.085 + (*,37,19) 150.30 -30.159 + (*,38,19) 150.13 -30.055 + (*,39,19) 150.12 -30.172 + (*,40,19) 150.29 -30.035 + (*,41,19) 150.36 -30.110 + (*,42,19) 150.41 -30.085 + (*,43,19) 150.52 -30.007 + (*,44,19) 150.75 -30.018 + (*,45,19) 150.87 -30.031 + (*,46,19) 150.89 -30.059 + (*,47,19) 150.86 -30.149 + (*,48,19) 150.97 -30.097 + (*,49,19) 150.93 -30.064 + (*,50,19) 151.09 -30.101 + (*,51,19) 151.14 -30.133 + (*,52,19) 151.20 -30.060 + (*,53,19) 151.46 -30.197 + (*,54,19) 151.26 -30.056 + (*,55,19) 151.20 -30.145 + (*,56,19) 151.44 -30.070 + (*,57,19) 151.56 -30.112 + (*,58,19) 151.69 -30.175 + (*,59,19) 151.79 -30.081 + (*,60,19) 151.75 -30.142 + (*,61,19) 151.87 -30.083 + (*,62,19) 151.90 -30.155 + (*,63,19) 151.95 -30.140 + (*,64,19) 152.05 -30.047 + (*,65,19) 152.12 -30.138 + (*,66,19) 151.95 -30.080 + (*,67,19) 152.28 -30.086 + (*,68,19) 152.15 -30.020 + (*,69,19) 152.40 -30.037 + (*,70,19) 152.50 -30.115 + (*, 1,20) 147.31 -30.213 + (*, 2,20) 147.74 -30.020 + (*, 3,20) 147.64 -30.104 + (*, 4,20) 147.76 -30.057 + (*, 5,20) 147.52 -29.955 + (*, 6,20) 147.86 -30.021 + (*, 7,20) 148.01 -30.076 + (*, 8,20) 148.04 -29.910 + (*, 9,20) 148.07 -29.944 + (*,10,20) 148.42 -30.043 + (*,11,20) 148.27 -30.047 + (*,12,20) 148.31 -30.009 + (*,13,20) 148.39 -30.070 + (*,14,20) 148.43 -30.080 + (*,15,20) 148.34 -30.004 + (*,16,20) 148.57 -29.940 + (*,17,20) 148.65 -30.030 + (*,18,20) 148.78 -30.037 + (*,19,20) 148.83 -29.993 + (*,20,20) 148.93 -29.991 + (*,21,20) 149.11 -29.937 + (*,22,20) 148.89 -30.125 + (*,23,20) 148.99 -30.033 + (*,24,20) 149.13 -30.066 + (*,25,20) 149.16 -30.047 + (*,26,20) 149.18 -30.089 + (*,27,20) 149.30 -30.087 + (*,28,20) 149.51 -29.943 + (*,29,20) 149.56 -30.063 + (*,30,20) 149.71 -30.171 + (*,31,20) 149.67 -30.139 + (*,32,20) 149.81 -30.002 + (*,33,20) 149.93 -29.996 + (*,34,20) 149.76 -29.974 + (*,35,20) 149.94 -30.087 + (*,36,20) 150.09 -30.068 + (*,37,20) 150.11 -29.987 + (*,38,20) 150.27 -30.008 + (*,39,20) 150.14 -30.026 + (*,40,20) 150.31 -30.039 + (*,41,20) 150.25 -30.026 + (*,42,20) 150.55 -30.020 + (*,43,20) 150.41 -30.042 + (*,44,20) 150.71 -30.069 + (*,45,20) 150.77 -30.067 + (*,46,20) 150.71 -30.112 + (*,47,20) 150.81 -30.050 + (*,48,20) 150.92 -30.021 + (*,49,20) 150.95 -30.024 + (*,50,20) 151.12 -30.062 + (*,51,20) 151.27 -30.034 + (*,52,20) 151.13 -30.105 + (*,53,20) 151.27 -30.046 + (*,54,20) 151.23 -30.026 + (*,55,20) 151.38 -29.970 + (*,56,20) 151.58 -30.027 + (*,57,20) 151.66 -29.986 + (*,58,20) 151.68 -30.072 + (*,59,20) 151.66 -29.952 + (*,60,20) 151.73 -29.973 + (*,61,20) 151.62 -30.050 + (*,62,20) 152.02 -30.018 + (*,63,20) 151.95 -30.063 + (*,64,20) 152.16 -30.075 + (*,65,20) 152.17 -30.089 + (*,66,20) 152.27 -30.076 + (*,67,20) 152.36 -30.089 + (*,68,20) 152.53 -30.083 + (*,69,20) 152.44 -30.077 + (*,70,20) 152.51 -30.022 + (*, 1,21) 147.38 -29.958 + (*, 2,21) 147.60 -30.023 + (*, 3,21) 147.54 -29.995 + (*, 4,21) 147.84 -29.942 + (*, 5,21) 147.82 -30.029 + (*, 6,21) 147.88 -29.965 + (*, 7,21) 147.86 -29.907 + (*, 8,21) 148.08 -29.945 + (*, 9,21) 148.00 -29.875 + (*,10,21) 148.23 -29.907 + (*,11,21) 148.33 -29.969 + (*,12,21) 148.51 -29.905 + (*,13,21) 148.46 -29.940 + (*,14,21) 148.38 -29.954 + (*,15,21) 148.43 -29.950 + (*,16,21) 148.54 -29.922 + (*,17,21) 148.59 -30.023 + (*,18,21) 148.93 -29.917 + (*,19,21) 148.89 -29.951 + (*,20,21) 148.87 -29.940 + (*,21,21) 148.97 -29.980 + (*,22,21) 149.16 -29.923 + (*,23,21) 149.27 -29.936 + (*,24,21) 149.05 -29.977 + (*,25,21) 149.22 -29.925 + (*,26,21) 149.22 -29.970 + (*,27,21) 149.32 -30.004 + (*,28,21) 149.50 -29.964 + (*,29,21) 149.49 -29.974 + (*,30,21) 149.57 -29.991 + (*,31,21) 149.91 -29.961 + (*,32,21) 149.64 -29.889 + (*,33,21) 149.55 -29.950 + (*,34,21) 149.87 -29.988 + (*,35,21) 149.92 -30.062 + (*,36,21) 150.04 -29.986 + (*,37,21) 149.87 -29.898 + (*,38,21) 150.11 -29.872 + (*,39,21) 150.11 -29.906 + (*,40,21) 150.34 -30.040 + (*,41,21) 150.39 -29.915 + (*,42,21) 150.65 -29.910 + (*,43,21) 150.43 -29.976 + (*,44,21) 150.57 -29.975 + (*,45,21) 150.65 -29.937 + (*,46,21) 150.64 -29.999 + (*,47,21) 150.80 -30.032 + (*,48,21) 150.69 -29.867 + (*,49,21) 150.94 -30.006 + (*,50,21) 151.06 -29.964 + (*,51,21) 151.23 -29.994 + (*,52,21) 151.27 -29.858 + (*,53,21) 151.10 -29.960 + (*,54,21) 151.48 -30.008 + (*,55,21) 151.45 -29.920 + (*,56,21) 151.42 -30.010 + (*,57,21) 151.73 -29.964 + (*,58,21) 151.48 -29.962 + (*,59,21) 151.61 -29.963 + (*,60,21) 151.71 -29.911 + (*,61,21) 151.83 -29.957 + (*,62,21) 151.90 -30.019 + (*,63,21) 152.11 -29.990 + (*,64,21) 152.17 -29.911 + (*,65,21) 152.21 -29.957 + (*,66,21) 152.31 -29.989 + (*,67,21) 152.38 -29.965 + (*,68,21) 152.41 -29.975 + (*,69,21) 152.51 -29.922 + (*,70,21) 152.45 -30.085 + (*, 1,22) 147.49 -29.878 + (*, 2,22) 147.50 -29.958 + (*, 3,22) 147.58 -29.807 + (*, 4,22) 147.80 -29.897 + (*, 5,22) 147.68 -29.861 + (*, 6,22) 147.67 -29.822 + (*, 7,22) 147.94 -29.952 + (*, 8,22) 148.09 -29.804 + (*, 9,22) 148.21 -29.865 + (*,10,22) 148.21 -29.980 + (*,11,22) 148.09 -29.838 + (*,12,22) 148.47 -29.890 + (*,13,22) 148.31 -29.863 + (*,14,22) 148.52 -29.941 + (*,15,22) 148.48 -29.881 + (*,16,22) 148.63 -29.868 + (*,17,22) 148.65 -29.899 + (*,18,22) 148.78 -29.936 + (*,19,22) 148.89 -29.864 + (*,20,22) 148.85 -29.837 + (*,21,22) 148.95 -29.863 + (*,22,22) 148.96 -29.873 + (*,23,22) 149.03 -29.932 + (*,24,22) 149.15 -29.901 + (*,25,22) 149.15 -29.910 + (*,26,22) 149.34 -29.825 + (*,27,22) 149.32 -29.967 + (*,28,22) 149.45 -29.856 + (*,29,22) 149.39 -29.911 + (*,30,22) 149.56 -29.876 + (*,31,22) 149.44 -29.955 + (*,32,22) 149.83 -29.871 + (*,33,22) 149.79 -29.857 + (*,34,22) 149.84 -30.006 + (*,35,22) 149.96 -29.849 + (*,36,22) 150.05 -29.919 + (*,37,22) 150.38 -29.867 + (*,38,22) 150.10 -29.924 + (*,39,22) 150.25 -29.887 + (*,40,22) 150.27 -29.832 + (*,41,22) 150.44 -29.892 + (*,42,22) 150.46 -29.934 + (*,43,22) 150.67 -29.944 + (*,44,22) 150.56 -29.851 + (*,45,22) 150.84 -29.864 + (*,46,22) 150.56 -29.936 + (*,47,22) 150.88 -29.932 + (*,48,22) 151.02 -29.863 + (*,49,22) 150.96 -29.852 + (*,50,22) 150.91 -29.877 + (*,51,22) 151.24 -29.958 + (*,52,22) 151.11 -29.843 + (*,53,22) 151.31 -29.953 + (*,54,22) 151.36 -29.974 + (*,55,22) 151.47 -29.926 + (*,56,22) 151.53 -29.885 + (*,57,22) 151.68 -29.930 + (*,58,22) 151.61 -29.829 + (*,59,22) 151.92 -29.871 + (*,60,22) 151.57 -29.832 + (*,61,22) 151.77 -29.891 + (*,62,22) 151.99 -29.907 + (*,63,22) 151.93 -29.887 + (*,64,22) 152.07 -29.877 + (*,65,22) 152.11 -29.939 + (*,66,22) 152.23 -29.917 + (*,67,22) 152.29 -29.892 + (*,68,22) 152.12 -29.885 + (*,69,22) 152.42 -29.918 + (*,70,22) 152.51 -29.817 + (*, 1,23) 147.51 -29.841 + (*, 2,23) 147.67 -29.772 + (*, 3,23) 147.80 -29.820 + (*, 4,23) 147.60 -29.717 + (*, 5,23) 147.80 -29.784 + (*, 6,23) 147.88 -29.713 + (*, 7,23) 147.73 -29.869 + (*, 8,23) 147.88 -29.869 + (*, 9,23) 148.27 -29.881 + (*,10,23) 148.22 -29.790 + (*,11,23) 148.24 -29.884 + (*,12,23) 148.38 -29.822 + (*,13,23) 148.29 -29.876 + (*,14,23) 148.50 -29.725 + (*,15,23) 148.64 -29.818 + (*,16,23) 148.73 -29.852 + (*,17,23) 148.50 -29.779 + (*,18,23) 148.46 -29.823 + (*,19,23) 148.93 -29.832 + (*,20,23) 148.98 -29.829 + (*,21,23) 148.90 -29.836 + (*,22,23) 149.09 -29.790 + (*,23,23) 149.30 -29.819 + (*,24,23) 149.08 -29.687 + (*,25,23) 149.02 -29.835 + (*,26,23) 149.34 -29.819 + (*,27,23) 149.36 -29.875 + (*,28,23) 149.47 -29.827 + (*,29,23) 149.55 -29.794 + (*,30,23) 149.86 -29.751 + (*,31,23) 149.75 -29.849 + (*,32,23) 149.68 -29.741 + (*,33,23) 149.81 -29.765 + (*,34,23) 149.83 -29.876 + (*,35,23) 149.90 -29.838 + (*,36,23) 150.04 -29.838 + (*,37,23) 150.07 -29.810 + (*,38,23) 150.28 -29.853 + (*,39,23) 150.22 -29.824 + (*,40,23) 150.31 -29.713 + (*,41,23) 150.41 -29.829 + (*,42,23) 150.44 -29.823 + (*,43,23) 150.62 -29.859 + (*,44,23) 150.64 -29.881 + (*,45,23) 150.71 -29.882 + (*,46,23) 150.75 -29.780 + (*,47,23) 150.81 -29.933 + (*,48,23) 150.77 -29.784 + (*,49,23) 151.05 -29.902 + (*,50,23) 150.94 -29.900 + (*,51,23) 151.11 -29.868 + (*,52,23) 151.26 -29.829 + (*,53,23) 151.48 -29.810 + (*,54,23) 151.60 -29.778 + (*,55,23) 151.43 -29.803 + (*,56,23) 151.44 -29.759 + (*,57,23) 151.36 -29.742 + (*,58,23) 151.65 -29.770 + (*,59,23) 151.60 -29.852 + (*,60,23) 151.77 -29.856 + (*,61,23) 151.87 -29.908 + (*,62,23) 151.77 -29.816 + (*,63,23) 152.03 -29.829 + (*,64,23) 152.18 -29.874 + (*,65,23) 152.08 -29.865 + (*,66,23) 152.30 -29.795 + (*,67,23) 152.26 -29.766 + (*,68,23) 152.37 -29.780 + (*,69,23) 152.38 -29.851 + (*,70,23) 152.41 -29.832 + (*, 1,24) 147.47 -29.771 + (*, 2,24) 147.60 -29.773 + (*, 3,24) 147.77 -29.872 + (*, 4,24) 147.74 -29.776 + (*, 5,24) 147.73 -29.701 + (*, 6,24) 147.85 -29.668 + (*, 7,24) 147.85 -29.753 + (*, 8,24) 148.14 -29.725 + (*, 9,24) 148.17 -29.786 + (*,10,24) 148.18 -29.776 + (*,11,24) 148.11 -29.728 + (*,12,24) 148.33 -29.735 + (*,13,24) 148.38 -29.697 + (*,14,24) 148.59 -29.811 + (*,15,24) 148.55 -29.806 + (*,16,24) 148.71 -29.756 + (*,17,24) 148.74 -29.714 + (*,18,24) 148.72 -29.784 + (*,19,24) 148.82 -29.768 + (*,20,24) 148.88 -29.754 + (*,21,24) 148.86 -29.779 + (*,22,24) 148.91 -29.711 + (*,23,24) 149.02 -29.751 + (*,24,24) 149.16 -29.799 + (*,25,24) 149.31 -29.686 + (*,26,24) 149.46 -29.765 + (*,27,24) 149.53 -29.791 + (*,28,24) 149.30 -29.698 + (*,29,24) 149.31 -29.807 + (*,30,24) 149.67 -29.837 + (*,31,24) 149.80 -29.794 + (*,32,24) 149.63 -29.713 + (*,33,24) 149.72 -29.742 + (*,34,24) 149.79 -29.763 + (*,35,24) 150.00 -29.739 + (*,36,24) 150.08 -29.700 + (*,37,24) 150.29 -29.773 + (*,38,24) 150.29 -29.820 + (*,39,24) 150.25 -29.687 + (*,40,24) 150.52 -29.747 + (*,41,24) 150.36 -29.709 + (*,42,24) 150.30 -29.806 + (*,43,24) 150.60 -29.839 + (*,44,24) 150.49 -29.677 + (*,45,24) 150.55 -29.719 + (*,46,24) 150.68 -29.725 + (*,47,24) 150.71 -29.748 + (*,48,24) 150.78 -29.786 + (*,49,24) 151.10 -29.758 + (*,50,24) 150.97 -29.696 + (*,51,24) 151.07 -29.723 + (*,52,24) 151.17 -29.747 + (*,53,24) 151.35 -29.744 + (*,54,24) 151.36 -29.812 + (*,55,24) 151.38 -29.682 + (*,56,24) 151.50 -29.815 + (*,57,24) 151.63 -29.739 + (*,58,24) 151.49 -29.787 + (*,59,24) 151.92 -29.781 + (*,60,24) 151.81 -29.798 + (*,61,24) 151.98 -29.753 + (*,62,24) 151.90 -29.792 + (*,63,24) 152.00 -29.697 + (*,64,24) 152.06 -29.785 + (*,65,24) 152.06 -29.833 + (*,66,24) 152.22 -29.803 + (*,67,24) 152.24 -29.806 + (*,68,24) 152.64 -29.721 + (*,69,24) 152.35 -29.729 + (*,70,24) 152.57 -29.754 + (*, 1,25) 147.49 -29.588 + (*, 2,25) 147.41 -29.726 + (*, 3,25) 147.87 -29.711 + (*, 4,25) 147.67 -29.635 + (*, 5,25) 147.76 -29.555 + (*, 6,25) 147.93 -29.634 + (*, 7,25) 147.83 -29.631 + (*, 8,25) 148.01 -29.611 + (*, 9,25) 148.08 -29.710 + (*,10,25) 148.14 -29.676 + (*,11,25) 148.25 -29.683 + (*,12,25) 148.43 -29.682 + (*,13,25) 148.57 -29.745 + (*,14,25) 148.40 -29.625 + (*,15,25) 148.77 -29.647 + (*,16,25) 148.58 -29.697 + (*,17,25) 148.82 -29.767 + (*,18,25) 148.60 -29.699 + (*,19,25) 148.87 -29.709 + (*,20,25) 148.96 -29.767 + (*,21,25) 148.93 -29.724 + (*,22,25) 148.98 -29.636 + (*,23,25) 149.13 -29.673 + (*,24,25) 149.23 -29.645 + (*,25,25) 149.24 -29.687 + (*,26,25) 149.27 -29.739 + (*,27,25) 149.47 -29.724 + (*,28,25) 149.45 -29.703 + (*,29,25) 149.71 -29.681 + (*,30,25) 149.55 -29.733 + (*,31,25) 149.61 -29.685 + (*,32,25) 149.77 -29.672 + (*,33,25) 149.93 -29.742 + (*,34,25) 149.84 -29.619 + (*,35,25) 149.88 -29.706 + (*,36,25) 149.76 -29.726 + (*,37,25) 150.04 -29.593 + (*,38,25) 150.21 -29.675 + (*,39,25) 150.33 -29.652 + (*,40,25) 150.43 -29.671 + (*,41,25) 150.45 -29.659 + (*,42,25) 150.50 -29.695 + (*,43,25) 150.68 -29.681 + (*,44,25) 150.49 -29.595 + (*,45,25) 150.76 -29.670 + (*,46,25) 150.81 -29.676 + (*,47,25) 150.94 -29.690 + (*,48,25) 150.98 -29.588 + (*,49,25) 151.10 -29.647 + (*,50,25) 151.22 -29.615 + (*,51,25) 151.22 -29.643 + (*,52,25) 151.16 -29.704 + (*,53,25) 151.37 -29.584 + (*,54,25) 151.51 -29.609 + (*,55,25) 151.45 -29.659 + (*,56,25) 151.63 -29.581 + (*,57,25) 151.39 -29.677 + (*,58,25) 151.47 -29.700 + (*,59,25) 151.60 -29.744 + (*,60,25) 151.77 -29.715 + (*,61,25) 151.87 -29.664 + (*,62,25) 151.77 -29.683 + (*,63,25) 152.03 -29.660 + (*,64,25) 152.00 -29.622 + (*,65,25) 152.08 -29.636 + (*,66,25) 152.12 -29.726 + (*,67,25) 152.31 -29.605 + (*,68,25) 152.39 -29.731 + (*,69,25) 152.35 -29.638 + (*,70,25) 152.47 -29.664 + (*, 1,26) 147.47 -29.596 + (*, 2,26) 147.43 -29.489 + (*, 3,26) 147.79 -29.587 + (*, 4,26) 147.87 -29.644 + (*, 5,26) 147.68 -29.542 + (*, 6,26) 147.82 -29.536 + (*, 7,26) 147.80 -29.542 + (*, 8,26) 147.97 -29.564 + (*, 9,26) 148.27 -29.592 + (*,10,26) 148.24 -29.583 + (*,11,26) 148.18 -29.664 + (*,12,26) 148.23 -29.528 + (*,13,26) 148.52 -29.576 + (*,14,26) 148.54 -29.499 + (*,15,26) 148.54 -29.516 + (*,16,26) 148.60 -29.575 + (*,17,26) 148.70 -29.643 + (*,18,26) 148.92 -29.617 + (*,19,26) 148.72 -29.617 + (*,20,26) 148.70 -29.608 + (*,21,26) 148.91 -29.653 + (*,22,26) 149.17 -29.564 + (*,23,26) 149.15 -29.537 + (*,24,26) 149.30 -29.662 + (*,25,26) 149.24 -29.647 + (*,26,26) 149.15 -29.570 + (*,27,26) 149.59 -29.537 + (*,28,26) 149.52 -29.590 + (*,29,26) 149.48 -29.627 + (*,30,26) 149.50 -29.632 + (*,31,26) 149.87 -29.646 + (*,32,26) 149.80 -29.527 + (*,33,26) 149.79 -29.614 + (*,34,26) 149.94 -29.606 + (*,35,26) 149.98 -29.572 + (*,36,26) 149.93 -29.623 + (*,37,26) 150.11 -29.583 + (*,38,26) 150.14 -29.609 + (*,39,26) 150.26 -29.647 + (*,40,26) 150.32 -29.513 + (*,41,26) 150.00 -29.557 + (*,42,26) 150.47 -29.545 + (*,43,26) 150.48 -29.619 + (*,44,26) 150.62 -29.539 + (*,45,26) 150.77 -29.553 + (*,46,26) 150.60 -29.525 + (*,47,26) 150.91 -29.656 + (*,48,26) 150.90 -29.674 + (*,49,26) 150.89 -29.663 + (*,50,26) 151.05 -29.654 + (*,51,26) 151.31 -29.600 + (*,52,26) 151.27 -29.691 + (*,53,26) 151.12 -29.661 + (*,54,26) 151.41 -29.595 + (*,55,26) 151.25 -29.587 + (*,56,26) 151.58 -29.565 + (*,57,26) 151.49 -29.534 + (*,58,26) 151.62 -29.618 + (*,59,26) 151.65 -29.561 + (*,60,26) 151.81 -29.601 + (*,61,26) 151.84 -29.642 + (*,62,26) 151.79 -29.586 + (*,63,26) 151.94 -29.565 + (*,64,26) 152.08 -29.627 + (*,65,26) 152.00 -29.618 + (*,66,26) 152.03 -29.569 + (*,67,26) 152.30 -29.586 + (*,68,26) 152.10 -29.636 + (*,69,26) 152.38 -29.619 + (*,70,26) 152.67 -29.592 + (*, 1,27) 147.55 -29.626 + (*, 2,27) 147.45 -29.567 + (*, 3,27) 147.44 -29.581 + (*, 4,27) 147.64 -29.599 + (*, 5,27) 147.66 -29.553 + (*, 6,27) 147.91 -29.592 + (*, 7,27) 147.92 -29.564 + (*, 8,27) 147.97 -29.483 + (*, 9,27) 148.10 -29.527 + (*,10,27) 148.19 -29.570 + (*,11,27) 148.36 -29.464 + (*,12,27) 148.25 -29.555 + (*,13,27) 148.39 -29.535 + (*,14,27) 148.41 -29.545 + (*,15,27) 148.75 -29.498 + (*,16,27) 148.66 -29.580 + (*,17,27) 148.74 -29.447 + (*,18,27) 148.67 -29.529 + (*,19,27) 148.73 -29.535 + (*,20,27) 148.74 -29.538 + (*,21,27) 148.88 -29.521 + (*,22,27) 149.07 -29.538 + (*,23,27) 148.98 -29.484 + (*,24,27) 149.23 -29.528 + (*,25,27) 149.33 -29.472 + (*,26,27) 149.42 -29.595 + (*,27,27) 149.46 -29.416 + (*,28,27) 149.43 -29.526 + (*,29,27) 149.37 -29.489 + (*,30,27) 149.43 -29.558 + (*,31,27) 149.64 -29.604 + (*,32,27) 149.64 -29.441 + (*,33,27) 149.83 -29.510 + (*,34,27) 150.00 -29.337 + (*,35,27) 149.85 -29.565 + (*,36,27) 150.04 -29.506 + (*,37,27) 149.91 -29.481 + (*,38,27) 150.31 -29.525 + (*,39,27) 150.29 -29.483 + (*,40,27) 150.40 -29.517 + (*,41,27) 150.28 -29.526 + (*,42,27) 150.46 -29.524 + (*,43,27) 150.52 -29.569 + (*,44,27) 150.69 -29.584 + (*,45,27) 150.73 -29.413 + (*,46,27) 150.74 -29.446 + (*,47,27) 150.66 -29.579 + (*,48,27) 151.02 -29.586 + (*,49,27) 150.97 -29.522 + (*,50,27) 150.95 -29.529 + (*,51,27) 151.21 -29.446 + (*,52,27) 151.13 -29.464 + (*,53,27) 151.29 -29.555 + (*,54,27) 151.30 -29.492 + (*,55,27) 151.40 -29.525 + (*,56,27) 151.32 -29.622 + (*,57,27) 151.49 -29.626 + (*,58,27) 151.81 -29.542 + (*,59,27) 151.65 -29.543 + (*,60,27) 151.87 -29.584 + (*,61,27) 151.74 -29.591 + (*,62,27) 151.84 -29.460 + (*,63,27) 151.94 -29.557 + (*,64,27) 151.96 -29.463 + (*,65,27) 152.04 -29.577 + (*,66,27) 152.36 -29.566 + (*,67,27) 152.29 -29.547 + (*,68,27) 152.36 -29.529 + (*,69,27) 152.50 -29.522 + (*,70,27) 152.53 -29.592 + (*, 1,28) 147.51 -29.455 + (*, 2,28) 147.40 -29.469 + (*, 3,28) 147.51 -29.425 + (*, 4,28) 147.79 -29.464 + (*, 5,28) 147.84 -29.464 + (*, 6,28) 147.84 -29.447 + (*, 7,28) 147.99 -29.409 + (*, 8,28) 148.13 -29.506 + (*, 9,28) 148.22 -29.495 + (*,10,28) 148.09 -29.406 + (*,11,28) 148.07 -29.443 + (*,12,28) 148.17 -29.412 + (*,13,28) 148.51 -29.469 + (*,14,28) 148.37 -29.453 + (*,15,28) 148.30 -29.519 + (*,16,28) 148.58 -29.496 + (*,17,28) 148.75 -29.461 + (*,18,28) 148.85 -29.452 + (*,19,28) 148.73 -29.449 + (*,20,28) 148.86 -29.509 + (*,21,28) 148.96 -29.523 + (*,22,28) 149.17 -29.420 + (*,23,28) 149.05 -29.400 + (*,24,28) 149.12 -29.468 + (*,25,28) 149.12 -29.455 + (*,26,28) 149.43 -29.505 + (*,27,28) 149.43 -29.507 + (*,28,28) 149.24 -29.516 + (*,29,28) 149.48 -29.420 + (*,30,28) 149.52 -29.441 + (*,31,28) 149.83 -29.388 + (*,32,28) 149.79 -29.423 + (*,33,28) 149.78 -29.376 + (*,34,28) 150.06 -29.536 + (*,35,28) 149.89 -29.553 + (*,36,28) 150.11 -29.345 + (*,37,28) 150.08 -29.354 + (*,38,28) 150.06 -29.559 + (*,39,28) 150.24 -29.498 + (*,40,28) 150.31 -29.498 + (*,41,28) 150.29 -29.502 + (*,42,28) 150.36 -29.483 + (*,43,28) 150.48 -29.449 + (*,44,28) 150.50 -29.477 + (*,45,28) 150.64 -29.494 + (*,46,28) 150.62 -29.447 + (*,47,28) 150.85 -29.420 + (*,48,28) 150.83 -29.464 + (*,49,28) 150.89 -29.487 + (*,50,28) 150.98 -29.472 + (*,51,28) 151.25 -29.471 + (*,52,28) 151.19 -29.472 + (*,53,28) 151.21 -29.506 + (*,54,28) 151.36 -29.473 + (*,55,28) 151.48 -29.441 + (*,56,28) 151.72 -29.404 + (*,57,28) 151.30 -29.423 + (*,58,28) 151.60 -29.473 + (*,59,28) 151.60 -29.431 + (*,60,28) 151.90 -29.425 + (*,61,28) 151.80 -29.472 + (*,62,28) 152.05 -29.482 + (*,63,28) 151.80 -29.482 + (*,64,28) 152.22 -29.427 + (*,65,28) 152.07 -29.526 + (*,66,28) 152.37 -29.400 + (*,67,28) 152.33 -29.347 + (*,68,28) 152.24 -29.389 + (*,69,28) 152.42 -29.414 + (*,70,28) 152.39 -29.523 + (*, 1,29) 147.67 -29.379 + (*, 2,29) 147.73 -29.380 + (*, 3,29) 147.54 -29.306 + (*, 4,29) 147.84 -29.454 + (*, 5,29) 147.70 -29.444 + (*, 6,29) 147.81 -29.325 + (*, 7,29) 148.04 -29.364 + (*, 8,29) 147.99 -29.397 + (*, 9,29) 148.19 -29.405 + (*,10,29) 148.11 -29.263 + (*,11,29) 148.18 -29.345 + (*,12,29) 148.32 -29.382 + (*,13,29) 148.33 -29.380 + (*,14,29) 148.29 -29.440 + (*,15,29) 148.49 -29.360 + (*,16,29) 148.65 -29.463 + (*,17,29) 148.57 -29.336 + (*,18,29) 148.59 -29.356 + (*,19,29) 148.75 -29.405 + (*,20,29) 148.79 -29.376 + (*,21,29) 148.97 -29.347 + (*,22,29) 149.08 -29.303 + (*,23,29) 149.14 -29.457 + (*,24,29) 149.24 -29.299 + (*,25,29) 149.31 -29.332 + (*,26,29) 149.19 -29.365 + (*,27,29) 149.27 -29.369 + (*,28,29) 149.49 -29.318 + (*,29,29) 149.58 -29.387 + (*,30,29) 149.49 -29.402 + (*,31,29) 149.66 -29.371 + (*,32,29) 149.71 -29.382 + (*,33,29) 149.94 -29.363 + (*,34,29) 150.12 -29.427 + (*,35,29) 149.96 -29.405 + (*,36,29) 149.97 -29.367 + (*,37,29) 150.18 -29.317 + (*,38,29) 150.21 -29.375 + (*,39,29) 150.30 -29.413 + (*,40,29) 150.16 -29.362 + (*,41,29) 150.52 -29.334 + (*,42,29) 150.42 -29.354 + (*,43,29) 150.67 -29.362 + (*,44,29) 150.56 -29.393 + (*,45,29) 150.59 -29.437 + (*,46,29) 150.79 -29.388 + (*,47,29) 150.88 -29.436 + (*,48,29) 150.81 -29.446 + (*,49,29) 151.10 -29.428 + (*,50,29) 150.81 -29.376 + (*,51,29) 151.30 -29.279 + (*,52,29) 151.25 -29.324 + (*,53,29) 151.28 -29.441 + (*,54,29) 151.37 -29.418 + (*,55,29) 151.61 -29.241 + (*,56,29) 151.55 -29.345 + (*,57,29) 151.52 -29.470 + (*,58,29) 151.35 -29.233 + (*,59,29) 151.78 -29.365 + (*,60,29) 151.77 -29.356 + (*,61,29) 151.87 -29.406 + (*,62,29) 152.20 -29.512 + (*,63,29) 152.12 -29.280 + (*,64,29) 152.01 -29.380 + (*,65,29) 152.24 -29.411 + (*,66,29) 152.22 -29.409 + (*,67,29) 152.13 -29.309 + (*,68,29) 152.30 -29.419 + (*,69,29) 152.44 -29.347 + (*,70,29) 152.65 -29.359 + (*, 1,30) 147.54 -29.354 + (*, 2,30) 147.51 -29.205 + (*, 3,30) 147.73 -29.297 + (*, 4,30) 147.71 -29.300 + (*, 5,30) 147.73 -29.320 + (*, 6,30) 147.96 -29.284 + (*, 7,30) 147.93 -29.367 + (*, 8,30) 147.99 -29.150 + (*, 9,30) 148.13 -29.299 + (*,10,30) 148.35 -29.277 + (*,11,30) 148.27 -29.274 + (*,12,30) 148.39 -29.329 + (*,13,30) 148.50 -29.255 + (*,14,30) 148.38 -29.298 + (*,15,30) 148.56 -29.344 + (*,16,30) 148.61 -29.353 + (*,17,30) 148.85 -29.347 + (*,18,30) 148.72 -29.317 + (*,19,30) 148.84 -29.292 + (*,20,30) 148.87 -29.368 + (*,21,30) 148.96 -29.365 + (*,22,30) 148.97 -29.241 + (*,23,30) 149.11 -29.366 + (*,24,30) 148.98 -29.241 + (*,25,30) 149.38 -29.266 + (*,26,30) 149.29 -29.368 + (*,27,30) 149.32 -29.379 + (*,28,30) 149.42 -29.365 + (*,29,30) 149.57 -29.311 + (*,30,30) 149.60 -29.346 + (*,31,30) 149.82 -29.308 + (*,32,30) 149.66 -29.415 + (*,33,30) 149.80 -29.348 + (*,34,30) 149.76 -29.327 + (*,35,30) 149.98 -29.302 + (*,36,30) 149.99 -29.325 + (*,37,30) 150.13 -29.326 + (*,38,30) 150.25 -29.323 + (*,39,30) 150.22 -29.238 + (*,40,30) 150.33 -29.203 + (*,41,30) 150.43 -29.302 + (*,42,30) 150.43 -29.323 + (*,43,30) 150.51 -29.366 + (*,44,30) 150.47 -29.272 + (*,45,30) 150.66 -29.331 + (*,46,30) 150.81 -29.250 + (*,47,30) 150.91 -29.273 + (*,48,30) 151.16 -29.343 + (*,49,30) 150.89 -29.273 + (*,50,30) 151.05 -29.371 + (*,51,30) 151.23 -29.285 + (*,52,30) 151.07 -29.322 + (*,53,30) 151.39 -29.293 + (*,54,30) 151.31 -29.284 + (*,55,30) 151.43 -29.394 + (*,56,30) 151.49 -29.284 + (*,57,30) 151.53 -29.322 + (*,58,30) 151.55 -29.239 + (*,59,30) 151.68 -29.299 + (*,60,30) 151.84 -29.309 + (*,61,30) 152.05 -29.271 + (*,62,30) 152.08 -29.296 + (*,63,30) 151.96 -29.351 + (*,64,30) 152.02 -29.265 + (*,65,30) 152.10 -29.250 + (*,66,30) 152.18 -29.329 + (*,67,30) 152.17 -29.274 + (*,68,30) 152.30 -29.371 + (*,69,30) 152.41 -29.323 + (*,70,30) 152.47 -29.338 + (*, 1,31) 147.44 -29.348 + (*, 2,31) 147.30 -29.201 + (*, 3,31) 147.69 -29.290 + (*, 4,31) 147.83 -29.210 + (*, 5,31) 147.81 -29.217 + (*, 6,31) 147.88 -29.288 + (*, 7,31) 148.13 -29.257 + (*, 8,31) 148.21 -29.176 + (*, 9,31) 148.06 -29.182 + (*,10,31) 148.17 -29.215 + (*,11,31) 148.26 -29.291 + (*,12,31) 148.31 -29.153 + (*,13,31) 148.33 -29.224 + (*,14,31) 148.44 -29.286 + (*,15,31) 148.56 -29.158 + (*,16,31) 148.42 -29.208 + (*,17,31) 148.64 -29.288 + (*,18,31) 148.66 -29.231 + (*,19,31) 148.67 -29.172 + (*,20,31) 148.85 -29.232 + (*,21,31) 148.98 -29.188 + (*,22,31) 149.05 -29.267 + (*,23,31) 149.06 -29.186 + (*,24,31) 149.17 -29.284 + (*,25,31) 149.09 -29.231 + (*,26,31) 149.27 -29.188 + (*,27,31) 149.34 -29.190 + (*,28,31) 149.62 -29.221 + (*,29,31) 149.40 -29.238 + (*,30,31) 149.68 -29.225 + (*,31,31) 149.96 -29.212 + (*,32,31) 149.76 -29.238 + (*,33,31) 149.69 -29.209 + (*,34,31) 149.76 -29.240 + (*,35,31) 149.83 -29.154 + (*,36,31) 150.25 -29.227 + (*,37,31) 150.17 -29.227 + (*,38,31) 150.12 -29.269 + (*,39,31) 150.34 -29.199 + (*,40,31) 150.48 -29.248 + (*,41,31) 150.46 -29.224 + (*,42,31) 150.46 -29.157 + (*,43,31) 150.48 -29.206 + (*,44,31) 150.65 -29.224 + (*,45,31) 150.73 -29.219 + (*,46,31) 150.69 -29.176 + (*,47,31) 150.79 -29.268 + (*,48,31) 150.82 -29.280 + (*,49,31) 150.93 -29.246 + (*,50,31) 151.05 -29.210 + (*,51,31) 151.14 -29.292 + (*,52,31) 150.94 -29.141 + (*,53,31) 151.38 -29.200 + (*,54,31) 151.17 -29.180 + (*,55,31) 151.31 -29.178 + (*,56,31) 151.50 -29.186 + (*,57,31) 151.44 -29.284 + (*,58,31) 151.76 -29.230 + (*,59,31) 151.60 -29.247 + (*,60,31) 151.90 -29.214 + (*,61,31) 151.75 -29.288 + (*,62,31) 152.12 -29.154 + (*,63,31) 151.96 -29.304 + (*,64,31) 152.11 -29.224 + (*,65,31) 152.27 -29.256 + (*,66,31) 152.43 -29.223 + (*,67,31) 152.26 -29.266 + (*,68,31) 152.41 -29.200 + (*,69,31) 152.50 -29.252 + (*,70,31) 152.58 -29.376 + (*, 1,32) 147.51 -29.103 + (*, 2,32) 147.53 -29.177 + (*, 3,32) 147.77 -29.133 + (*, 4,32) 147.86 -29.101 + (*, 5,32) 147.67 -29.130 + (*, 6,32) 147.92 -29.121 + (*, 7,32) 147.96 -29.240 + (*, 8,32) 147.99 -29.117 + (*, 9,32) 148.14 -29.240 + (*,10,32) 148.28 -29.184 + (*,11,32) 148.19 -29.119 + (*,12,32) 148.22 -29.198 + (*,13,32) 148.35 -29.140 + (*,14,32) 148.46 -29.143 + (*,15,32) 148.62 -29.107 + (*,16,32) 148.65 -29.153 + (*,17,32) 148.78 -29.234 + (*,18,32) 148.73 -29.192 + (*,19,32) 148.84 -29.045 + (*,20,32) 148.85 -29.208 + (*,21,32) 148.94 -29.189 + (*,22,32) 149.13 -29.089 + (*,23,32) 149.20 -29.117 + (*,24,32) 149.06 -29.117 + (*,25,32) 149.23 -29.163 + (*,26,32) 149.30 -29.183 + (*,27,32) 149.36 -29.171 + (*,28,32) 149.38 -29.165 + (*,29,32) 149.65 -29.240 + (*,30,32) 149.72 -29.120 + (*,31,32) 149.54 -29.090 + (*,32,32) 150.02 -29.231 + (*,33,32) 149.69 -29.147 + (*,34,32) 149.94 -29.226 + (*,35,32) 150.06 -29.142 + (*,36,32) 149.92 -29.168 + (*,37,32) 150.16 -29.112 + (*,38,32) 150.12 -29.128 + (*,39,32) 150.23 -29.134 + (*,40,32) 150.30 -29.161 + (*,41,32) 150.51 -29.161 + (*,42,32) 150.27 -29.070 + (*,43,32) 150.61 -29.208 + (*,44,32) 150.60 -29.181 + (*,45,32) 150.64 -29.166 + (*,46,32) 150.91 -29.164 + (*,47,32) 150.74 -29.120 + (*,48,32) 150.96 -29.189 + (*,49,32) 150.96 -29.150 + (*,50,32) 150.86 -29.203 + (*,51,32) 151.00 -29.165 + (*,52,32) 151.24 -29.207 + (*,53,32) 151.23 -29.170 + (*,54,32) 151.33 -29.226 + (*,55,32) 151.47 -29.012 + (*,56,32) 151.47 -29.149 + (*,57,32) 151.48 -29.246 + (*,58,32) 151.50 -29.137 + (*,59,32) 151.94 -29.182 + (*,60,32) 151.68 -29.255 + (*,61,32) 151.85 -29.168 + (*,62,32) 151.73 -29.183 + (*,63,32) 152.06 -29.163 + (*,64,32) 152.07 -29.165 + (*,65,32) 152.23 -29.170 + (*,66,32) 152.15 -29.109 + (*,67,32) 152.25 -29.205 + (*,68,32) 152.23 -29.103 + (*,69,32) 152.54 -29.228 + (*,70,32) 152.44 -29.217 + (*, 1,33) 147.41 -29.112 + (*, 2,33) 147.62 -29.066 + (*, 3,33) 147.53 -29.130 + (*, 4,33) 147.88 -29.072 + (*, 5,33) 147.86 -29.058 + (*, 6,33) 147.70 -29.122 + (*, 7,33) 148.03 -29.101 + (*, 8,33) 148.08 -29.085 + (*, 9,33) 148.12 -29.088 + (*,10,33) 148.21 -29.049 + (*,11,33) 148.15 -29.110 + (*,12,33) 148.37 -29.083 + (*,13,33) 148.30 -29.173 + (*,14,33) 148.41 -29.107 + (*,15,33) 148.64 -29.126 + (*,16,33) 148.60 -29.045 + (*,17,33) 148.62 -29.028 + (*,18,33) 148.67 -29.086 + (*,19,33) 148.80 -29.098 + (*,20,33) 148.88 -29.114 + (*,21,33) 148.88 -29.055 + (*,22,33) 149.06 -29.078 + (*,23,33) 148.88 -29.096 + (*,24,33) 149.30 -28.991 + (*,25,33) 149.19 -28.978 + (*,26,33) 149.46 -29.068 + (*,27,33) 149.42 -29.134 + (*,28,33) 149.76 -29.087 + (*,29,33) 149.50 -29.127 + (*,30,33) 149.47 -29.095 + (*,31,33) 149.67 -29.161 + (*,32,33) 149.96 -29.120 + (*,33,33) 149.71 -29.000 + (*,34,33) 149.93 -29.092 + (*,35,33) 150.14 -29.066 + (*,36,33) 150.23 -29.167 + (*,37,33) 150.19 -29.076 + (*,38,33) 150.14 -29.052 + (*,39,33) 150.41 -29.074 + (*,40,33) 150.27 -29.055 + (*,41,33) 150.46 -29.104 + (*,42,33) 150.58 -29.053 + (*,43,33) 150.68 -29.018 + (*,44,33) 150.49 -28.963 + (*,45,33) 150.74 -29.094 + (*,46,33) 150.72 -29.091 + (*,47,33) 150.74 -29.065 + (*,48,33) 151.16 -29.076 + (*,49,33) 150.90 -29.174 + (*,50,33) 151.01 -28.963 + (*,51,33) 151.05 -29.123 + (*,52,33) 151.23 -29.042 + (*,53,33) 151.24 -29.051 + (*,54,33) 151.34 -29.071 + (*,55,33) 151.57 -29.057 + (*,56,33) 151.33 -29.123 + (*,57,33) 151.61 -29.113 + (*,58,33) 151.49 -29.068 + (*,59,33) 151.76 -29.042 + (*,60,33) 151.67 -29.104 + (*,61,33) 151.84 -29.102 + (*,62,33) 151.99 -29.209 + (*,63,33) 152.02 -29.072 + (*,64,33) 152.07 -29.082 + (*,65,33) 152.03 -29.054 + (*,66,33) 152.27 -29.083 + (*,67,33) 152.24 -29.109 + (*,68,33) 152.52 -29.081 + (*,69,33) 152.24 -29.142 + (*,70,33) 152.56 -29.059 + (*, 1,34) 147.48 -28.936 + (*, 2,34) 147.57 -28.980 + (*, 3,34) 147.60 -28.902 + (*, 4,34) 147.93 -29.067 + (*, 5,34) 147.66 -29.049 + (*, 6,34) 147.87 -29.021 + (*, 7,34) 147.79 -28.983 + (*, 8,34) 148.13 -29.062 + (*, 9,34) 148.22 -29.044 + (*,10,34) 147.96 -29.022 + (*,11,34) 148.15 -29.075 + (*,12,34) 148.34 -28.984 + (*,13,34) 148.32 -28.905 + (*,14,34) 148.43 -28.931 + (*,15,34) 148.54 -28.931 + (*,16,34) 148.61 -29.024 + (*,17,34) 148.52 -28.956 + (*,18,34) 148.64 -29.003 + (*,19,34) 148.76 -28.932 + (*,20,34) 148.89 -29.073 + (*,21,34) 149.08 -28.934 + (*,22,34) 149.05 -29.050 + (*,23,34) 149.00 -29.011 + (*,24,34) 149.41 -28.983 + (*,25,34) 149.35 -28.909 + (*,26,34) 149.42 -28.986 + (*,27,34) 149.29 -29.065 + (*,28,34) 149.41 -28.926 + (*,29,34) 149.56 -29.040 + (*,30,34) 149.56 -28.999 + (*,31,34) 149.62 -29.093 + (*,32,34) 149.88 -29.023 + (*,33,34) 149.83 -28.989 + (*,34,34) 149.94 -29.057 + (*,35,34) 149.98 -29.000 + (*,36,34) 150.15 -29.067 + (*,37,34) 149.93 -29.085 + (*,38,34) 150.19 -29.042 + (*,39,34) 150.09 -28.950 + (*,40,34) 150.45 -29.011 + (*,41,34) 150.43 -28.993 + (*,42,34) 150.51 -28.985 + (*,43,34) 150.42 -29.041 + (*,44,34) 150.46 -29.062 + (*,45,34) 150.61 -29.031 + (*,46,34) 150.56 -29.024 + (*,47,34) 150.65 -29.033 + (*,48,34) 150.81 -29.008 + (*,49,34) 150.90 -29.023 + (*,50,34) 150.91 -29.015 + (*,51,34) 151.24 -28.951 + (*,52,34) 151.06 -29.151 + (*,53,34) 151.34 -29.050 + (*,54,34) 151.18 -29.028 + (*,55,34) 151.32 -29.132 + (*,56,34) 151.59 -28.973 + (*,57,34) 151.58 -28.975 + (*,58,34) 151.62 -29.043 + (*,59,34) 151.73 -29.054 + (*,60,34) 151.79 -29.059 + (*,61,34) 151.91 -29.021 + (*,62,34) 151.95 -28.984 + (*,63,34) 151.95 -28.965 + (*,64,34) 152.09 -29.009 + (*,65,34) 152.06 -28.944 + (*,66,34) 152.21 -28.955 + (*,67,34) 152.18 -29.042 + (*,68,34) 152.36 -29.004 + (*,69,34) 152.51 -29.079 + (*,70,34) 152.42 -29.004 + (*, 1,35) 147.72 -28.939 + (*, 2,35) 147.58 -28.910 + (*, 3,35) 147.66 -28.955 + (*, 4,35) 147.70 -28.916 + (*, 5,35) 147.77 -28.984 + (*, 6,35) 147.99 -28.896 + (*, 7,35) 147.85 -28.899 + (*, 8,35) 147.91 -28.938 + (*, 9,35) 148.03 -29.003 + (*,10,35) 148.15 -28.981 + (*,11,35) 148.12 -28.943 + (*,12,35) 148.23 -28.885 + (*,13,35) 148.51 -28.968 + (*,14,35) 148.56 -28.977 + (*,15,35) 148.35 -28.934 + (*,16,35) 148.53 -28.942 + (*,17,35) 148.82 -28.939 + (*,18,35) 148.82 -29.008 + (*,19,35) 148.51 -28.907 + (*,20,35) 149.03 -28.932 + (*,21,35) 148.95 -29.030 + (*,22,35) 148.96 -28.915 + (*,23,35) 149.00 -28.902 + (*,24,35) 149.16 -28.926 + (*,25,35) 149.17 -28.906 + (*,26,35) 149.26 -28.909 + (*,27,35) 149.42 -28.913 + (*,28,35) 149.37 -29.006 + (*,29,35) 149.48 -28.971 + (*,30,35) 149.84 -28.924 + (*,31,35) 149.72 -28.957 + (*,32,35) 149.76 -28.917 + (*,33,35) 149.77 -28.927 + (*,34,35) 150.15 -28.990 + (*,35,35) 149.96 -28.959 + (*,36,35) 149.85 -28.903 + (*,37,35) 150.00 -28.903 + (*,38,35) 150.31 -28.887 + (*,39,35) 150.18 -28.955 + (*,40,35) 150.31 -29.031 + (*,41,35) 150.43 -28.919 + (*,42,35) 150.48 -28.918 + (*,43,35) 150.51 -28.888 + (*,44,35) 150.60 -28.948 + (*,45,35) 150.63 -28.779 + (*,46,35) 150.78 -28.913 + (*,47,35) 150.90 -28.906 + (*,48,35) 150.72 -28.972 + (*,49,35) 151.06 -28.903 + (*,50,35) 151.16 -28.898 + (*,51,35) 151.14 -28.910 + (*,52,35) 151.27 -29.012 + (*,53,35) 151.26 -28.903 + (*,54,35) 151.44 -28.845 + (*,55,35) 151.30 -28.955 + (*,56,35) 151.50 -29.015 + (*,57,35) 151.58 -28.962 + (*,58,35) 151.67 -28.923 + (*,59,35) 151.75 -28.904 + (*,60,35) 151.79 -28.862 + (*,61,35) 151.78 -28.920 + (*,62,35) 151.84 -28.997 + (*,63,35) 151.93 -28.909 + (*,64,35) 152.08 -28.879 + (*,65,35) 152.27 -28.992 + (*,66,35) 152.08 -28.922 + (*,67,35) 152.17 -28.980 + (*,68,35) 152.48 -28.972 + (*,69,35) 152.68 -28.955 + (*,70,35) 152.63 -28.878 + (*, 1,36) 147.63 -28.854 + (*, 2,36) 147.59 -28.949 + (*, 3,36) 147.61 -28.823 + (*, 4,36) 147.47 -28.847 + (*, 5,36) 147.90 -28.897 + (*, 6,36) 147.90 -28.861 + (*, 7,36) 147.93 -28.885 + (*, 8,36) 148.01 -28.841 + (*, 9,36) 148.24 -28.920 + (*,10,36) 148.10 -28.849 + (*,11,36) 148.18 -28.966 + (*,12,36) 148.29 -28.884 + (*,13,36) 148.29 -28.932 + (*,14,36) 148.46 -28.860 + (*,15,36) 148.55 -28.786 + (*,16,36) 148.72 -28.845 + (*,17,36) 148.68 -28.926 + (*,18,36) 148.71 -28.905 + (*,19,36) 148.73 -28.889 + (*,20,36) 148.84 -28.824 + (*,21,36) 149.06 -28.928 + (*,22,36) 149.14 -28.802 + (*,23,36) 149.17 -28.878 + (*,24,36) 149.15 -28.825 + (*,25,36) 149.33 -28.872 + (*,26,36) 149.37 -28.895 + (*,27,36) 149.32 -28.879 + (*,28,36) 149.52 -28.821 + (*,29,36) 149.54 -28.832 + (*,30,36) 149.67 -28.806 + (*,31,36) 149.67 -28.893 + (*,32,36) 149.61 -28.914 + (*,33,36) 149.77 -28.888 + (*,34,36) 150.02 -28.803 + (*,35,36) 149.92 -28.907 + (*,36,36) 150.07 -28.837 + (*,37,36) 150.09 -28.851 + (*,38,36) 150.21 -28.801 + (*,39,36) 150.31 -28.902 + (*,40,36) 150.33 -28.896 + (*,41,36) 150.61 -28.895 + (*,42,36) 150.56 -28.895 + (*,43,36) 150.35 -28.873 + (*,44,36) 150.55 -28.878 + (*,45,36) 150.80 -28.818 + (*,46,36) 150.72 -28.897 + (*,47,36) 150.75 -28.819 + (*,48,36) 151.09 -28.866 + (*,49,36) 150.71 -28.841 + (*,50,36) 151.20 -28.797 + (*,51,36) 151.05 -28.905 + (*,52,36) 151.31 -28.816 + (*,53,36) 151.28 -28.908 + (*,54,36) 151.23 -28.867 + (*,55,36) 151.38 -28.817 + (*,56,36) 151.63 -28.756 + (*,57,36) 151.55 -28.821 + (*,58,36) 151.56 -28.836 + (*,59,36) 151.63 -28.926 + (*,60,36) 151.75 -28.848 + (*,61,36) 151.82 -28.829 + (*,62,36) 151.91 -28.866 + (*,63,36) 152.18 -28.871 + (*,64,36) 152.19 -28.858 + (*,65,36) 152.14 -28.853 + (*,66,36) 152.15 -28.819 + (*,67,36) 152.23 -28.892 + (*,68,36) 152.38 -28.878 + (*,69,36) 152.39 -28.881 + (*,70,36) 152.56 -28.919 + (*, 1,37) 147.52 -28.753 + (*, 2,37) 147.56 -28.792 + (*, 3,37) 147.61 -28.780 + (*, 4,37) 147.77 -28.913 + (*, 5,37) 147.81 -28.767 + (*, 6,37) 147.56 -28.758 + (*, 7,37) 148.01 -28.900 + (*, 8,37) 147.96 -28.793 + (*, 9,37) 147.93 -28.818 + (*,10,37) 148.37 -28.791 + (*,11,37) 148.29 -28.790 + (*,12,37) 148.42 -28.781 + (*,13,37) 148.40 -28.805 + (*,14,37) 148.27 -28.849 + (*,15,37) 148.39 -28.745 + (*,16,37) 148.53 -28.796 + (*,17,37) 148.56 -28.813 + (*,18,37) 148.54 -28.774 + (*,19,37) 148.88 -28.817 + (*,20,37) 148.97 -28.765 + (*,21,37) 148.88 -28.747 + (*,22,37) 149.00 -28.786 + (*,23,37) 149.05 -28.823 + (*,24,37) 149.16 -28.795 + (*,25,37) 149.37 -28.763 + (*,26,37) 149.33 -28.803 + (*,27,37) 149.44 -28.898 + (*,28,37) 149.54 -28.804 + (*,29,37) 149.35 -28.911 + (*,30,37) 149.72 -28.719 + (*,31,37) 149.61 -28.958 + (*,32,37) 149.56 -28.814 + (*,33,37) 149.77 -28.770 + (*,34,37) 149.91 -28.758 + (*,35,37) 149.96 -28.789 + (*,36,37) 150.06 -28.805 + (*,37,37) 150.00 -28.769 + (*,38,37) 150.16 -28.737 + (*,39,37) 150.38 -28.800 + (*,40,37) 150.24 -28.800 + (*,41,37) 150.29 -28.828 + (*,42,37) 150.55 -28.785 + (*,43,37) 150.55 -28.847 + (*,44,37) 150.53 -28.785 + (*,45,37) 150.66 -28.713 + (*,46,37) 150.86 -28.857 + (*,47,37) 150.85 -28.721 + (*,48,37) 150.85 -28.755 + (*,49,37) 151.00 -28.838 + (*,50,37) 151.02 -28.788 + (*,51,37) 151.00 -28.798 + (*,52,37) 151.21 -28.743 + (*,53,37) 151.37 -28.881 + (*,54,37) 151.28 -28.870 + (*,55,37) 151.58 -28.803 + (*,56,37) 151.33 -28.846 + (*,57,37) 151.54 -28.753 + (*,58,37) 151.59 -28.800 + (*,59,37) 151.83 -28.742 + (*,60,37) 151.76 -28.791 + (*,61,37) 151.93 -28.729 + (*,62,37) 151.82 -28.852 + (*,63,37) 151.87 -28.884 + (*,64,37) 152.18 -28.789 + (*,65,37) 152.25 -28.821 + (*,66,37) 152.11 -28.808 + (*,67,37) 152.36 -28.784 + (*,68,37) 152.39 -28.803 + (*,69,37) 152.60 -28.819 + (*,70,37) 152.58 -28.848 + (*, 1,38) 147.59 -28.752 + (*, 2,38) 147.49 -28.764 + (*, 3,38) 147.62 -28.691 + (*, 4,38) 147.79 -28.706 + (*, 5,38) 147.85 -28.696 + (*, 6,38) 147.78 -28.719 + (*, 7,38) 147.96 -28.831 + (*, 8,38) 148.02 -28.719 + (*, 9,38) 148.11 -28.813 + (*,10,38) 148.23 -28.679 + (*,11,38) 148.26 -28.714 + (*,12,38) 148.21 -28.653 + (*,13,38) 148.37 -28.731 + (*,14,38) 148.46 -28.710 + (*,15,38) 148.49 -28.683 + (*,16,38) 148.40 -28.727 + (*,17,38) 148.71 -28.708 + (*,18,38) 148.88 -28.711 + (*,19,38) 148.90 -28.734 + (*,20,38) 148.78 -28.771 + (*,21,38) 149.02 -28.698 + (*,22,38) 148.98 -28.720 + (*,23,38) 149.03 -28.745 + (*,24,38) 149.19 -28.724 + (*,25,38) 149.20 -28.709 + (*,26,38) 149.39 -28.751 + (*,27,38) 149.23 -28.663 + (*,28,38) 149.44 -28.674 + (*,29,38) 149.42 -28.703 + (*,30,38) 149.57 -28.760 + (*,31,38) 149.52 -28.674 + (*,32,38) 149.86 -28.711 + (*,33,38) 149.89 -28.791 + (*,34,38) 149.86 -28.777 + (*,35,38) 149.81 -28.722 + (*,36,38) 150.12 -28.707 + (*,37,38) 149.94 -28.679 + (*,38,38) 150.26 -28.669 + (*,39,38) 150.24 -28.681 + (*,40,38) 150.42 -28.688 + (*,41,38) 150.36 -28.723 + (*,42,38) 150.70 -28.693 + (*,43,38) 150.46 -28.679 + (*,44,38) 150.46 -28.608 + (*,45,38) 150.80 -28.632 + (*,46,38) 150.83 -28.712 + (*,47,38) 151.00 -28.754 + (*,48,38) 150.91 -28.638 + (*,49,38) 150.81 -28.814 + (*,50,38) 151.05 -28.641 + (*,51,38) 151.02 -28.669 + (*,52,38) 151.08 -28.733 + (*,53,38) 151.18 -28.751 + (*,54,38) 151.30 -28.722 + (*,55,38) 151.19 -28.675 + (*,56,38) 151.46 -28.729 + (*,57,38) 151.72 -28.683 + (*,58,38) 151.71 -28.771 + (*,59,38) 151.63 -28.686 + (*,60,38) 151.87 -28.679 + (*,61,38) 151.87 -28.753 + (*,62,38) 151.97 -28.711 + (*,63,38) 151.92 -28.725 + (*,64,38) 152.05 -28.726 + (*,65,38) 152.21 -28.719 + (*,66,38) 152.14 -28.827 + (*,67,38) 152.38 -28.715 + (*,68,38) 152.52 -28.731 + (*,69,38) 152.53 -28.677 + (*,70,38) 152.44 -28.702 + (*, 1,39) 147.52 -28.680 + (*, 2,39) 147.55 -28.552 + (*, 3,39) 147.67 -28.642 + (*, 4,39) 147.73 -28.607 + (*, 5,39) 147.88 -28.683 + (*, 6,39) 147.77 -28.774 + (*, 7,39) 147.87 -28.633 + (*, 8,39) 148.01 -28.565 + (*, 9,39) 148.27 -28.683 + (*,10,39) 148.18 -28.522 + (*,11,39) 148.08 -28.630 + (*,12,39) 148.28 -28.672 + (*,13,39) 148.50 -28.691 + (*,14,39) 148.44 -28.716 + (*,15,39) 148.46 -28.651 + (*,16,39) 148.70 -28.610 + (*,17,39) 148.78 -28.606 + (*,18,39) 148.63 -28.516 + (*,19,39) 148.74 -28.654 + (*,20,39) 148.65 -28.685 + (*,21,39) 148.82 -28.617 + (*,22,39) 149.04 -28.713 + (*,23,39) 149.11 -28.617 + (*,24,39) 149.12 -28.734 + (*,25,39) 149.26 -28.646 + (*,26,39) 149.24 -28.664 + (*,27,39) 149.37 -28.654 + (*,28,39) 149.34 -28.641 + (*,29,39) 149.47 -28.675 + (*,30,39) 149.61 -28.652 + (*,31,39) 149.48 -28.660 + (*,32,39) 149.69 -28.619 + (*,33,39) 149.85 -28.597 + (*,34,39) 149.73 -28.713 + (*,35,39) 149.96 -28.701 + (*,36,39) 150.15 -28.725 + (*,37,39) 150.08 -28.659 + (*,38,39) 150.02 -28.703 + (*,39,39) 150.26 -28.619 + (*,40,39) 150.42 -28.625 + (*,41,39) 150.23 -28.646 + (*,42,39) 150.48 -28.657 + (*,43,39) 150.48 -28.567 + (*,44,39) 150.64 -28.676 + (*,45,39) 150.73 -28.682 + (*,46,39) 150.73 -28.749 + (*,47,39) 150.84 -28.669 + (*,48,39) 150.89 -28.679 + (*,49,39) 151.08 -28.644 + (*,50,39) 151.01 -28.658 + (*,51,39) 151.22 -28.694 + (*,52,39) 151.14 -28.687 + (*,53,39) 151.47 -28.543 + (*,54,39) 151.42 -28.649 + (*,55,39) 151.42 -28.742 + (*,56,39) 151.33 -28.641 + (*,57,39) 151.37 -28.615 + (*,58,39) 151.58 -28.680 + (*,59,39) 151.72 -28.635 + (*,60,39) 151.97 -28.644 + (*,61,39) 151.91 -28.577 + (*,62,39) 151.81 -28.664 + (*,63,39) 152.01 -28.642 + (*,64,39) 152.24 -28.614 + (*,65,39) 152.05 -28.636 + (*,66,39) 152.23 -28.594 + (*,67,39) 152.30 -28.622 + (*,68,39) 152.41 -28.629 + (*,69,39) 152.40 -28.664 + (*,70,39) 152.45 -28.565 + (*, 1,40) 147.63 -28.520 + (*, 2,40) 147.57 -28.594 + (*, 3,40) 147.71 -28.646 + (*, 4,40) 147.65 -28.523 + (*, 5,40) 147.92 -28.610 + (*, 6,40) 147.90 -28.576 + (*, 7,40) 147.91 -28.569 + (*, 8,40) 148.06 -28.579 + (*, 9,40) 148.11 -28.532 + (*,10,40) 148.26 -28.592 + (*,11,40) 148.16 -28.603 + (*,12,40) 148.44 -28.543 + (*,13,40) 148.43 -28.560 + (*,14,40) 148.53 -28.687 + (*,15,40) 148.73 -28.560 + (*,16,40) 148.52 -28.565 + (*,17,40) 148.51 -28.649 + (*,18,40) 148.76 -28.547 + (*,19,40) 148.73 -28.621 + (*,20,40) 148.87 -28.591 + (*,21,40) 148.88 -28.590 + (*,22,40) 149.13 -28.506 + (*,23,40) 148.95 -28.566 + (*,24,40) 149.24 -28.523 + (*,25,40) 149.33 -28.548 + (*,26,40) 149.05 -28.555 + (*,27,40) 149.27 -28.586 + (*,28,40) 149.47 -28.545 + (*,29,40) 149.64 -28.625 + (*,30,40) 149.74 -28.537 + (*,31,40) 149.79 -28.552 + (*,32,40) 149.92 -28.573 + (*,33,40) 149.82 -28.599 + (*,34,40) 149.79 -28.617 + (*,35,40) 150.01 -28.562 + (*,36,40) 150.13 -28.493 + (*,37,40) 150.37 -28.538 + (*,38,40) 149.96 -28.621 + (*,39,40) 150.34 -28.521 + (*,40,40) 150.40 -28.595 + (*,41,40) 150.33 -28.623 + (*,42,40) 150.46 -28.558 + (*,43,40) 150.46 -28.533 + (*,44,40) 150.61 -28.561 + (*,45,40) 150.74 -28.551 + (*,46,40) 150.71 -28.627 + (*,47,40) 150.76 -28.649 + (*,48,40) 151.11 -28.608 + (*,49,40) 151.19 -28.623 + (*,50,40) 150.95 -28.583 + (*,51,40) 151.12 -28.464 + (*,52,40) 151.11 -28.621 + (*,53,40) 151.22 -28.498 + (*,54,40) 151.43 -28.668 + (*,55,40) 151.34 -28.531 + (*,56,40) 151.38 -28.599 + (*,57,40) 151.66 -28.584 + (*,58,40) 151.57 -28.652 + (*,59,40) 151.63 -28.520 + (*,60,40) 151.65 -28.647 + (*,61,40) 151.78 -28.461 + (*,62,40) 152.10 -28.577 + (*,63,40) 152.04 -28.595 + (*,64,40) 152.11 -28.581 + (*,65,40) 152.13 -28.627 + (*,66,40) 152.36 -28.606 + (*,67,40) 152.23 -28.563 + (*,68,40) 152.27 -28.616 + (*,69,40) 152.40 -28.564 + (*,70,40) 152.52 -28.568 + nc: 2800 + sense: 0x
+ 1 1 + p0: 0x
+ 0 0 + delta: 0x
+ 0.0000 0.0000 + extrema: 0x
+ (*,*, 1) 147.57 -31.525 -> 152.52 -31.299 + (*,*, 2) 147.32 -31.483 -> 152.64 -31.230 + (*,*, 3) 147.38 -31.379 -> 152.50 -31.176 + (*,*, 4) 147.41 -31.360 -> 152.52 -31.042 + (*,*, 5) 147.36 -31.264 -> 152.51 -31.029 + (*,*, 6) 147.39 -31.152 -> 152.55 -30.871 + (*,*, 7) 147.41 -31.107 -> 152.47 -30.891 + (*,*, 8) 147.47 -31.042 -> 152.54 -30.804 + (*,*, 9) 147.54 -30.914 -> 152.62 -30.754 + (*,*,10) 147.34 -30.861 -> 152.64 -30.650 + (*,*,11) 147.33 -30.829 -> 152.58 -30.593 + (*,*,12) 147.45 -30.748 -> 152.47 -30.477 + (*,*,13) 147.47 -30.650 -> 152.55 -30.420 + (*,*,14) 147.47 -30.606 -> 152.58 -30.337 + (*,*,15) 147.40 -30.499 -> 152.44 -30.289 + (*,*,16) 147.55 -30.415 -> 152.51 -30.193 + (*,*,17) 147.37 -30.378 -> 152.66 -30.155 + (*,*,18) 147.18 -30.296 -> 152.69 -30.038 + (*,*,19) 147.44 -30.198 -> 152.51 -30.007 + (*,*,20) 147.25 -30.237 -> 152.53 -29.910 + (*,*,21) 147.35 -30.105 -> 152.51 -29.858 + (*,*,22) 147.49 -30.006 -> 152.52 -29.804 + (*,*,23) 147.49 -29.933 -> 152.41 -29.687 + (*,*,24) 147.45 -29.872 -> 152.64 -29.668 + (*,*,25) 147.41 -29.767 -> 152.48 -29.555 + (*,*,26) 147.43 -29.691 -> 152.70 -29.489 + (*,*,27) 147.44 -29.633 -> 152.53 -29.337 + (*,*,28) 147.40 -29.559 -> 152.42 -29.345 + (*,*,29) 147.54 -29.512 -> 152.67 -29.233 + (*,*,30) 147.51 -29.415 -> 152.47 -29.150 + (*,*,31) 147.30 -29.392 -> 152.59 -29.141 + (*,*,32) 147.51 -29.255 -> 152.54 -29.012 + (*,*,33) 147.38 -29.209 -> 152.60 -28.963 + (*,*,34) 147.47 -29.151 -> 152.51 -28.902 + (*,*,35) 147.58 -29.031 -> 152.68 -28.779 + (*,*,36) 147.47 -28.966 -> 152.58 -28.756 + (*,*,37) 147.51 -28.958 -> 152.60 -28.713 + (*,*,38) 147.49 -28.831 -> 152.53 -28.608 + (*,*,39) 147.51 -28.774 -> 152.46 -28.516 + (*,*,40) 147.57 -28.687 -> 152.54 -28.461 + err: 0x0 + m_flag: 137 + m_M: 2 + m_N: 0 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_indxs[1]: 0x
(= index[1]) + m_coord: 0x
(= coord) + +tab[1].* + flag: 137 + M: 1 + K: 0x
+ 8 + map: 0x
+ 2 + crval: 0x
+ 0.50000 + index: 0x
+ index[0]: 0x
+ 0.50000 1.5000 1.5000 2.5000 2.5000 + 3.5000 3.5000 4.5000 + coord: 0x
+ (*,1) 0.21106 + (*,2) 0.21076 + (*,3) 2.0000e-06 + (*,4) 2.2000e-06 + (*,5) 5.0000e-07 + (*,6) 6.5000e-07 + (*,7) 1.2400e-09 + (*,8) 2.4800e-09 + nc: 8 + sense: 0x
+ 1 + p0: 0x
+ 0 + delta: 0x
+ 0.0000 + extrema: 0x
+ (*,*) 1.2400e-09-> 0.21121 + err: 0x0 + m_flag: 137 + m_M: 1 + m_N: 0 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_coord: 0x
(= coord) + +tab[2].* + flag: 137 + M: 1 + K: 0x
+ 8 + map: 0x
+ 3 + crval: 0x
+ 0.0000 + index: 0x
+ index[0]: 0x
+ 0.0000 1.0000 1.0000 2.0000 2.0000 + 3.0000 3.0000 4.0000 + coord: 0x
+ (*,1) 1997.8 + (*,2) 1997.8 + (*,3) 1993.3 + (*,4) 1993.3 + (*,5) 2001.6 + (*,6) 2001.6 + (*,7) 2002.2 + (*,8) 2002.2 + nc: 8 + sense: 0x
+ 1 + p0: 0x
+ 0 + delta: 0x
+ 0.0000 + extrema: 0x
+ (*,*) 1993.3 -> 2002.2 + err: 0x0 + m_flag: 137 + m_M: 1 + m_N: 0 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_coord: 0x
(= coord) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 129.00 65.000 0.50000 1.0000 + pc: 0x
+ pc[0][]: 0.99619 0.087156 0.0000 0.0000 + pc[1][]: -0.087156 0.99619 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 1.0000 1.0000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: 0.99619 0.087156 0.0000 0.0000 +piximg[1][]: -0.087156 0.99619 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 1.0000 0.0000 +piximg[3][]: 0.0000 0.0000 1.0000 1.0000 +imgpix[0][]: 0.99619 -0.087156 0.0000 0.0000 +imgpix[1][]: 0.087156 0.99619 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.0000 0.0000 +imgpix[3][]: 0.0000 0.0000 -1.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 0 + offset: 0 + phi0: UNDEFINED + theta0: UNDEFINED + ref: 0.0000 0.0000 9.8765e+107 90.000 + prj: (see below) + euler: 0.0000 0.0000 0.0000 0.0000 0.0000 + latpreq: -1 (UNDEFINED) + isolat: 0 + err: 0x0 + + prj.* + flag: 0 + code: " " + r0: 0.000000 + pv: (not used) + phi0: UNDEFINED + theta0: UNDEFINED + bounds: 7 + + name: "undefined" + category: 0 (undefined) + pvrange: 0 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x0 + prjs2x: 0x0 + + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + + +Corner world coordinates: + Pixel World + ( 0.5, 0.5, 1.0, 1.0) -> (147.520, -30.977, 0.210913, 1997.84571) + (256.5, 0.5, 1.0, 1.0) -> (152.241, -31.422, 0.210913, 1997.84571) + ( 0.5, 128.5, 1.0, 1.0) -> (147.798, -28.662, 0.210913, 1997.84571) + (256.5, 128.5, 1.0, 1.0) -> (152.474, -29.087, 0.210913, 1997.84571) + ( 0.5, 0.5, 4.0, 1.0) -> (147.520, -30.977, 1.86e-09, 2002.18283) + (256.5, 0.5, 4.0, 1.0) -> (152.241, -31.422, 1.86e-09, 2002.18283) + ( 0.5, 128.5, 4.0, 1.0) -> (147.798, -28.662, 1.86e-09, 2002.18283) + (256.5, 128.5, 4.0, 1.0) -> (152.474, -29.087, 1.86e-09, 2002.18283) diff --git a/deps/wcslib/C/test/units_test b/deps/wcslib/C/test/units_test new file mode 100644 index 0000000..0369e69 --- /dev/null +++ b/deps/wcslib/C/test/units_test @@ -0,0 +1,22 @@ +km/h +m/ms +JY/BEAM +(kg/s^2)/beam +KM/SEC +m/s +KM/H +M/S +log(MHZ) +ln(/s) +DEG + +ARCMINS + +ARCSEC + +sqrt(HZ^2) + +Jy + +Volts + diff --git a/deps/wcslib/C/test/wcslint.keyrec b/deps/wcslib/C/test/wcslint.keyrec new file mode 100644 index 0000000..a2864eb --- /dev/null +++ b/deps/wcslib/C/test/wcslint.keyrec @@ -0,0 +1,423 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: wcslint.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# List of FITS header keyrecords, many of them invalid, for testing 'wcslint' +# and also, by extension, wcspih() which it uses. +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < wcslint.keyrec > wcslint.fits +# +# Lines in this file beginning with '#' are ignored by 'tofits'. +# +#----------------------------------------------------------------------------- +SIMPLE = F / Conforms to FITS standard? NO! +BITPIX = -32 / IEEE single precision floating point +NAXIS = 0 / No image data + +COMMENT WARNING WARNING WARNING +COMMENT ------------------------- +COMMENT This header is not a usage template. It is intended for testing +COMMENT 'wcslint' and as such mostly contains invalid WCS keyrecords. + +COMMENT ----------------------------------------------------------------------- +COMMENT The 'A' representation is legitimate. +COMMENT ----------------------------------------------------------------------- + +WCSAXESA= 4 / Four coordinate axes +WCSNAMEA= 'wcslint test header' + +CRPIX1A = 513.0 / Pixel coordinate of reference point +CRPIX2A = 513.0 / Pixel coordinate of reference point +CRPIX3A = 1025.0 / Pixel coordinate of reference point +CRPIX4A = 1.0 / Pixel coordinate of reference point +PC1_1A = 0.866025404 / Linear transformation matrix element +PC1_2A = 0.500000000 / Linear transformation matrix element +PC2_1A = -0.500000000 / Linear transformation matrix element +PC2_2A = 0.866025404 / Linear transformation matrix element + +CDELT1A = -0.10 / [deg] x-scale +CUNIT1A = 'deg' / Degree units are required +CTYPE1A = 'RA---SZP' / Right ascension in slant zenithal projection +CRVAL1A = 150.0 / [deg] Right ascension at the reference point +CNAME1A = 'Right ascension (J2000)' / Axis name for labelling purposes +CDELT2A = 0.10 / [deg] y-scale +CUNIT2A = 'deg' / Degree units are required +CTYPE2A = 'DEC--SZP' / Declination in a slant zenithal projection +CRVAL2A = -30.0 / [deg] Declination at the reference point +CNAME2A = 'Declination (J2000)' / Axis name for labelling purposes +PV1_1A = 0.0 / [deg] Native longitude of the reference point +PV1_2A = 90.0 / [deg] Native latitude of the reference point +PV1_3A = 195.0 / [deg] LONPOLEa by another name (precedence) +PV1_4A = 999.0 / [deg] LATPOLEa by another name (precedence) +PV2_1A = 0.0 / SZP distance, in spherical radii +PV2_2A = 180.0 / [deg] SZP P-longitude +PV2_3A = 45.0 / [deg] SZP P-latitude +LONPOLEA= 195.0 / [deg] Native longitude of the NCP +LATPOLEA= 999.0 / [deg] Native latitude of the NCP +RADESYSA= 'FK5' / Mean equatorial coordinates, IAU 1984 system +EQUINOXA= 2000.0 / [yr] Equinox of equatorial coordinates + +CDELT3A = -9.635265432e-6 / [m] Wavelength scale +CUNIT3A = 'm' / Wavelength units +CTYPE3A = 'WAVE-F2W' / Frequency axis expressed as wavelength +CRVAL3A = 0.214982042 / [m] Reference wavelength +CNAME3A = 'Wavelength' / Axis name for labelling purposes +CRDER3A = 1.0e-11 / [m] Wavelength calibration, random error +CSYER3A = 1.0e-12 / [m] Wavelength calibration, systematic error +RESTFRQA= 1.42040575e9 / [Hz] HI rest frequency +RESTWAVA= 0.211061141 / [m] HI rest wavelength +SPECSYSA= 'BARYCENT' / Reference frame of spectral coordinates +SSYSOBSA= 'TOPOCENT' / Reference frame of observation +VELOSYSA= 1500.0 / [m/s] Bary-topo velocity towards the source +SSYSSRCA= 'LSRK' / Reference frame of source redshift +ZSOURCEA= 0.0025 / Redshift of the source + +CDELT4A = 1.0 / [s] Time scale +CUNIT4A = 's' / Time units +CTYPE4A = 'TIME''x''' / String value and comment containing quotes (') +CRVAL4A = -2e3 / [s] Time at the reference point +CNAME4A = 'Time offset' / Axis name for labelling purposes +PS4_0A = 'UTC' / Time measurement system + +TIMESYS = 'UTC' / Time scale +TREFPOS = 'TOPOCENTRE' / Time reference position, with OBSGEO-[XYZLBH] +TREFDIR = 'RA_NOM,DEC_NOM' / Time reference direction +PLEPHEM = 'DE405' / Ephemerides used for pathlength delays + +TIMEUNIT= 's' / Time units +DATEREF = '1957-02-14T15:00:00'/ Date-time of fiducial time +MJDREF = 35883.625 / [d] MJD corresponding to DATEREF +MJDREFI = 35883 / [d] MJDREF, integer part +MJDREFF = 0.625 / [d] MJDREF, fractional part +JDREF = 2435884.125 / [d] JD corresponding to DATEREF +JDREFI = 2435884 / [d] JDREF, integer part +JDREFF = 0.125 / [d] JDREF, fractional part +TIMEOFFS= 0.010 / [s] Clock correction + +DATE-OBS= '1957-02-14T15:00:00'/ UTC Date-time at start of observation +MJD-OBS = 35883.625 / [d] MJD corresponding to DATE-OBS +JEPOCH = 1957.125598905 / [a] Julian epoch corresponding to DATE-OBS +BEPOCH = 1957.125960663 / [a] Besselian epoch corresponding to DATE-OBS + +DATE-BEG= '1957-02-14T15:00:00'/ Date-time at start of observation (UTC) +MJD-BEG = 35883.625 / [d] MJD corresponding to DATE-BEG +TSTART = 0.0 / [s] Start time with respect to DATEREF + +DATE-AVG= '1957-02-14T16:48:00'/ UTC Date-time at midpoint of observation +MJD-AVG = 35883.700 / [d] MJD corresponding to DATE-AVG + +DATE-END= '1957-02-14T18:36:00'/ UTC Date-time at end of observation +MJD-END = 35883.775 / [d] MJD corresponding to DATE-END +TSTOP = 12960.0 / [s] Stop time with respect to DATEREF + +XPOSURE = 12960.0 / [s] Exposure (integration) time +TELAPSE = 12960.0 / [s] Elapsed time (start to stop) + +TIMSYER = 5E-5 / [s] Systematic error in time measurements +TIMRDER = 1E-9 / [s] Relative error in time measurements +TIMEDEL = 1.0 / [s] Time resolution +TIMEPIXR= 0.5 / Reference position of timestamp in binned data + +OBSGEO-X= -4554231.533 / [m] WGS84 coordinates of Parkes radiotelescope +OBSGEO-Y= 2816759.109 / [m] WGS84 observatory y-coordinate +OBSGEO-Z= -3454036.323 / [m] WGS84 observatory z-coordinate +OBSGEO-L= 148.263510 / [deg] WGS84, IAU(1976) ellipsoid, longitude +OBSGEO-B= -32.998406 / [deg] WGS84, IAU(1976) ellipsoid, latitude +OBSGEO-H= 411.793 / [m] WGS84, IAU(1976) ellipsoid, height +OBSORBIT= 'sputnik-1957.eph' / Spacecraft orbit ephemeris file + +COMMENT The following test parser boundary conditions: +PV4_1A = 1.0 +PV4_2A = 2.0/ +PV4_3A = 3.0 / +PV4_4A = 4.0 / +PS4_1A = 'ABC' +PS4_2A = 'DEF'/ +PS4_3A = 'GHI' / +PS4_4A = 'JKL' / + + +COMMENT ======================================================================= +COMMENT By themselves, these primary image header auxiliary keywords should +COMMENT not be sufficient to cause a wcsprm struct to be created for +COMMENT representation X, nor should they affect any of the others. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEX= 'eXtraneous' / Name of this coordinate system +LONPOLEX= 180.0 / [deg] Native longitude of the NCP +LATPOLEX= 999.0 / [deg] Native latitude of the NCP +RESTFRQX= 1.42040575e9 / [Hz] HI rest frequency +RESTWAVX= 0.211061141 / [m] HI rest wavelength +EQUINOXX= 2000.0 / [yr] Equinox of equatorial coordinates +RADESYSX= 'ICRS' / Mean equatorial coordinates, IAU 1984 system +SPECSYSX= 'BARYCENT' / Reference frame of spectral coordinates +SSYSOBSX= 'TOPOCENT' / Reference frame of observation +SSYSSRCX= 'LSRK' / Reference frame of source redshift +VELANGLX= 35.25 / Velocity orientation angle +VELOSYSX= 1500.0 / [m/s] Bary-topo velocity towards the source +ZSOURCEX= 0.0025 / Redshift of the source + +COMMENT ----------------------------------------------------------------------- +COMMENT Every keyrecord for the 'B' representation below either violates or +COMMENT does not strictly conform to the FITS WCS standard. +COMMENT ----------------------------------------------------------------------- + +WCSNAMEB= B means BAD! / Name of this system +WCSAXESB= -4 / Four coordinate axes + +COMMENT ----------------------------------------------------------------------- +COMMENT The following have invalid keyword indices. +COMMENT ----------------------------------------------------------------------- + +CRPIX0B = 0.0 / Not a valid CRPIXja keyword +CDELT0B = 1.0 / Not a valid CDELTia keyword +CUNIT0B = 'INVALID' / Not a valid CUNITia keyword +CTYPE0B = 'INVALID' / Not a valid CTYPEia keyword +CRVAL0B = 0.0 / Not a valid CRVALia keyword +CNAME0B = 'INVALID' / Not a valid CNAMEia keyword +CRDER0B = 0.0 / Not a valid CRDERia keyword +CSYER0B = 0.0 / Not a valid CSYERia keyword +PC0_0B = 0.0 / Not a valid PCi_ja keyword +CD0_0B = 0.0 / Not a valid CDi_ja keyword +PV0_1B = 0.0 / Not a valid PVi_ma keyword +PS0_1B = 'INVALID' / Not a valid PSi_ma keyword + +COMMENT ----------------------------------------------------------------------- +COMMENT The following have invalid keyword syntax. +COMMENT ----------------------------------------------------------------------- + +CRPIX01B= 0.0 / Invalid CRPIXja keyword syntax +CDELT01B= 1.0 / Invalid CDELTia keyword syntax +CUNIT01B= 'INVALID' / Invalid CUNITia keyword syntax +CTYPE01B= 'INVALID' / Invalid CTYPEia keyword syntax +CRVAL01B= 0.0 / Invalid CRVALia keyword syntax +CNAME01B= 'INVALID' / Invalid CNAMEia keyword syntax +CRDER01B= 0.0 / Invalid CRDERia keyword syntax +CSYER01B= 0.0 / Invalid CSYERia keyword syntax +PC01_1B = 1.0 / Invalid PCi_ja keyword syntax +PC1_01B = 0.0 / Invalid PCi_ja keyword syntax +PC01_01B= 0.0 / Invalid PCi_ja keyword syntax +PC1-1B = 1.0 / Invalid PCi_ja keyword syntax +CD01_1B = 1.0 / Invalid CDi_ja keyword syntax +CD1_01B = 0.0 / Invalid CDi_ja keyword syntax +CD01_01B= 0.0 / Invalid CDi_ja keyword syntax +CD1-1B = 1.0 / Invalid CDi_ja keyword syntax +PV01_1B = 0.0 / Invalid PVi_ma keyword syntax +PV1_01B = 0.0 / Invalid PVi_ma keyword syntax +PV01_01B= 0.0 / Invalid PVi_ma keyword syntax +PV1-1B = 0.0 / Invalid PVi_ma keyword syntax +PS01_1B = 'INVALID' / Invalid PSi_ma keyword syntax +PS1_01B = 'INVALID' / Invalid PSi_ma keyword syntax +PS01_01B= 'INVALID' / Invalid PSi_ma keyword syntax +PS1-1B = 'INVALID' / Invalid PSi_ma keyword syntax +EQUINOX1= 0.0 / Invalid EQUINOXa keyword syntax +LONPOLE2= 0.0 / Invalid LONPOLEa keyword syntax +LATPOLE3= 0.0 / Invalid LATPOLEa keyword syntax +RESTFRQ4= 0.0 / Invalid RESTFRQa keyword syntax +RESTWAV5= 0.0 / Invalid RESTWAVa keyword syntax +RADESYS6= 'INVALID' / Invalid RADESYSa keyword syntax +SPECSYS7= 'INVALID' / Invalid SPECSYSa keyword syntax +SSYSOBS8= 'INVALID' / Invalid SSYSOBSa keyword syntax +SSYSSRC9= 'INVALID' / Invalid SSYSSRCa keyword syntax +VELANGL-= 0.0 / Invalid VELANGLa keyword syntax +VELOSYS_= 0.0 / Invalid VELOSYSa keyword syntax +WCSNAMEb= 'INVALID' / Invalid WCSNAMEa keyword syntax +ZSOURCE*= 0.0 / Invalid ZSOURCEa keyword syntax + +COMMENT ----------------------------------------------------------------------- +COMMENT The following have invalid keyvalues (and many should not appear more +COMMENT than once in a header). +COMMENT ----------------------------------------------------------------------- + +CRPIX2B = INVALID / Not a valid CRPIXja keyvalue +CDELT2B = (137, -1) / Not a valid CDELTia keyvalue +CUNIT2B = -1 / Not a valid CUNITia keyvalue +CTYPE2B = T / Not a valid CTYPEia keyvalue +CRVAL2B = 'INVALID' / Not a valid CRVALia keyvalue +CNAME2B = F / Not a valid CNAMEia keyvalue +CRDER2B = (10E5,-0.1) / Not a valid CRDERia keyvalue +CSYER2B = 'INVALID' / Not a valid CSYERia keyvalue +PC1_1B = 0xff / Not a valid PCi_ja keyvalue +CD1_1B = 'INVALID' / Not a valid CDi_ja keyvalue +PV1_1B = 'INVALID' / Not a valid PVi_ma keyvalue +PS1_1B = 0 / Not a valid PSi_ma keyvalue +LONPOLEB= 'INVALID' / Not a valid LONPOLEa keyvalue +LATPOLEB= 'INVALID' / Not a valid LATPOLEa keyvalue +RESTFRQB= 'INVALID' / Not a valid RESTFRQa keyvalue +RESTWAVB= 'INVALID' / Not a valid RESTWAVa keyvalue + +WCSNAMEB= 0.0 / Not a valid WCSNAMEa keyvalue + +TIMESYS = F / Not a valid TIMESYS keyvalue +TREFPOS = F / Not a valid TREFPOS keyvalue +TREFDIR = F / Not a valid TREFDIR keyvalue +PLEPHEM = F / Not a valid PLEPHEM keyvalue +TIMEUNIT= F / Not a valid TIMEUNIT keyvalue +DATEREF = F / Not a valid DATEREF keyvalue +MJDREF = F / Not a valid MJDREF keyvalue +MJDREFI = F / Not a valid MJDREFI keyvalue +MJDREFF = F / Not a valid MJDREFF keyvalue +JDREF = 'INVALID' / Not a valid JDREF keyvalue +JDREFI = 'INVALID' / Not a valid JDREFI keyvalue +JDREFF = 'INVALID' / Not a valid JDREFF keyvalue +TIMEOFFS= F / Not a valid TIMEOFFS keyvalue + +DATE-OBS= 0.0 / Not a valid DATE-OBS keyvalue +DATE-BEG= 0.0 / Not a valid DATE-BEG keyvalue +DATE-AVG= 0.0 / Not a valid DATE-AVG keyvalue +DATE-END= 0.0 / Not a valid DATE-END keyvalue +MJD-OBS = 'INVALID' / Not a valid MJD-OBS keyvalue +MJD-BEG = 'INVALID' / Not a valid MJD-BEG keyvalue +MJD-AVG = 'INVALID' / Not a valid MJD-AVG keyvalue +MJD-END = 'INVALID' / Not a valid MJD-END keyvalue +JEPOCH = F / Not a valid JEPOCH keyvalue +BEPOCH = F / Not a valid BEPOCH keyvalue +TSTART = F / Not a valid TSTART keyvalue +TSTOP = F / Not a valid TSTOP keyvalue +XPOSURE = F / Not a valid XPOSURE keyvalue +TELAPSE = F / Not a valid TELAPSE keyvalue + +TIMSYER = 'INVALID' / Not a valid TIMSYER keyvalue +TIMRDER = 'INVALID' / Not a valid TIMRDER keyvalue +TIMEDEL = 'INVALID' / Not a valid TIMEDEL keyvalue +TIMEPIXR= 2.0 / Not a valid TIMEPIXR keyvalue + +OBSGEO-X= 'INVALID' / Not a valid OBSGEO-X keyvalue +OBSGEO-Y= 'INVALID' / Not a valid OBSGEO-Y keyvalue +OBSGEO-Z= 'INVALID' / Not a valid OBSGEO-Z keyvalue +OBSGEO-L= 'INVALID' / Not a valid OBSGEO-L keyvalue +OBSGEO-B= 'INVALID' / Not a valid OBSGEO-B keyvalue +OBSGEO-H= 'INVALID' / Not a valid OBSGEO-H keyvalue +OBSORBIT= T / Not a valid OBSORBIT keyvalue + +RADESYSB= ICRS / Not a valid RADESYSa keyvalue +EPOCH = 'B1950.0' / Not a valid EPOCH keyvalue +EQUINOXB= '2000.0' / Not a valid EQUINOXa keyvalue +SPECSYSB= 0.0 / Not a valid SPECSYSa keyvalue +SSYSOBSB= 0.0 / Not a valid SSYSOBSa keyvalue +VELOSYSB= 'INVALID' / Not a valid VELOSYSa keyvalue +ZSOURCEB= 'INVALID' / Not a valid ZSOURCEa keyvalue +SSYSSRCB= 0.0 / Not a valid SSYSSRCa keyvalue +VELANGLB= 'INVALID' / Not a valid VELANGLa keyvalue + +COMMENT ----------------------------------------------------------------------- +COMMENT The following are basic syntax errors. +COMMENT ----------------------------------------------------------------------- + +CRPIX3B= 0.0 / Illegal, "= " not in columns 9-10 +CDELT3B = 1.0 / Illegal, "= " not in columns 9-10 +CUNIT3B ='deg' / Illegal, "= " not in columns 9-10 +CTYPE3B 'FREQ' / Illegal, "= " not in columns 9-10 +CRVAL3B = 2 + 2 / Not a valid keyvalue +CNAME3B = 'IN' 'VALID' / Not a valid keyvalue +CRDER3B = 1934-638 / Not a valid keyvalue +CSYER3B = 1.2.3 / Not a valid keyvalue +PC1_1B = 12h34m56s / Not a valid keyvalue +CD1_1B = 0xFF / Not a valid keyvalue +PV1_1B = 58 - 21 / Not a valid keyvalue +PS1_1B = "UTC" / Not a valid keyvalue +EQUINOXB= J2000 / Not a valid keyvalue +EPOCH = B1950.0 / Not a valid keyvalue +LONPOLEB= 180:00:00 / Not a valid keyvalue +LATPOLEB= $9.99 / Not a valid keyvalue +RESTFRQB= / Not a valid keyvalue +RESTWAVB= / Not a valid keyvalue +RADESYSB= ICRS / Not a valid keyvalue +SPECSYSB= 'BARYCENT' Invalid keycomment +SSYSOBSB= 'TOPOCENT' 1/8 = 0.125 +PV3_1B = 1.0O +PV3_2B = 2 + 2 +PV3_3B = 3.0 : +PS3_1B = 'Jean-Pierre O'Toole' +PS3_2B = 'UVW' : +PS3_3B = 'XYZ' : + +COMMENT ----------------------------------------------------------------------- +COMMENT The following are deprecated or unrecognised AIPS-convention keywords. +COMMENT ----------------------------------------------------------------------- + +CRPIX4A_= 'PHONEY' / Lookalike keyword is not CRPIXja +CDELT4_B= 'PHONEY' / Lookalike keyword is not CDELTia +CUNIT4-B= 'PHONEY' / Lookalike keyword is not CUNITia +CTYPE-4B= 'PHONEY' / Lookalike keyword is not CTYPEia +CRVAL_4B= 'PHONEY' / Lookalike keyword is not CRVALia +CNAME4_ = 'PHONEY' / Lookalike keyword is not CNAMEia +CRDER4_ = 'PHONEY' / Lookalike keyword is not CRDERia +CSYER4_ = 'PHONEY' / Lookalike keyword is not CSYERia + +PC4X4B = 'PHONEY' / Lookalike keyword is not PCi_ja +PC4__4B = 'PHONEY' / Lookalike keyword is not PCi_ja +PC4_IB = 'PHONEY' / Lookalike keyword is not PCi_ja +PC4 4B = 'PHONEY' / Lookalike keyword is not PCi_ja +CD4X4B = 'PHONEY' / Lookalike keyword is not CDi_ja +CD4__4B = 'PHONEY' / Lookalike keyword is not CDi_ja +CD4_IB = 'PHONEY' / Lookalike keyword is not CDi_ja +CD4 4B = 'PHONEY' / Lookalike keyword is not CDi_ja +PV4X4B = 'PHONEY' / Lookalike keyword is not PVi_ja +PV4__4B = 'PHONEY' / Lookalike keyword is not PVi_ja +PV4_OB = 'PHONEY' / Lookalike keyword is not PVi_ja +PV4 0B = 'PHONEY' / Lookalike keyword is not PVi_ja +PS4X4B = 'PHONEY' / Lookalike keyword is not PSi_ja +PS4__4B = 'PHONEY' / Lookalike keyword is not PSi_ja +PS4_IB = 'PHONEY' / Lookalike keyword is not PSi_ja +PS4 0B = 'PHONEY' / Lookalike keyword is not PSi_ja + +COMMENT ----------------------------------------------------------------------- +COMMENT The following look vaguely like WCS keywords but should be discarded. +COMMENT ----------------------------------------------------------------------- + +CRPIXELS= 0.0 / Furphy, not CRPIXja +PCATALOG= 0.0 / Furphy, not PCi_ja +CDELTA = 0.0 / Furphy, not CDELTia +CDI_JA = 0.0 / Furphy, not CDi_ja +CUNITARY= 0.0 / Furphy, not CUNITia +CTYPEXY = 0.0 / Furphy, not CTYPEia +CRVALUE = 0.0 / Furphy, not CRVALia +CNAME = 0.0 / Furphy, not CNAMEia +PV1_1AL = 0.0 / Furphy, not PVi_ma +PSEUDO = 0.0 / Furphy, not PSi_ma +EPOCHAL = 0.0 / Furphy, not EPOCH +VELREF1 = 0.0 / Furphy, not VELREF + +COMMENT ----------------------------------------------------------------------- +COMMENT The following are deprecated or unrecognised AIPS-convention keywords. +COMMENT ----------------------------------------------------------------------- + +EPOCHB = 0.0 / Invalid alternate code on EPOCH keyword +VELREFB = 0 / Invalid alternate code on VELREF keyword + +PC001001= 1.0 / PC00i00j keyword is deprecated, use PCi_ja +CD001001= 1.0 / PC00i00j keyword is deprecated, use CDi_ja +VSOURCEB= 0.0 / VSOURCEa keyword is deprecated, use ZSOURCEa +RADECSYS= 'DEPRECATED' / RADECSYS keyword is deprecated, use RADESYSa +PROJP1 = 0.0 / PROJPn keyword is deprecated, use PVi_ma +CROTA1 = 0.0 / CROTAn keyword is deprecated, use PCi_ja + +RESTFREQ= 0.0 / Use RESTFRQa in preference to RESTFREQ + +ALTRPIX = 0.0 / AIPS spectral convention, not recognised +ALTRVAL = 0.0 / AIPS spectral convention, not recognised + +END diff --git a/deps/wcslib/C/test/wcspcx.keyrec b/deps/wcslib/C/test/wcspcx.keyrec new file mode 100644 index 0000000..c3e7ed0 --- /dev/null +++ b/deps/wcslib/C/test/wcspcx.keyrec @@ -0,0 +1,70 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: wcspcx.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# FITS header keyrecords used for testing wcspcx(). DO NOT use this as a +# template for writing a well-constructed FITS header! +# +# Use 'tofits' (supplied) to convert this file to proper FITS format via +# +# tofits < wcspcx.keyrec > wcspcx.fits +# +# Lines in this file beginning with '#' are ignored by tofits. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 5 / Number of image axes +NAXIS1 = 4 / Length of image axis 1 +NAXIS2 = 256 / Length of image axis 1 +NAXIS3 = 256 / Length of image axis 2 +NAXIS4 = 2048 / Length of image axis 3 +NAXIS5 = 64 / Length of image axis 4 +WCSNAME = 'Test header for wcspcx' +CRPIX1 = 1.0 / Pixel coordinate of reference point +CRPIX2 = 129.0 / Pixel coordinate of reference point +CRPIX3 = 129.0 / Pixel coordinate of reference point +CRPIX4 = 1025.0 / Pixel coordinate of reference point +CRPIX5 = 63.0 / Pixel coordinate of reference point +CD1_2 = -5.9531960331364E-06 / [deg] CD matrix element +CD1_3 = 1.2905869307817E-05 / [deg] CD matrix element +CD2_2 = 1.2645013422098E-05 / [deg] CD matrix element +CD2_3 = 5.0221453979612E-06 / [deg] CD matrix element +CD3_5 = 1.0 / [s] CD matrix element +CD4_1 = 1.0 / [] CD matrix element +CD5_4 = 10E-10 / [m] CD matrix element +CUNIT1 = 'deg ' / Degree units are required +CUNIT2 = 'deg ' / Degree units are required +CUNIT3 = 's ' / Time units +CUNIT5 = 'm ' / Wavelength units +CTYPE1 = 'RA---TAN' / Right ascension, gnomonic projection +CTYPE2 = 'DEC--TAN' / Declination, gnomonic projection +CTYPE3 = 'TIME ' / Time +CTYPE4 = 'STOKES ' / Polarization axis +CTYPE5 = 'WAVE ' / Tabulated wavelengths +CRVAL1 = 5.6305375018449 / [deg] right ascension at reference point +CRVAL2 = -72.05456803136801 / [deg] declination at reference point +CRVAL3 = 0.0 / [s] time reference epoch +CRVAL4 = 1 +CRVAL5 = 5006.84E-10 / [m] [OIII]5007 Wavelength +END diff --git a/deps/wcslib/C/test/wcstab.keyrec b/deps/wcslib/C/test/wcstab.keyrec new file mode 100644 index 0000000..6261ad7 --- /dev/null +++ b/deps/wcslib/C/test/wcstab.keyrec @@ -0,0 +1,122 @@ +#----------------------------------------------------------------------------- +# WCSLIB 8.4 - an implementation of the FITS WCS standard. +# Copyright (C) 1995-2024, Mark Calabretta +# +# This file is part of WCSLIB. +# +# WCSLIB is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# WCSLIB 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 Lesser General Public License for +# more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with WCSLIB. If not, see http://www.gnu.org/licenses. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: wcstab.keyrec,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# +# List of FITS header keyrecords used by 'twcstab' to construct a FITS file +# for testing wcstab() and fits_read_wcstab(). The coordinate arrays and +# index vectors in the binary tables extensions are generated by twcstab +# itself. +# +# Lines in this file beginning with '#' are ignored by twcstab. +# +#----------------------------------------------------------------------------- +SIMPLE = T / Conforms to FITS standard +BITPIX = -32 / IEEE single precision floating point +NAXIS = 4 / 4 image axes +NAXIS1 = 256 / Length of image axis 1 - fastest varying +NAXIS2 = 128 / Length of image axis 2 +NAXIS3 = 4 / Length of image axis 3 +NAXIS4 = 1 / Length of image axis 4 - slowest varying +EXTEND = T / Binary table extensions contain lookup tables. + +COMMENT ----------------------------------------------------------------------- +COMMENT Of the four -TAB coordinate axes, the first two celestial axes are +COMMENT associated with a 2-D lookup table; the third spectral axis contains +COMMENT a list of four wavelengths in the radio, infrared, optical, and x-ray +COMMENT regimes; and the fourth time axis contains a list of observation +COMMENT dates. Axes 3 and 4 are adapted from Table 11 of WCS Paper III. +COMMENT +COMMENT There are two separate bintables holding the -TAB arrays that differ +COMMENT only in EXTVER. The first holds the 2-D celestial table, and the +COMMENT second holds the two 1-D spectral and time coordinate tables. +COMMENT ----------------------------------------------------------------------- + +WCSAXES = 4 / Four coordinate axes +WCSNAME = '-TAB test file' / Name of this system + +CRPIX1 = 129.0 / Pixel coordinate of reference point +CRPIX2 = 65.0 / Pixel coordinate of reference point +PC1_1 = 0.996194698 / 5 deg rotation matrix element +PC1_2 = 0.087155743 / 5 deg rotation matrix element +PC2_1 = -0.087155743 / 5 deg rotation matrix element +PC2_2 = 0.996194698 / 5 deg rotation matrix element +CDELT1 = 1.0 / Index (psi_m) changes by one per pixel +CDELT2 = 1.0 / Index (psi_m) changes by one per pixel +CRVAL1 = 136.0 / Table index (Psi_m) at the reference point +CRVAL2 = 76.0 / Table index (Psi_m) at the reference point + +CTYPE1 = 'RA---TAB' / Right ascension in lookup table +CUNIT1 = 'deg' / Right ascension units +CNAME1 = 'Right ascension (J2000)' / Axis name for labelling purposes +PS1_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays +PV1_1 = 1 / EXTVER of bintable extension for -TAB arrays +PV1_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays +PS1_1 = 'CelCoords' / Celestial coordinate array +PS1_2 = 'RAIndex' / Right ascension index vector +PV1_3 = 1 / Axis number in coordinate array + +CTYPE2 = 'DEC--TAB' / Declination in a slant zenithal projection +CUNIT2 = 'deg' / Declination units +CNAME2 = 'Declination (J2000)' / Axis name for labelling purposes +PS2_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays +PV2_1 = 1 / EXTVER of bintable extension for -TAB arrays +PV2_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays +PS2_1 = 'CelCoords' / Celestial coordinate array +PS2_2 = 'DecIndex' / Declination index vector +PV2_3 = 2 / Axis number in coordinate array + +RADESYS = 'FK5' / Mean equatorial coordinates, IAU 1984 system +EQUINOX = 2000.0 / [yr] Equinox of equatorial coordinates + +CRPIX3 = 0.5 / Spectral bin initial edge of initial pixel +CRPIX4 = 1.0 / Temporal bins are at begin/end time +PC3_3 = 1.0 / Linear transformation matrix element +PC3_4 = 0.0 / Linear transformation matrix element +PC4_3 = 1.0 / Linear transformation matrix element +PC4_4 = 1.0 / Linear transformation matrix element +CDELT3 = 1.0 / Index (psi_m) changes by one per pixel +CDELT4 = 1.0 / Index (psi_m) changes by one per pixel +CRVAL3 = 0.5 / Table index (Psi_m) at the reference point +CRVAL4 = 0.0 / Table index (Psi_m) at the reference point + +CTYPE3 = 'WAVE-TAB' / Wavelength axis by lookup table +CUNIT3 = 'm' / Wavelength in metres +CNAME3 = 'Wavelength' / Axis name for labelling purposes +PS3_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays +PV3_1 = 2 / EXTVER of bintable extension for -TAB arrays +PV3_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays +PS3_1 = 'WaveCoord' / Wavelength coordinate array +PS3_2 = 'WaveIndex' / Wavelength index vector +PV3_3 = 1 / Axis number in coordinate array + +CTYPE4 = 'TIME-TAB' / Time axis by lookup table +CUNIT4 = 'a' / Time in years +CNAME4 = 'Observation date' / Axis name for labelling purposes +PS4_0 = 'WCS-TABLE' / EXTNAME of bintable extension for -TAB arrays +PV4_1 = 2 / EXTVER of bintable extension for -TAB arrays +PV4_2 = 1 / EXTLEVEL of bintable extension for -TAB arrays +PS4_1 = 'TimeCoord' / Time coordinate array +PS4_2 = 'TimeIndex' / Time index vector +PV4_3 = 1 / Axis number in coordinate array + +END diff --git a/deps/wcslib/C/wcs.c b/deps/wcslib/C/wcs.c new file mode 100644 index 0000000..a39dc24 --- /dev/null +++ b/deps/wcslib/C/wcs.c @@ -0,0 +1,4925 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcs.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcstrig.h" +#include "wcsunits.h" +#include "wcsutil.h" +#include "wtbarr.h" +#include "lin.h" +#include "dis.h" +#include "log.h" +#include "spc.h" +#include "prj.h" +#include "sph.h" +#include "cel.h" +#include "tab.h" +#include "wcs.h" + +// Maximum number of PVi_ma and PSi_ma keywords. +int NPVMAX = 64; +int NPSMAX = 8; + +// Map status return value to message. +const char *wcs_errmsg[] = { + "Success", + "Null wcsprm pointer passed", + "Memory allocation failed", + "Linear transformation matrix is singular", + "Inconsistent or unrecognized coordinate axis type", + "Invalid parameter value", + "Unrecognized coordinate transformation parameter", + "Ill-conditioned coordinate transformation parameter", + "One or more of the pixel coordinates were invalid", + "One or more of the world coordinates were invalid", + "Invalid world coordinate", + "No solution found in the specified interval", + "Invalid subimage specification", + "Non-separable subimage coordinate system", + "wcsprm struct is unset, use wcsset()"}; + +// Map error returns for lower-level routines. +const int wcs_linerr[] = { + WCSERR_SUCCESS, // 0: LINERR_SUCCESS + WCSERR_NULL_POINTER, // 1: LINERR_NULL_POINTER + WCSERR_MEMORY, // 2: LINERR_MEMORY + WCSERR_SINGULAR_MTX, // 3: LINERR_SINGULAR_MTX + WCSERR_BAD_PARAM, // 4: LINERR_DISTORT_INIT + WCSERR_BAD_PIX, // 5: LINERR_DISTORT + WCSERR_BAD_WORLD // 6: LINERR_DEDISTORT +}; + +const int wcs_logerr[] = { + WCSERR_SUCCESS, // 0: LOGERR_SUCCESS + WCSERR_NULL_POINTER, // 1: LOGERR_NULL_POINTER + WCSERR_BAD_PARAM, // 2: LOGERR_BAD_LOG_REF_VAL + WCSERR_BAD_PIX, // 3: LOGERR_BAD_X + WCSERR_BAD_WORLD // 4: LOGERR_BAD_WORLD +}; + +const int wcs_spcerr[] = { + // -1: SPCERR_NO_CHANGE + WCSERR_SUCCESS, // 0: SPCERR_SUCCESS + WCSERR_NULL_POINTER, // 1: SPCERR_NULL_POINTER + WCSERR_BAD_PARAM, // 2: SPCERR_BAD_SPEC_PARAMS + WCSERR_BAD_PIX, // 3: SPCERR_BAD_X + WCSERR_BAD_WORLD // 4: SPCERR_BAD_SPEC +}; + +const int wcs_celerr[] = { + WCSERR_SUCCESS, // 0: CELERR_SUCCESS + WCSERR_NULL_POINTER, // 1: CELERR_NULL_POINTER + WCSERR_BAD_PARAM, // 2: CELERR_BAD_PARAM + WCSERR_BAD_COORD_TRANS, // 3: CELERR_BAD_COORD_TRANS + WCSERR_ILL_COORD_TRANS, // 4: CELERR_ILL_COORD_TRANS + WCSERR_BAD_PIX, // 5: CELERR_BAD_PIX + WCSERR_BAD_WORLD // 6: CELERR_BAD_WORLD +}; + +const int wcs_taberr[] = { + WCSERR_SUCCESS, // 0: TABERR_SUCCESS + WCSERR_NULL_POINTER, // 1: TABERR_NULL_POINTER + WCSERR_MEMORY, // 2: TABERR_MEMORY + WCSERR_BAD_PARAM, // 3: TABERR_BAD_PARAMS + WCSERR_BAD_PIX, // 4: TABERR_BAD_X + WCSERR_BAD_WORLD // 5: TABERR_BAD_WORLD +}; + +static const int WCSSET = 137; + +// Internal helper functions, not for general use. +static int wcs_types(struct wcsprm *); +static int time_type(const char *); +static int time_code(const char *ctype, int nc); +static int wcs_units(struct wcsprm *); +static int wcs_chksum(const struct wcsprm *wcs); +static int wcs_fletcher32(int chksum, const void *data, size_t len); + +// Convenience macro for invoking wcserr_set(). +#define WCS_ERRMSG(status) WCSERR_SET(status), wcs_errmsg[status] + +#ifndef signbit +#define signbit(X) ((X) < 0.0 ? 1 : 0) +#endif + +//---------------------------------------------------------------------------- + +int wcsnpv(int npvmax) { if (npvmax >= 0) NPVMAX = npvmax; return NPVMAX; } +int wcsnps(int npsmax) { if (npsmax >= 0) NPSMAX = npsmax; return NPSMAX; } + +//---------------------------------------------------------------------------- + +int wcsini(int alloc, int naxis, struct wcsprm *wcs) + +{ + return wcsinit(alloc, naxis, wcs, -1, -1, -1); +} + +//---------------------------------------------------------------------------- + +int wcsinit( + int alloc, + int naxis, + struct wcsprm *wcs, + int npvmax, + int npsmax, + int ndpmax) + +{ + static const char *function = "wcsinit"; + + int status; + + // Check inputs. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + if (npvmax < 0) npvmax = wcsnpv(-1); + if (npsmax < 0) npsmax = wcsnps(-1); + + + // Initialize error message handling... + if (wcs->flag == -1) { + wcs->err = 0x0; + } + struct wcserr **err = &(wcs->err); + wcserr_clear(err); + + // ...and also in the contained structs in case we have to return due to + // an error before they can be initialized by their specialized routines, + // since wcsperr() assumes their wcserr pointers are valid. + if (wcs->flag == -1) { + wcs->lin.err = 0x0; + wcs->cel.err = 0x0; + wcs->spc.err = 0x0; + } + wcserr_clear(&(wcs->lin.err)); + wcserr_clear(&(wcs->cel.err)); + wcserr_clear(&(wcs->spc.err)); + + + // Initialize pointers. + if (wcs->flag == -1 || wcs->m_flag != WCSSET) { + if (wcs->flag == -1) { + wcs->tab = 0x0; + wcs->types = 0x0; + wcs->lin.flag = -1; + } + + // Initialize memory management. + wcs->m_flag = 0; + wcs->m_naxis = 0; + wcs->m_crpix = 0x0; + wcs->m_pc = 0x0; + wcs->m_cdelt = 0x0; + wcs->m_crval = 0x0; + wcs->m_cunit = 0x0; + wcs->m_ctype = 0x0; + wcs->m_pv = 0x0; + wcs->m_ps = 0x0; + wcs->m_cd = 0x0; + wcs->m_crota = 0x0; + wcs->m_colax = 0x0; + wcs->m_cname = 0x0; + wcs->m_crder = 0x0; + wcs->m_csyer = 0x0; + wcs->m_czphs = 0x0; + wcs->m_cperi = 0x0; + wcs->m_aux = 0x0; + wcs->m_tab = 0x0; + wcs->m_wtb = 0x0; + } + + if (naxis < 0) { + return wcserr_set(WCSERR_SET(WCSERR_MEMORY), + "naxis must not be negative (got %d)", naxis); + } + + + // Allocate memory for arrays if required. + if (alloc || + wcs->crpix == 0x0 || + wcs->pc == 0x0 || + wcs->cdelt == 0x0 || + wcs->crval == 0x0 || + wcs->cunit == 0x0 || + wcs->ctype == 0x0 || + (npvmax && wcs->pv == 0x0) || + (npsmax && wcs->ps == 0x0) || + wcs->cd == 0x0 || + wcs->crota == 0x0 || + wcs->colax == 0x0 || + wcs->cname == 0x0 || + wcs->crder == 0x0 || + wcs->csyer == 0x0 || + wcs->czphs == 0x0 || + wcs->cperi == 0x0) { + + // Was sufficient allocated previously? + if (wcs->m_flag == WCSSET && + (wcs->m_naxis < naxis || + wcs->npvmax < npvmax || + wcs->npsmax < npsmax)) { + // No, free it. + wcsfree(wcs); + } + + if (alloc || wcs->crpix == 0x0) { + if (wcs->m_crpix) { + // In case the caller fiddled with it. + wcs->crpix = wcs->m_crpix; + + } else { + if ((wcs->crpix = calloc(naxis, sizeof(double))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_crpix = wcs->crpix; + } + } + + if (alloc || wcs->pc == 0x0) { + if (wcs->m_pc) { + // In case the caller fiddled with it. + wcs->pc = wcs->m_pc; + + } else { + if ((wcs->pc = calloc(naxis*naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_pc = wcs->pc; + } + } + + if (alloc || wcs->cdelt == 0x0) { + if (wcs->m_cdelt) { + // In case the caller fiddled with it. + wcs->cdelt = wcs->m_cdelt; + + } else { + if ((wcs->cdelt = calloc(naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_cdelt = wcs->cdelt; + } + } + + if (alloc || wcs->crval == 0x0) { + if (wcs->m_crval) { + // In case the caller fiddled with it. + wcs->crval = wcs->m_crval; + + } else { + if ((wcs->crval = calloc(naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_crval = wcs->crval; + } + } + + if (alloc || wcs->cunit == 0x0) { + if (wcs->m_cunit) { + // In case the caller fiddled with it. + wcs->cunit = wcs->m_cunit; + + } else { + if ((wcs->cunit = calloc(naxis, sizeof(char [72]))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_cunit = wcs->cunit; + } + } + + if (alloc || wcs->ctype == 0x0) { + if (wcs->m_ctype) { + // In case the caller fiddled with it. + wcs->ctype = wcs->m_ctype; + + } else { + if ((wcs->ctype = calloc(naxis, sizeof(char [72]))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_ctype = wcs->ctype; + } + } + + if (alloc || wcs->pv == 0x0) { + if (wcs->m_pv) { + // In case the caller fiddled with it. + wcs->pv = wcs->m_pv; + + } else { + if (npvmax) { + if ((wcs->pv = calloc(npvmax, sizeof(struct pvcard))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + } else { + wcs->pv = 0x0; + } + + wcs->npvmax = npvmax; + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_pv = wcs->pv; + } + } + + if (alloc || wcs->ps == 0x0) { + if (wcs->m_ps) { + // In case the caller fiddled with it. + wcs->ps = wcs->m_ps; + + } else { + if (npsmax) { + if ((wcs->ps = calloc(npsmax, sizeof(struct pscard))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + } else { + wcs->ps = 0x0; + } + + wcs->npsmax = npsmax; + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_ps = wcs->ps; + } + } + + if (alloc || wcs->cd == 0x0) { + if (wcs->m_cd) { + // In case the caller fiddled with it. + wcs->cd = wcs->m_cd; + + } else { + if ((wcs->cd = calloc(naxis*naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_cd = wcs->cd; + } + } + + if (alloc || wcs->crota == 0x0) { + if (wcs->m_crota) { + // In case the caller fiddled with it. + wcs->crota = wcs->m_crota; + + } else { + if ((wcs->crota = calloc(naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_crota = wcs->crota; + } + } + + if (alloc || wcs->colax == 0x0) { + if (wcs->m_colax) { + // In case the caller fiddled with it. + wcs->colax = wcs->m_colax; + + } else { + if ((wcs->colax = calloc(naxis, sizeof(int))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_colax = wcs->colax; + } + } + + if (alloc || wcs->cname == 0x0) { + if (wcs->m_cname) { + // In case the caller fiddled with it. + wcs->cname = wcs->m_cname; + + } else { + if ((wcs->cname = calloc(naxis, sizeof(char [72]))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_cname = wcs->cname; + } + } + + if (alloc || wcs->crder == 0x0) { + if (wcs->m_crder) { + // In case the caller fiddled with it. + wcs->crder = wcs->m_crder; + + } else { + if ((wcs->crder = calloc(naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_crder = wcs->crder; + } + } + + if (alloc || wcs->csyer == 0x0) { + if (wcs->m_csyer) { + // In case the caller fiddled with it. + wcs->csyer = wcs->m_csyer; + + } else { + if ((wcs->csyer = calloc(naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_csyer = wcs->csyer; + } + } + + if (alloc || wcs->czphs == 0x0) { + if (wcs->m_czphs) { + // In case the caller fiddled with it. + wcs->czphs = wcs->m_czphs; + + } else { + if ((wcs->czphs = calloc(naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_czphs = wcs->czphs; + } + } + + if (alloc || wcs->cperi == 0x0) { + if (wcs->m_cperi) { + // In case the caller fiddled with it. + wcs->cperi = wcs->m_cperi; + + } else { + if ((wcs->cperi = calloc(naxis, sizeof(double))) == 0x0) { + wcsfree(wcs); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_flag = WCSSET; + wcs->m_naxis = naxis; + wcs->m_cperi = wcs->cperi; + } + } + } + + + wcs->naxis = naxis; + + // Set defaults for the linear transformation. + wcs->lin.crpix = wcs->crpix; + wcs->lin.pc = wcs->pc; + wcs->lin.cdelt = wcs->cdelt; + if ((status = lininit(0, naxis, &(wcs->lin), ndpmax))) { + return wcserr_set(WCS_ERRMSG(wcs_linerr[status])); + } + + + // CRVALia defaults to 0.0. + for (int i = 0; i < naxis; i++) { + wcs->crval[i] = 0.0; + } + + + // CUNITia and CTYPEia are blank by default. + for (int i = 0; i < naxis; i++) { + memset(wcs->cunit[i], 0, 72); + memset(wcs->ctype[i], 0, 72); + } + + + // Set defaults for the celestial transformation parameters. + wcs->lonpole = UNDEFINED; + wcs->latpole = +90.0; + + // Set defaults for the spectral transformation parameters. + wcs->restfrq = 0.0; + wcs->restwav = 0.0; + + // Default parameter values. + wcs->npv = 0; + for (int k = 0; k < wcs->npvmax; k++) { + wcs->pv[k].i = 0; + wcs->pv[k].m = 0; + wcs->pv[k].value = 0.0; + } + + wcs->nps = 0; + for (int k = 0; k < wcs->npsmax; k++) { + wcs->ps[k].i = 0; + wcs->ps[k].m = 0; + memset(wcs->ps[k].value, 0, 72); + } + + // Defaults for alternate linear transformations. + double *cd = wcs->cd; + for (int i = 0; i < naxis; i++) { + for (int j = 0; j < naxis; j++) { + *(cd++) = 0.0; + } + } + for (int i = 0; i < naxis; i++) { + wcs->crota[i] = 0.0; + } + wcs->altlin = 0; + wcs->velref = 0; + + // Defaults for auxiliary coordinate system information. + memset(wcs->alt, 0, 4); + wcs->alt[0] = ' '; + wcs->colnum = 0; + + for (int i = 0; i < naxis; i++) { + wcs->colax[i] = 0; + memset(wcs->cname[i], 0, 72); + wcs->crder[i] = UNDEFINED; + wcs->csyer[i] = UNDEFINED; + wcs->czphs[i] = UNDEFINED; + wcs->cperi[i] = UNDEFINED; + } + + memset(wcs->wcsname, 0, 72); + + memset(wcs->timesys, 0, 72); + memset(wcs->trefpos, 0, 72); + memset(wcs->trefdir, 0, 72); + memset(wcs->plephem, 0, 72); + + memset(wcs->timeunit, 0, 72); + memset(wcs->dateref, 0, 72); + wcs->mjdref[0] = UNDEFINED; + wcs->mjdref[1] = UNDEFINED; + wcs->timeoffs = UNDEFINED; + + memset(wcs->dateobs, 0, 72); + memset(wcs->datebeg, 0, 72); + memset(wcs->dateavg, 0, 72); + memset(wcs->dateend, 0, 72); + wcs->mjdobs = UNDEFINED; + wcs->mjdbeg = UNDEFINED; + wcs->mjdavg = UNDEFINED; + wcs->mjdend = UNDEFINED; + wcs->jepoch = UNDEFINED; + wcs->bepoch = UNDEFINED; + wcs->tstart = UNDEFINED; + wcs->tstop = UNDEFINED; + wcs->xposure = UNDEFINED; + wcs->telapse = UNDEFINED; + + wcs->timsyer = UNDEFINED; + wcs->timrder = UNDEFINED; + wcs->timedel = UNDEFINED; + wcs->timepixr = UNDEFINED; + + wcs->obsgeo[0] = UNDEFINED; + wcs->obsgeo[1] = UNDEFINED; + wcs->obsgeo[2] = UNDEFINED; + wcs->obsgeo[3] = UNDEFINED; + wcs->obsgeo[4] = UNDEFINED; + wcs->obsgeo[5] = UNDEFINED; + memset(wcs->obsorbit, 0, 72); + memset(wcs->radesys, 0, 72); + wcs->equinox = UNDEFINED; + memset(wcs->specsys, 0, 72); + memset(wcs->ssysobs, 0, 72); + wcs->velosys = UNDEFINED; + wcs->zsource = UNDEFINED; + memset(wcs->ssyssrc, 0, 72); + wcs->velangl = UNDEFINED; + + // No additional auxiliary coordinate system information. + wcs->aux = 0x0; + + // Tabular parameters. + wcs->ntab = 0; + wcs->tab = 0x0; + wcs->nwtb = 0; + wcs->wtb = 0x0; + + // Reset derived values. + strcpy(wcs->lngtyp, " "); + strcpy(wcs->lattyp, " "); + wcs->lng = -1; + wcs->lat = -1; + wcs->spec = -1; + wcs->time = -1; + wcs->cubeface = -1; + wcs->chksum = 0; + + celini(&(wcs->cel)); + spcini(&(wcs->spc)); + + wcs->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsauxi( + int alloc, + struct wcsprm *wcs) + +{ + static const char *function = "wcsauxi"; + + // Check inputs. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + // Allocate memory if required. + if (alloc || wcs->aux == 0x0) { + if (wcs->m_aux) { + // In case the caller fiddled with it. + wcs->aux = wcs->m_aux; + + } else { + if ((wcs->aux = malloc(sizeof(struct auxprm))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + wcs->m_aux = wcs->aux; + } + } + + struct auxprm *aux = wcs->aux; + aux->rsun_ref = UNDEFINED; + aux->dsun_obs = UNDEFINED; + aux->crln_obs = UNDEFINED; + aux->hgln_obs = UNDEFINED; + aux->hglt_obs = UNDEFINED; + + aux->a_radius = UNDEFINED; + aux->b_radius = UNDEFINED; + aux->c_radius = UNDEFINED; + aux->blon_obs = UNDEFINED; + aux->blat_obs = UNDEFINED; + aux->bdis_obs = UNDEFINED; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcssub( + int alloc, + const struct wcsprm *wcssrc, + int *nsub, + int axes[], + struct wcsprm *wcsdst) + +{ + static const char *function = "wcssub"; + + const char *pq = "PQ"; + int status; + + if (wcssrc == 0x0) return WCSERR_NULL_POINTER; + if (wcsdst == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcsdst->err); + + // N.B. we do not rely on the wcsprm struct having been set up. + int naxis; + if ((naxis = wcssrc->naxis) <= 0) { + return wcserr_set(WCSERR_SET(WCSERR_MEMORY), + "naxis must be positive (got %d)", naxis); + } + + int dummy; + if (nsub == 0x0) { + nsub = &dummy; + *nsub = naxis; + } else if (*nsub == 0) { + *nsub = naxis; + } + + // Allocate enough temporary storage to hold either axes[] xor map[]. + int *itmp; + int ntmp = (*nsub <= naxis) ? naxis : *nsub; + if ((itmp = calloc(ntmp, sizeof(int))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + int dealloc; + if ((dealloc = (axes == 0x0))) { + // Construct an index array. + if ((axes = calloc(naxis, sizeof(int))) == 0x0) { + free(itmp); + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + for (int i = 0; i < naxis; i++) { + axes[i] = i+1; + } + } + + // So that we don't try to free uninitialized pointers on cleanup. + wcsdst->m_aux = 0x0; + wcsdst->m_tab = 0x0; + + + int msub = 0; + for (int j = 0; j < *nsub; j++) { + int axis = axes[j]; + + if (abs(axis) > 0x1000) { + // Subimage extraction by type. + int k = abs(axis) & 0xFF; + + int longitude = k & WCSSUB_LONGITUDE; + int latitude = k & WCSSUB_LATITUDE; + int cubeface = k & WCSSUB_CUBEFACE; + int spectral = k & WCSSUB_SPECTRAL; + int stokes = k & WCSSUB_STOKES; + int time = k & WCSSUB_TIME; + + int other; + if ((other = (axis < 0))) { + longitude = !longitude; + latitude = !latitude; + cubeface = !cubeface; + spectral = !spectral; + stokes = !stokes; + time = !time; + } + + for (int i = 0; i < naxis; i++) { + char ctypei[16]; + strncpy (ctypei, (char *)(wcssrc->ctype + i), 8); + ctypei[8] = '\0'; + + // Find the last non-blank character. + char *c = ctypei + 8; + while (c-- > ctypei) { + if (*c == ' ') *c = '\0'; + if (*c != '\0') break; + } + + if ( + strcmp(ctypei, "RA") == 0 || + strcmp(ctypei+1, "LON") == 0 || + strcmp(ctypei+2, "LN") == 0 || + strncmp(ctypei, "RA---", 5) == 0 || + strncmp(ctypei+1, "LON-", 4) == 0 || + strncmp(ctypei+2, "LN-", 3) == 0) { + if (!longitude) { + continue; + } + + } else if ( + strcmp(ctypei, "DEC") == 0 || + strcmp(ctypei+1, "LAT") == 0 || + strcmp(ctypei+2, "LT") == 0 || + strncmp(ctypei, "DEC--", 5) == 0 || + strncmp(ctypei+1, "LAT-", 4) == 0 || + strncmp(ctypei+2, "LT-", 3) == 0) { + if (!latitude) { + continue; + } + + } else if (( + strncmp(ctypei, "FREQ", 4) == 0 || + strncmp(ctypei, "ENER", 4) == 0 || + strncmp(ctypei, "WAVN", 4) == 0 || + strncmp(ctypei, "VRAD", 4) == 0 || + strncmp(ctypei, "WAVE", 4) == 0 || + strncmp(ctypei, "VOPT", 4) == 0 || + strncmp(ctypei, "ZOPT", 4) == 0 || + strncmp(ctypei, "AWAV", 4) == 0 || + strncmp(ctypei, "VELO", 4) == 0 || + strncmp(ctypei, "BETA", 4) == 0) && + (ctypei[4] == '\0' || ctypei[4] == '-')) { + if (!spectral) { + continue; + } + + } else if (time_type(ctypei)) { + if (!time) { + continue; + } + + } else if (strcmp(ctypei, "STOKES") == 0) { + if (!stokes) { + continue; + } + + } else if (strcmp(ctypei, "CUBEFACE") == 0) { + if (!cubeface) { + continue; + } + + } else if (!other) { + continue; + } + + // This axis is wanted, but has it already been added? + int k; + for (k = 0; k < msub; k++) { + if (itmp[k] == i+1) { + break; + } + } + if (k == msub) itmp[msub++] = i+1; + } + + } else if (0 < axis && axis <= naxis) { + // Check that the requested axis has not already been added. + int k; + for (k = 0; k < msub; k++) { + if (itmp[k] == axis) { + break; + } + } + if (k == msub) itmp[msub++] = axis; + + } else if (axis == 0) { + // Graft on a new axis. + itmp[msub++] = 0; + + } else { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_SUBIMAGE)); + goto cleanup; + } + } + + if ((*nsub = msub) == 0) { + // Zero out this struct. + status = wcsinit(alloc, 0, wcsdst, 0, 0, 0); + goto cleanup; + } + + for (int i = 0; i < *nsub; i++) { + axes[i] = itmp[i]; + } + + + // Construct the inverse axis map (i is 0-relative, j is 1-relative): + // axes[i] == j means that output axis i+1 comes from input axis j, + // axes[i] == 0 means to create a new axis, + // map[i] == j means that input axis i+1 goes to output axis j, + // map[i] == 0 means that input axis i+1 is not used. + int *map = itmp; + for (int i = 0; i < naxis; i++) { + map[i] = 0; + } + + for (int i = 0; i < *nsub; i++) { + if (axes[i] > 0) { + map[axes[i]-1] = i+1; + } + } + + + // Check that the subimage coordinate system is separable. First check + // non-zero, off-diagonal elements of the linear transformation matrix. + double *dstp; + const double *srcp = wcssrc->pc; + for (int i = 0; i < naxis; i++) { + for (int j = 0; j < naxis; j++) { + if (*(srcp++) == 0.0 || j == i) continue; + + if ((map[i] == 0) != (map[j] == 0)) { + status = wcserr_set(WCSERR_SET(WCSERR_NON_SEPARABLE), + "Non-zero off-diagonal matrix elements excluded from the subimage"); + goto cleanup; + } + } + } + + // Tabular coordinates, if any, will be checked below. + + // Now check for distortions that depend on other axes. As the disprm + // struct may not have been initialized, we must parse the dpkey entries. + int ndpmax = 0; + for (int m = 0; m < 2; m++) { + struct disprm *dissrc; + if (m == 0) { + dissrc = wcssrc->lin.dispre; + } else { + dissrc = wcssrc->lin.disseq; + } + + int ndp = 0; + if (dissrc != 0x0) { + for (int j = 0; j < naxis; j++) { + if (map[j] == 0) continue; + + // Axis numbers in axmap[] are 0-relative. + int axmap[32]; + for (int jhat = 0; jhat < 32; jhat++) { + axmap[jhat] = -1; + } + + int Nhat = 0; + struct dpkey *dpsrc = dissrc->dp; + for (int idp = 0; idp < dissrc->ndp; idp++, dpsrc++) { + // Thorough error checking will be done later by disset(). + if (dpsrc->j != j+1) continue; + if (dpsrc->field[1] != pq[m]) continue; + char *fp; + if ((fp = strchr(dpsrc->field, '.')) == 0x0) continue; + fp++; + + ndp++; + + if (strncmp(fp, "NAXES", 6) == 0) { + Nhat = dpkeyi(dpsrc); + } else if (strncmp(fp, "AXIS.", 5) == 0) { + int jhat; + sscanf(fp+5, "%d", &jhat); + axmap[jhat-1] = dpkeyi(dpsrc) - 1; + } + } + + if (Nhat < 0 || (Nhat == 0 && 1 < ndp) || naxis < Nhat || 32 < Nhat) { + status = wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), + "NAXES was not set (or bad) for %s distortion on axis %d", + dissrc->dtype[j], j+1); + goto cleanup; + } + + for (int jhat = 0; jhat < Nhat; jhat++) { + if (axmap[jhat] < 0) { + axmap[jhat] = jhat; + + // Make room for an additional DPja.AXIS.j record. + ndp++; + } + + if (map[axmap[jhat]] == 0) { + // Distortion depends on an axis excluded from the subimage. + status = wcserr_set(WCSERR_SET(WCSERR_NON_SEPARABLE), + "Distortion depends on an axis excluded from the subimage."); + goto cleanup; + } + } + } + } + + if (ndpmax < ndp) ndpmax = ndp; + } + + + // Number of PVi_ma records in the subimage. + int npvmax = 0; + for (int m = 0; m < wcssrc->npv; m++) { + int i = wcssrc->pv[m].i; + if (i == 0 || (i > 0 && map[i-1])) { + npvmax++; + } + } + + // Number of PSi_ma records in the subimage. + int npsmax = 0; + for (int m = 0; m < wcssrc->nps; m++) { + int i = wcssrc->ps[m].i; + if (i > 0 && map[i-1]) { + npsmax++; + } + } + + // Initialize the destination. + status = wcsinit(alloc, *nsub, wcsdst, npvmax, npsmax, ndpmax); + + for (int m = 0; m < 2; m++) { + struct disprm *dissrc, *disdst; + if (m == 0) { + dissrc = wcssrc->lin.dispre; + disdst = wcsdst->lin.dispre; + } else { + dissrc = wcssrc->lin.disseq; + disdst = wcsdst->lin.disseq; + } + + if (dissrc && !disdst) { + if ((disdst = calloc(1, sizeof(struct disprm))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + // Also inits disdst. + disdst->flag = -1; + lindist(m+1, &(wcsdst->lin), disdst, ndpmax); + } + } + + if (status) { + goto cleanup; + } + + + // Linear transformation. + srcp = wcssrc->crpix; + dstp = wcsdst->crpix; + for (int j = 0; j < *nsub; j++, dstp++) { + if (axes[j] > 0) { + int k = axes[j] - 1; + *dstp = *(srcp+k); + } + } + + srcp = wcssrc->pc; + dstp = wcsdst->pc; + for (int i = 0; i < *nsub; i++) { + for (int j = 0; j < *nsub; j++, dstp++) { + if (axes[i] > 0 && axes[j] > 0) { + int k = (axes[i]-1)*naxis + (axes[j]-1); + *dstp = *(srcp+k); + } + } + } + + srcp = wcssrc->cdelt; + dstp = wcsdst->cdelt; + for (int i = 0; i < *nsub; i++, dstp++) { + if (axes[i] > 0) { + int k = axes[i] - 1; + *dstp = *(srcp+k); + } + } + + // Coordinate reference value. + srcp = wcssrc->crval; + dstp = wcsdst->crval; + for (int i = 0; i < *nsub; i++, dstp++) { + if (axes[i] > 0) { + int k = axes[i] - 1; + *dstp = *(srcp+k); + } + } + + // Coordinate units and type. + for (int i = 0; i < *nsub; i++) { + if (axes[i] > 0) { + int k = axes[i] - 1; + strncpy(wcsdst->cunit[i], wcssrc->cunit[k], 72); + strncpy(wcsdst->ctype[i], wcssrc->ctype[k], 72); + } + } + + // Celestial and spectral transformation parameters. + wcsdst->lonpole = wcssrc->lonpole; + wcsdst->latpole = wcssrc->latpole; + wcsdst->restfrq = wcssrc->restfrq; + wcsdst->restwav = wcssrc->restwav; + + // Parameter values. + int npv = 0; + for (int m = 0; m < wcssrc->npv; m++) { + int i = wcssrc->pv[m].i; + if (i == 0) { + // i == 0 is a special code that means "the latitude axis". + wcsdst->pv[npv] = wcssrc->pv[m]; + wcsdst->pv[npv].i = 0; + npv++; + } else if (i > 0 && map[i-1]) { + wcsdst->pv[npv] = wcssrc->pv[m]; + wcsdst->pv[npv].i = map[i-1]; + npv++; + } + } + wcsdst->npv = npv; + + int nps = 0; + for (int m = 0; m < wcssrc->nps; m++) { + int i = wcssrc->ps[m].i; + if (i > 0 && map[i-1]) { + wcsdst->ps[nps] = wcssrc->ps[m]; + wcsdst->ps[nps].i = map[i-1]; + nps++; + } + } + wcsdst->nps = nps; + + // Alternate linear transformations. + if (wcssrc->cd) { + srcp = wcssrc->cd; + dstp = wcsdst->cd; + for (int i = 0; i < *nsub; i++) { + for (int j = 0; j < *nsub; j++, dstp++) { + if (axes[i] > 0 && axes[j] > 0) { + int k = (axes[i]-1)*naxis + (axes[j]-1); + *dstp = *(srcp+k); + } else if (i == j && wcssrc->altlin & 2) { + // A new axis is being created where CDi_ja was present in the input + // header, so override the default value of 0 set by wcsinit(). + *dstp = 1.0; + } + } + } + } + + if (wcssrc->crota) { + srcp = wcssrc->crota; + dstp = wcsdst->crota; + for (int i = 0; i < *nsub; i++, dstp++) { + if (axes[i] > 0) { + int k = axes[i] - 1; + *dstp = *(srcp+k); + } + } + } + + wcsdst->altlin = wcssrc->altlin; + wcsdst->velref = wcssrc->velref; + + // Auxiliary coordinate system information. + strncpy(wcsdst->alt, wcssrc->alt, 4); + wcsdst->colnum = wcssrc->colnum; + + for (int i = 0; i < *nsub; i++) { + if (axes[i] > 0) { + int k = axes[i] - 1; + if (wcssrc->colax) wcsdst->colax[i] = wcssrc->colax[k]; + if (wcssrc->cname) strncpy(wcsdst->cname[i], wcssrc->cname[k], 72); + if (wcssrc->crder) wcsdst->crder[i] = wcssrc->crder[k]; + if (wcssrc->csyer) wcsdst->csyer[i] = wcssrc->csyer[k]; + if (wcssrc->czphs) wcsdst->czphs[i] = wcssrc->czphs[k]; + if (wcssrc->cperi) wcsdst->cperi[i] = wcssrc->cperi[k]; + } + } + + strncpy(wcsdst->wcsname, wcssrc->wcsname, 72); + + strncpy(wcsdst->timesys, wcssrc->timesys, 72); + strncpy(wcsdst->trefpos, wcssrc->trefpos, 72); + strncpy(wcsdst->trefdir, wcssrc->trefdir, 72); + strncpy(wcsdst->plephem, wcssrc->plephem, 72); + + strncpy(wcsdst->timeunit, wcssrc->timeunit, 72); + strncpy(wcsdst->dateref, wcssrc->dateref, 72); + wcsdst->mjdref[0] = wcssrc->mjdref[0]; + wcsdst->mjdref[1] = wcssrc->mjdref[1]; + wcsdst->timeoffs = wcssrc->timeoffs; + + strncpy(wcsdst->dateobs, wcssrc->dateobs, 72); + strncpy(wcsdst->datebeg, wcssrc->datebeg, 72); + strncpy(wcsdst->dateavg, wcssrc->dateavg, 72); + strncpy(wcsdst->dateend, wcssrc->dateend, 72); + + wcsdst->mjdobs = wcssrc->mjdobs; + wcsdst->mjdbeg = wcssrc->mjdbeg; + wcsdst->mjdavg = wcssrc->mjdavg; + wcsdst->mjdend = wcssrc->mjdend; + wcsdst->jepoch = wcssrc->jepoch; + wcsdst->bepoch = wcssrc->bepoch; + wcsdst->tstart = wcssrc->tstart; + wcsdst->tstop = wcssrc->tstop; + wcsdst->xposure = wcssrc->xposure; + wcsdst->telapse = wcssrc->telapse; + + wcsdst->timsyer = wcssrc->timsyer; + wcsdst->timrder = wcssrc->timrder; + wcsdst->timedel = wcssrc->timedel; + wcsdst->timepixr = wcssrc->timepixr; + + wcsdst->obsgeo[0] = wcssrc->obsgeo[0]; + wcsdst->obsgeo[1] = wcssrc->obsgeo[1]; + wcsdst->obsgeo[2] = wcssrc->obsgeo[2]; + wcsdst->obsgeo[3] = wcssrc->obsgeo[3]; + wcsdst->obsgeo[4] = wcssrc->obsgeo[4]; + wcsdst->obsgeo[5] = wcssrc->obsgeo[5]; + + strncpy(wcsdst->obsorbit, wcssrc->obsorbit, 72); + strncpy(wcsdst->radesys, wcssrc->radesys, 72); + wcsdst->equinox = wcssrc->equinox; + strncpy(wcsdst->specsys, wcssrc->specsys, 72); + strncpy(wcsdst->ssysobs, wcssrc->ssysobs, 72); + wcsdst->velosys = wcssrc->velosys; + wcsdst->zsource = wcssrc->zsource; + strncpy(wcsdst->ssyssrc, wcssrc->ssyssrc, 72); + wcsdst->velangl = wcssrc->velangl; + + + // Additional auxiliary coordinate system information. + if (wcssrc->aux && !wcsdst->aux) { + if ((wcsdst->aux = calloc(1, sizeof(struct auxprm))) == 0x0) { + status = wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + goto cleanup; + } + + wcsdst->m_aux = wcsdst->aux; + + wcsdst->aux->rsun_ref = wcssrc->aux->rsun_ref; + wcsdst->aux->dsun_obs = wcssrc->aux->dsun_obs; + wcsdst->aux->crln_obs = wcssrc->aux->crln_obs; + wcsdst->aux->hgln_obs = wcssrc->aux->hgln_obs; + wcsdst->aux->hglt_obs = wcssrc->aux->hglt_obs; + + wcsdst->aux->a_radius = wcssrc->aux->a_radius; + wcsdst->aux->b_radius = wcssrc->aux->b_radius; + wcsdst->aux->c_radius = wcssrc->aux->c_radius; + wcsdst->aux->blon_obs = wcssrc->aux->blon_obs; + wcsdst->aux->blat_obs = wcssrc->aux->blat_obs; + wcsdst->aux->bdis_obs = wcssrc->aux->bdis_obs; + } + + + // Coordinate lookup tables; only copy what's needed. + wcsdst->ntab = 0; + for (int itab = 0; itab < wcssrc->ntab; itab++) { + // Is this table wanted? + for (int m = 0; m < wcssrc->tab[itab].M; m++) { + int i = wcssrc->tab[itab].map[m]; + + if (map[i]) { + wcsdst->ntab++; + break; + } + } + } + + if (wcsdst->ntab) { + // Allocate memory for tabprm structs. + if ((wcsdst->tab = calloc(wcsdst->ntab, sizeof(struct tabprm))) == 0x0) { + wcsdst->ntab = 0; + + status = wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + goto cleanup; + } + + wcsdst->m_tab = wcsdst->tab; + } + + struct tabprm *tab = wcsdst->tab; + for (int itab = 0; itab < wcssrc->ntab; itab++) { + for (int m = 0; m < wcssrc->tab[itab].M; m++) { + int i = wcssrc->tab[itab].map[m]; + + if (map[i]) { + tab->flag = -1; + if ((status = tabcpy(1, wcssrc->tab + itab, tab))) { + wcserr_set(WCS_ERRMSG(wcs_taberr[status])); + goto cleanup; + } + + // Translate axis numbers in tab->map[]. + for (int m = 0; m < wcssrc->tab[itab].M; m++) { + // Table axis mapping, followed by... + int i = wcssrc->tab[itab].map[m]; + + // ...subimaging axis mapping. + int j = map[i] - 1; + if (j < 0) { + // In general, multi-dimensional tables (i.e. with M > 1) are not + // separable, so if one axis is selected then all must be. + status = wcserr_set(WCSERR_SET(WCSERR_NON_SEPARABLE), + "Table with M>1 depends on axis excluded from the subimage"); + goto cleanup; + } + + tab->map[m] = j; + } + + tab++; + break; + } + } + } + + + // Distortion parameters (in linprm). + for (int m = 0; m < 2; m++) { + struct disprm *dissrc, *disdst; + if (m == 0) { + dissrc = wcssrc->lin.dispre; + disdst = wcsdst->lin.dispre; + } else { + dissrc = wcssrc->lin.disseq; + disdst = wcsdst->lin.disseq; + } + + if (dissrc) { + disdst->naxis = *nsub; + + // Distortion type and maximum distortion (but not total distortion). + for (int j = 0; j < *nsub; j++) { + if (axes[j] > 0) { + int k = axes[j] - 1; + strncpy(disdst->dtype[j], dissrc->dtype[k], 72); + disdst->maxdis[j] = dissrc->maxdis[k]; + } + } + + // DPja or DQia keyvalues. + int ndp = 0; + struct dpkey *dpdst = disdst->dp; + for (int j = 0; j < *nsub; j++) { + if (axes[j] == 0) continue; + + // Determine the axis mapping. + int axmap[32]; + for (int jhat = 0; jhat < 32; jhat++) { + axmap[jhat] = -1; + } + + int Nhat = 0; + struct dpkey *dpsrc = dissrc->dp; + for (int idp = 0; idp < dissrc->ndp; idp++, dpsrc++) { + if (dpsrc->j != axes[j]) continue; + if (dpsrc->field[1] != pq[m]) continue; + char *fp; + if ((fp = strchr(dpsrc->field, '.')) == 0x0) continue; + fp++; + + if (strncmp(fp, "NAXES", 6) == 0) { + Nhat = dpkeyi(dpsrc); + } else if (strncmp(fp, "AXIS.", 5) == 0) { + int jhat; + sscanf(fp+5, "%d", &jhat); + axmap[jhat-1] = dpkeyi(dpsrc) - 1; + } + } + + for (int jhat = 0; jhat < Nhat; jhat++) { + if (axmap[jhat] < 0) { + axmap[jhat] = jhat; + } + } + + // Copy the DPja or DQia keyvalues. + dpsrc = dissrc->dp; + for (int idp = 0; idp < dissrc->ndp; idp++, dpsrc++) { + if (dpsrc->j != axes[j]) continue; + if (dpsrc->field[1] != pq[m]) continue; + char *fp; + if ((fp = strchr(dpsrc->field, '.')) == 0x0) continue; + fp++; + + if (strncmp(fp, "AXIS.", 5) == 0) { + // Skip it, we will create our own later. + continue; + } + + *dpdst = *dpsrc; + char ctmp[16]; + sprintf(ctmp, "%d", j+1); + dpdst->field[2] = ctmp[0]; + dpdst->j = j+1; + + ndp++; + dpdst++; + + if (strncmp(fp, "NAXES", 6) == 0) { + for (int jhat = 0; jhat < Nhat; jhat++) { + strcpy(dpdst->field, dpsrc->field); + dpdst->field[2] = ctmp[0]; + fp = strchr(dpdst->field, '.') + 1; + sprintf(fp, "AXIS.%d", jhat+1); + dpdst->j = j+1; + dpdst->type = 0; + dpdst->value.i = map[axmap[jhat]]; + + ndp++; + dpdst++; + } + } + } + } + + disdst->ndp = ndp; + } + } + + +cleanup: + if (itmp) free(itmp); + if (dealloc) { + free(axes); + } + + if (status && wcsdst->m_aux) { + free(wcsdst->m_aux); + wcsdst->aux = 0x0; + wcsdst->m_aux = 0x0; + } + + if (status && wcsdst->m_tab) { + tabfree(wcsdst->m_tab); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int wcscompare( + int cmp, + double tol, + const struct wcsprm *wcs1, + const struct wcsprm *wcs2, + int *equal) + +{ + int status; + + if (wcs1 == 0x0) return WCSERR_NULL_POINTER; + if (wcs2 == 0x0) return WCSERR_NULL_POINTER; + if (equal == 0x0) return WCSERR_NULL_POINTER; + + *equal = 0; + + if (wcs1->naxis != wcs2->naxis) { + return 0; + } + + int naxis = wcs1->naxis; + int naxis2 = wcs1->naxis*wcs1->naxis; + + if (cmp & WCSCOMPARE_CRPIX) { + // Don't compare crpix. + } else if (cmp & WCSCOMPARE_TILING) { + for (int i = 0; i < naxis; ++i) { + double diff = wcs1->crpix[i] - wcs2->crpix[i]; + if ((double)(int)(diff) != diff) { + return 0; + } + } + } else { + if (!wcsutil_dblEq(naxis, tol, wcs1->crpix, wcs2->crpix)) { + return 0; + } + } + + if (!wcsutil_dblEq(naxis2, tol, wcs1->pc, wcs2->pc) || + !wcsutil_dblEq(naxis, tol, wcs1->cdelt, wcs2->cdelt) || + !wcsutil_dblEq(naxis, tol, wcs1->crval, wcs2->crval) || + !wcsutil_strEq(naxis, wcs1->cunit, wcs2->cunit) || + !wcsutil_strEq(naxis, wcs1->ctype, wcs2->ctype) || + !wcsutil_dblEq(1, tol, &wcs1->lonpole, &wcs2->lonpole) || + !wcsutil_dblEq(1, tol, &wcs1->latpole, &wcs2->latpole) || + !wcsutil_dblEq(1, tol, &wcs1->restfrq, &wcs2->restfrq) || + !wcsutil_dblEq(1, tol, &wcs1->restwav, &wcs2->restwav) || + wcs1->npv != wcs2->npv || + wcs1->nps != wcs2->nps) { + return 0; + } + + // Compare pv cards, which may not be in the same order + for (int i = 0; i < wcs1->npv; ++i) { + int j; + for (j = 0; j < wcs2->npv; ++j) { + if (wcs1->pv[i].i == wcs2->pv[j].i && + wcs1->pv[i].m == wcs2->pv[j].m) { + if (!wcsutil_dblEq(1, tol, &wcs1->pv[i].value, &wcs2->pv[j].value)) { + return 0; + } + break; + } + } + // We didn't find a match, so they are not equal + if (j == wcs2->npv) { + return 0; + } + } + + // Compare ps cards, which may not be in the same order + for (int i = 0; i < wcs1->nps; ++i) { + int j; + for (j = 0; j < wcs2->nps; ++j) { + if (wcs1->ps[i].i == wcs2->ps[j].i && + wcs1->ps[i].m == wcs2->ps[j].m) { + if (strncmp(wcs1->ps[i].value, wcs2->ps[j].value, 72)) { + return 0; + } + break; + } + } + // We didn't find a match, so they are not equal + if (j == wcs2->nps) { + return 0; + } + } + + if (abs(wcs1->flag) != WCSSET || abs(wcs2->flag) != WCSSET) { + if (!wcsutil_dblEq(naxis2, tol, wcs1->cd, wcs2->cd) || + !wcsutil_dblEq(naxis, tol, wcs1->crota, wcs2->crota) || + wcs1->altlin != wcs2->altlin || + wcs1->velref != wcs2->velref) { + return 0; + } + } + + if (!(cmp & WCSCOMPARE_ANCILLARY)) { + if (strncmp(wcs1->alt, wcs2->alt, 4) || + wcs1->colnum != wcs2->colnum || + !wcsutil_intEq(naxis, wcs1->colax, wcs2->colax) || + !wcsutil_strEq(naxis, wcs1->cname, wcs2->cname) || + !wcsutil_dblEq(naxis, tol, wcs1->crder, wcs2->crder) || + !wcsutil_dblEq(naxis, tol, wcs1->csyer, wcs2->csyer) || + !wcsutil_dblEq(naxis, tol, wcs1->czphs, wcs2->czphs) || + !wcsutil_dblEq(naxis, tol, wcs1->cperi, wcs2->cperi) || + strncmp(wcs1->wcsname, wcs2->wcsname, 72) || + strncmp(wcs1->timesys, wcs2->timesys, 72) || + strncmp(wcs1->trefpos, wcs2->trefpos, 72) || + strncmp(wcs1->trefdir, wcs2->trefdir, 72) || + strncmp(wcs1->plephem, wcs2->plephem, 72) || + strncmp(wcs1->timeunit, wcs2->timeunit, 72) || + strncmp(wcs1->dateref, wcs2->dateref, 72) || + !wcsutil_dblEq(2, tol, wcs1->mjdref, wcs2->mjdref) || + !wcsutil_dblEq(1, tol, &wcs1->timeoffs, &wcs2->timeoffs) || + strncmp(wcs1->dateobs, wcs2->dateobs, 72) || + strncmp(wcs1->datebeg, wcs2->datebeg, 72) || + strncmp(wcs1->dateavg, wcs2->dateavg, 72) || + strncmp(wcs1->dateend, wcs2->dateend, 72) || + !wcsutil_dblEq(1, tol, &wcs1->mjdobs, &wcs2->mjdobs) || + !wcsutil_dblEq(1, tol, &wcs1->mjdbeg, &wcs2->mjdbeg) || + !wcsutil_dblEq(1, tol, &wcs1->mjdavg, &wcs2->mjdavg) || + !wcsutil_dblEq(1, tol, &wcs1->mjdend, &wcs2->mjdend) || + !wcsutil_dblEq(1, tol, &wcs1->jepoch, &wcs2->jepoch) || + !wcsutil_dblEq(1, tol, &wcs1->bepoch, &wcs2->bepoch) || + !wcsutil_dblEq(1, tol, &wcs1->tstart, &wcs2->tstart) || + !wcsutil_dblEq(1, tol, &wcs1->tstop, &wcs2->tstop) || + !wcsutil_dblEq(1, tol, &wcs1->xposure, &wcs2->xposure) || + !wcsutil_dblEq(1, tol, &wcs1->telapse, &wcs2->telapse) || + !wcsutil_dblEq(1, tol, &wcs1->timsyer, &wcs2->timsyer) || + !wcsutil_dblEq(1, tol, &wcs1->timrder, &wcs2->timrder) || + !wcsutil_dblEq(1, tol, &wcs1->timedel, &wcs2->timedel) || + !wcsutil_dblEq(1, tol, &wcs1->timepixr, &wcs2->timepixr) || + !wcsutil_dblEq(6, tol, wcs1->obsgeo, wcs2->obsgeo) || + strncmp(wcs1->obsorbit, wcs2->obsorbit, 72) || + strncmp(wcs1->radesys, wcs2->radesys, 72) || + !wcsutil_dblEq(1, tol, &wcs1->equinox, &wcs2->equinox) || + strncmp(wcs1->specsys, wcs2->specsys, 72) || + strncmp(wcs1->ssysobs, wcs2->ssysobs, 72) || + !wcsutil_dblEq(1, tol, &wcs1->velosys, &wcs2->velosys) || + !wcsutil_dblEq(1, tol, &wcs1->zsource, &wcs2->zsource) || + strncmp(wcs1->ssyssrc, wcs2->ssyssrc, 72) || + !wcsutil_dblEq(1, tol, &wcs1->velangl, &wcs2->velangl)) { + return 0; + } + + // Compare additional auxiliary parameters. + if (wcs1->aux && wcs2->aux) { + if (!wcsutil_dblEq(1, tol, &wcs1->aux->rsun_ref, &wcs2->aux->rsun_ref) || + !wcsutil_dblEq(1, tol, &wcs1->aux->dsun_obs, &wcs2->aux->dsun_obs) || + !wcsutil_dblEq(1, tol, &wcs1->aux->crln_obs, &wcs2->aux->crln_obs) || + !wcsutil_dblEq(1, tol, &wcs1->aux->hgln_obs, &wcs2->aux->hgln_obs) || + !wcsutil_dblEq(1, tol, &wcs1->aux->hglt_obs, &wcs2->aux->hglt_obs)) { + return 0; + } + + if (!wcsutil_dblEq(1, tol, &wcs1->aux->a_radius, &wcs2->aux->a_radius) || + !wcsutil_dblEq(1, tol, &wcs1->aux->b_radius, &wcs2->aux->b_radius) || + !wcsutil_dblEq(1, tol, &wcs1->aux->c_radius, &wcs2->aux->c_radius) || + !wcsutil_dblEq(1, tol, &wcs1->aux->blon_obs, &wcs2->aux->blon_obs) || + !wcsutil_dblEq(1, tol, &wcs1->aux->blat_obs, &wcs2->aux->blat_obs) || + !wcsutil_dblEq(1, tol, &wcs1->aux->bdis_obs, &wcs2->aux->bdis_obs)) { + return 0; + } + } else if (wcs1->aux || wcs2->aux) { + return 0; + } + } + + // Compare tabular parameters + if (wcs1->ntab != wcs2->ntab) { + return 0; + } + + for (int i = 0; i < wcs1->ntab; ++i) { + int tab_equal; + if ((status = tabcmp(0, tol, &wcs1->tab[i], &wcs2->tab[i], &tab_equal))) { + return status; + } + if (!tab_equal) { + return 0; + } + } + + *equal = 1; + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsfree(struct wcsprm *wcs) + +{ + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + if (wcs->flag == -1) { + wcs->lin.flag = -1; + + } else { + // Optionally allocated by wcsinit() for given parameters. + if (wcs->m_flag == WCSSET) { + // Start by cleaning the slate. + if (wcs->crpix == wcs->m_crpix) wcs->crpix = 0x0; + if (wcs->pc == wcs->m_pc) wcs->pc = 0x0; + if (wcs->cdelt == wcs->m_cdelt) wcs->cdelt = 0x0; + if (wcs->crval == wcs->m_crval) wcs->crval = 0x0; + if (wcs->cunit == wcs->m_cunit) wcs->cunit = 0x0; + if (wcs->ctype == wcs->m_ctype) wcs->ctype = 0x0; + if (wcs->pv == wcs->m_pv) wcs->pv = 0x0; + if (wcs->ps == wcs->m_ps) wcs->ps = 0x0; + if (wcs->cd == wcs->m_cd) wcs->cd = 0x0; + if (wcs->crota == wcs->m_crota) wcs->crota = 0x0; + if (wcs->colax == wcs->m_colax) wcs->colax = 0x0; + if (wcs->cname == wcs->m_cname) wcs->cname = 0x0; + if (wcs->crder == wcs->m_crder) wcs->crder = 0x0; + if (wcs->csyer == wcs->m_csyer) wcs->csyer = 0x0; + if (wcs->czphs == wcs->m_czphs) wcs->czphs = 0x0; + if (wcs->cperi == wcs->m_cperi) wcs->cperi = 0x0; + + if (wcs->aux == wcs->m_aux) wcs->aux = 0x0; + if (wcs->tab == wcs->m_tab) wcs->tab = 0x0; + if (wcs->wtb == wcs->m_wtb) wcs->wtb = 0x0; + + // Now release the memory. + if (wcs->m_crpix) free(wcs->m_crpix); + if (wcs->m_pc) free(wcs->m_pc); + if (wcs->m_cdelt) free(wcs->m_cdelt); + if (wcs->m_crval) free(wcs->m_crval); + if (wcs->m_cunit) free(wcs->m_cunit); + if (wcs->m_ctype) free(wcs->m_ctype); + if (wcs->m_pv) free(wcs->m_pv); + if (wcs->m_ps) free(wcs->m_ps); + if (wcs->m_cd) free(wcs->m_cd); + if (wcs->m_crota) free(wcs->m_crota); + if (wcs->m_colax) free(wcs->m_colax); + if (wcs->m_cname) free(wcs->m_cname); + if (wcs->m_crder) free(wcs->m_crder); + if (wcs->m_csyer) free(wcs->m_csyer); + if (wcs->m_czphs) free(wcs->m_czphs); + if (wcs->m_cperi) free(wcs->m_cperi); + + // May have been allocated by wcspih() or wcssub(). + if (wcs->m_aux) free(wcs->m_aux); + + // Allocated unconditionally by wcstab(). + if (wcs->m_tab) { + for (int itab = 0; itab < wcs->ntab; itab++) { + tabfree(wcs->m_tab + itab); + } + + free(wcs->m_tab); + } + if (wcs->m_wtb) free(wcs->m_wtb); + } + + // Allocated unconditionally by wcsset(). + if (wcs->types) free(wcs->types); + + if (wcs->lin.crpix == wcs->m_crpix) wcs->lin.crpix = 0x0; + if (wcs->lin.pc == wcs->m_pc) wcs->lin.pc = 0x0; + if (wcs->lin.cdelt == wcs->m_cdelt) wcs->lin.cdelt = 0x0; + } + + wcs->m_flag = 0; + wcs->m_naxis = 0x0; + wcs->m_crpix = 0x0; + wcs->m_pc = 0x0; + wcs->m_cdelt = 0x0; + wcs->m_crval = 0x0; + wcs->m_cunit = 0x0; + wcs->m_ctype = 0x0; + wcs->m_pv = 0x0; + wcs->m_ps = 0x0; + wcs->m_cd = 0x0; + wcs->m_crota = 0x0; + wcs->m_colax = 0x0; + wcs->m_cname = 0x0; + wcs->m_crder = 0x0; + wcs->m_csyer = 0x0; + wcs->m_czphs = 0x0; + wcs->m_cperi = 0x0; + + wcs->m_aux = 0x0; + + wcs->ntab = 0; + wcs->m_tab = 0x0; + wcs->nwtb = 0; + wcs->m_wtb = 0x0; + + wcs->types = 0x0; + + linfree(&(wcs->lin)); + celfree(&(wcs->cel)); + spcfree(&(wcs->spc)); + + wcserr_clear(&(wcs->err)); + + wcs->flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcstrim(struct wcsprm *wcs) + +{ + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + if (wcs->m_flag != WCSSET) { + // Nothing to do. + return 0; + } + + if (abs(wcs->flag) != WCSSET) { + return WCSERR_UNSET; + } + + if (wcs->npv < wcs->npvmax) { + if (wcs->m_pv) { + if (wcs->npv == 0) { + free(wcs->m_pv); + wcs->pv = wcs->m_pv = 0x0; + } else { + size_t size = wcs->npv * sizeof(struct pvcard); + // No error if realloc() fails, it will leave the array untouched. + if ((wcs->pv = wcs->m_pv = realloc(wcs->m_pv, size))) { + wcs->npvmax = wcs->npv; + } + } + } + } + + if (wcs->nps < wcs->npsmax) { + if (wcs->m_ps) { + if (wcs->nps == 0) { + free(wcs->m_ps); + wcs->ps = wcs->m_ps = 0x0; + } else { + size_t size = wcs->nps * sizeof(struct pscard); + // No error if realloc() fails, it will leave the array untouched. + if ((wcs->ps = wcs->m_ps = realloc(wcs->m_ps, size))) { + wcs->npsmax = wcs->nps; + } + } + } + } + + if (!(wcs->altlin & 2)) { + if (wcs->m_cd) { + free(wcs->m_cd); + wcs->cd = wcs->m_cd = 0x0; + } + } + + if (!(wcs->altlin & 4)) { + if (wcs->m_crota) { + free(wcs->m_crota); + wcs->crota = wcs->m_crota = 0x0; + } + } + + if (wcs->colax) { + if (wcsutil_all_ival(wcs->naxis, 0, wcs->colax)) { + free(wcs->m_colax); + wcs->colax = wcs->m_colax = 0x0; + } + } + + if (wcs->cname) { + if (wcsutil_all_sval(wcs->naxis, "", (const char (*)[72])wcs->cname)) { + free(wcs->m_cname); + wcs->cname = wcs->m_cname = 0x0; + } + } + + if (wcs->crder) { + if (wcsutil_all_dval(wcs->naxis, UNDEFINED, wcs->crder)) { + free(wcs->m_crder); + wcs->crder = wcs->m_crder = 0x0; + } + } + + if (wcs->csyer) { + if (wcsutil_all_dval(wcs->naxis, UNDEFINED, wcs->csyer)) { + free(wcs->m_csyer); + wcs->csyer = wcs->m_csyer = 0x0; + } + } + + if (wcs->czphs) { + if (wcsutil_all_dval(wcs->naxis, UNDEFINED, wcs->czphs)) { + free(wcs->m_czphs); + wcs->czphs = wcs->m_czphs = 0x0; + } + } + + if (wcs->cperi) { + if (wcsutil_all_dval(wcs->naxis, UNDEFINED, wcs->cperi)) { + free(wcs->m_cperi); + wcs->cperi = wcs->m_cperi = 0x0; + } + } + + // Reset the struct (to store the new checksum). + int status; + wcs->flag = (wcs->flag == -WCSSET) ? 1 : 0; + if ((status = wcsset(wcs))) return status; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcssize(const struct wcsprm *wcs, int sizes[2]) + +{ + if (wcs == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct wcsprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + int exsizes[2]; + int naxis = wcs->naxis; + + // wcsprm::crpix[]. + sizes[1] += naxis * sizeof(double); + + // wcsprm::pc[]. + sizes[1] += naxis*naxis * sizeof(double); + + // wcsprm::cdelt[]. + sizes[1] += naxis * sizeof(double); + + // wcsprm::crval[]. + sizes[1] += naxis * sizeof(double); + + // wcsprm::cunit[]. + if (wcs->cunit) { + sizes[1] += naxis * sizeof(char [72]); + } + + // wcsprm::ctype[]. + sizes[1] += naxis * sizeof(char [72]); + + // wcsprm::pv[]. + if (wcs->pv) { + sizes[1] += wcs->npvmax * sizeof(struct pvcard); + } + + // wcsprm::ps[]. + if (wcs->ps) { + sizes[1] += wcs->npsmax * sizeof(struct pscard); + } + + // wcsprm::cd[]. + if (wcs->cd) { + sizes[1] += naxis*naxis * sizeof(double); + } + + // wcsprm::crota[]. + if (wcs->crota) { + sizes[1] += naxis * sizeof(double); + } + + // wcsprm::colax[]. + if (wcs->colax) { + sizes[1] += naxis * sizeof(int); + } + + // wcsprm::cname[]. + if (wcs->cname) { + sizes[1] += naxis * sizeof(char [72]); + } + + // wcsprm::crder[]. + if (wcs->crder) { + sizes[1] += naxis * sizeof(double); + } + + // wcsprm::csyer[]. + if (wcs->csyer) { + sizes[1] += naxis * sizeof(double); + } + + // wcsprm::czphs[]. + if (wcs->czphs) { + sizes[1] += naxis * sizeof(double); + } + + // wcsprm::cperi[]. + if (wcs->cperi) { + sizes[1] += naxis * sizeof(double); + } + + // wcsprm::aux. + if (wcs->aux) { + sizes[1] += sizeof(struct auxprm); + } + + // wcsprm::tab. + for (int itab = 0; itab < wcs->ntab; itab++) { + tabsize(wcs->tab + itab, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + } + + // wcsprm::wtb. + if (wcs->wtb) { + sizes[1] += wcs->nwtb * sizeof(struct wtbarr); + } + + // wcsprm::lin. + linsize(&(wcs->lin), exsizes); + sizes[1] += exsizes[1]; + + // wcsprm::err. + wcserr_size(wcs->err, exsizes); + sizes[1] += exsizes[0] + exsizes[1]; + + return 0; +} + +//---------------------------------------------------------------------------- + +int auxsize(const struct auxprm *aux, int sizes[2]) + +{ + if (aux == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct auxprm); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsenq(const struct wcsprm *wcs, int enquiry) + +{ + // Initialize. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + int answer = 0; + + if (enquiry & WCSENQ_MEM) { + if (wcs->m_flag != WCSSET) return 0; + answer = 1; + } + + if (enquiry & WCSENQ_SET) { + if (abs(wcs->flag) != WCSSET) return 0; + answer = 1; + } + + if (enquiry & WCSENQ_BYP) { + if (wcs->flag != 1 && wcs->flag != -WCSSET) return 0; + answer = 1; + } + + if (enquiry & WCSENQ_CHK) { + if (abs(wcs->flag) != WCSSET) return 0; + if (wcs->chksum != wcs_chksum(wcs)) return 0; + answer = 1; + } + + return answer; +} + +//---------------------------------------------------------------------------- + +static void wcsprt_auxc(const char *name, const char *value) +{ + if (value[0] == '\0') { + wcsprintf(" %s: UNDEFINED\n", name); + } else { + wcsprintf(" %s: \"%s\"\n", name, value); + } +} + +static void wcsprt_auxd(const char *name, double value) +{ + if (undefined(value)) { + wcsprintf(" %s: UNDEFINED\n", name); + } else { + wcsprintf(" %s: %15.9f\n", name, value); + } +} + +int wcsprt(const struct wcsprm *wcs) + +{ + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + if (abs(wcs->flag) != WCSSET) { + wcsprintf("The wcsprm struct is UNINITIALIZED.\n"); + return 0; + } + + // Parameters supplied... + wcsprintf(" flag: %d\n", wcs->flag); + wcsprintf(" naxis: %d\n", wcs->naxis); + WCSPRINTF_PTR(" crpix: ", wcs->crpix, "\n"); + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" %#- 11.5g", wcs->crpix[i]); + } + wcsprintf("\n"); + + // ...linear transformation. + int k = 0; + WCSPRINTF_PTR(" pc: ", wcs->pc, "\n"); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" pc[%d][]:", i); + for (int j = 0; j < wcs->naxis; j++) { + wcsprintf(" %#- 11.5g", wcs->pc[k++]); + } + wcsprintf("\n"); + } + + // ...coordinate increment at reference point. + WCSPRINTF_PTR(" cdelt: ", wcs->cdelt, "\n"); + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" %#- 11.5g", wcs->cdelt[i]); + } + wcsprintf("\n"); + + // ...coordinate value at reference point. + WCSPRINTF_PTR(" crval: ", wcs->crval, "\n"); + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" %#- 11.5g", wcs->crval[i]); + } + wcsprintf("\n"); + + // ...coordinate units and type. + WCSPRINTF_PTR(" cunit: ", wcs->cunit, "\n"); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" \"%s\"\n", wcs->cunit[i]); + } + + WCSPRINTF_PTR(" ctype: ", wcs->ctype, "\n"); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" \"%s\"\n", wcs->ctype[i]); + } + + // ...celestial and spectral transformation parameters. + if (undefined(wcs->lonpole)) { + wcsprintf(" lonpole: UNDEFINED\n"); + } else { + wcsprintf(" lonpole: %9f\n", wcs->lonpole); + } + wcsprintf(" latpole: %9f\n", wcs->latpole); + wcsprintf(" restfrq: %f\n", wcs->restfrq); + wcsprintf(" restwav: %f\n", wcs->restwav); + + // ...parameter values. + wcsprintf(" npv: %d\n", wcs->npv); + wcsprintf(" npvmax: %d\n", wcs->npvmax); + WCSPRINTF_PTR(" pv: ", wcs->pv, "\n"); + for (int k = 0; k < wcs->npv; k++) { + wcsprintf(" %3d%4d %#- 11.5g\n", (wcs->pv[k]).i, + (wcs->pv[k]).m, (wcs->pv[k]).value); + } + wcsprintf(" nps: %d\n", wcs->nps); + wcsprintf(" npsmax: %d\n", wcs->npsmax); + WCSPRINTF_PTR(" ps: ", wcs->ps, "\n"); + for (int k = 0; k < wcs->nps; k++) { + wcsprintf(" %3d%4d %s\n", (wcs->ps[k]).i, + (wcs->ps[k]).m, (wcs->ps[k]).value); + } + + // ...alternate linear transformations. + k = 0; + WCSPRINTF_PTR(" cd: ", wcs->cd, "\n"); + if (wcs->cd) { + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" cd[%d][]:", i); + for (int j = 0; j < wcs->naxis; j++) { + wcsprintf(" %#- 11.5g", wcs->cd[k++]); + } + wcsprintf("\n"); + } + } + + WCSPRINTF_PTR(" crota: ", wcs->crota, "\n"); + if (wcs->crota) { + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" %#- 11.5g", wcs->crota[i]); + } + wcsprintf("\n"); + } + + wcsprintf(" altlin: %d\n", wcs->altlin); + wcsprintf(" velref: %d\n", wcs->velref); + + + + // ...auxiliary coordinate system information. + wcsprintf(" alt: '%c'\n", wcs->alt[0]); + wcsprintf(" colnum: %d\n", wcs->colnum); + + WCSPRINTF_PTR(" colax: ", wcs->colax, "\n"); + if (wcs->colax) { + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf(" %5d", wcs->colax[i]); + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" cname: ", wcs->cname, "\n"); + if (wcs->cname) { + for (int i = 0; i < wcs->naxis; i++) { + if (wcs->cname[i][0] == '\0') { + wcsprintf(" UNDEFINED\n"); + } else { + wcsprintf(" \"%s\"\n", wcs->cname[i]); + } + } + } + + WCSPRINTF_PTR(" crder: ", wcs->crder, "\n"); + if (wcs->crder) { + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + if (undefined(wcs->crder[i])) { + wcsprintf(" UNDEFINED"); + } else { + wcsprintf(" %#- 11.5g", wcs->crder[i]); + } + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" csyer: ", wcs->csyer, "\n"); + if (wcs->csyer) { + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + if (undefined(wcs->csyer[i])) { + wcsprintf(" UNDEFINED"); + } else { + wcsprintf(" %#- 11.5g", wcs->csyer[i]); + } + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" czphs: ", wcs->czphs, "\n"); + if (wcs->czphs) { + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + if (undefined(wcs->czphs[i])) { + wcsprintf(" UNDEFINED"); + } else { + wcsprintf(" %#- 11.5g", wcs->czphs[i]); + } + } + wcsprintf("\n"); + } + + WCSPRINTF_PTR(" cperi: ", wcs->cperi, "\n"); + if (wcs->cperi) { + wcsprintf(" "); + for (int i = 0; i < wcs->naxis; i++) { + if (undefined(wcs->cperi[i])) { + wcsprintf(" UNDEFINED"); + } else { + wcsprintf(" %#- 11.5g", wcs->cperi[i]); + } + } + wcsprintf("\n"); + } + + wcsprt_auxc(" wcsname", wcs->wcsname); + + wcsprt_auxc(" timesys", wcs->timesys); + wcsprt_auxc(" trefpos", wcs->trefpos); + wcsprt_auxc(" trefdir", wcs->trefdir); + wcsprt_auxc(" plephem", wcs->plephem); + wcsprt_auxc("timeunit", wcs->timeunit); + wcsprt_auxc(" dateref", wcs->dateref); + wcsprintf(" mjdref: "); + for (int k = 0; k < 2; k++) { + if (undefined(wcs->mjdref[k])) { + wcsprintf(" UNDEFINED"); + } else { + wcsprintf(" %15.9f", wcs->mjdref[k]); + } + } + wcsprintf("\n"); + wcsprt_auxd("timeoffs", wcs->timeoffs); + + wcsprt_auxc(" dateobs", wcs->dateobs); + wcsprt_auxc(" datebeg", wcs->datebeg); + wcsprt_auxc(" dateavg", wcs->dateavg); + wcsprt_auxc(" dateend", wcs->dateend); + wcsprt_auxd(" mjdobs", wcs->mjdobs); + wcsprt_auxd(" mjdbeg", wcs->mjdbeg); + wcsprt_auxd(" mjdavg", wcs->mjdavg); + wcsprt_auxd(" mjdend", wcs->mjdend); + wcsprt_auxd(" jepoch", wcs->jepoch); + wcsprt_auxd(" bepoch", wcs->bepoch); + wcsprt_auxd(" tstart", wcs->tstart); + wcsprt_auxd(" tstop", wcs->tstop); + wcsprt_auxd(" xposure", wcs->xposure); + wcsprt_auxd(" telapse", wcs->telapse); + + + wcsprt_auxd(" timsyer", wcs->timsyer); + wcsprt_auxd(" timrder", wcs->timrder); + wcsprt_auxd(" timedel", wcs->timedel); + wcsprt_auxd("timepixr", wcs->timepixr); + + wcsprintf(" obsgeo: "); + for (int k = 0; k < 3; k++) { + if (undefined(wcs->obsgeo[k])) { + wcsprintf(" UNDEFINED"); + } else { + wcsprintf(" %15.6f", wcs->obsgeo[k]); + } + } + wcsprintf("\n "); + for (int k = 3; k < 6; k++) { + if (undefined(wcs->obsgeo[k])) { + wcsprintf(" UNDEFINED"); + } else { + wcsprintf(" %15.6f", wcs->obsgeo[k]); + } + } + wcsprintf("\n"); + + wcsprt_auxc("obsorbit", wcs->obsorbit); + wcsprt_auxc(" radesys", wcs->radesys); + wcsprt_auxd(" equinox", wcs->equinox); + wcsprt_auxc(" specsys", wcs->specsys); + wcsprt_auxc(" ssysobs", wcs->ssysobs); + wcsprt_auxd(" velosys", wcs->velosys); + wcsprt_auxd(" zsource", wcs->zsource); + wcsprt_auxc(" ssyssrc", wcs->ssyssrc); + wcsprt_auxd(" velangl", wcs->velangl); + + // ...additional auxiliary coordinate system information. + WCSPRINTF_PTR(" aux: ", wcs->aux, "\n"); + if (wcs->aux) { + wcsprt_auxd("rsun_ref", wcs->aux->rsun_ref); + wcsprt_auxd("dsun_obs", wcs->aux->dsun_obs); + wcsprt_auxd("crln_obs", wcs->aux->crln_obs); + wcsprt_auxd("hgln_obs", wcs->aux->hgln_obs); + wcsprt_auxd("hglt_obs", wcs->aux->hglt_obs); + + wcsprt_auxd("a_radius", wcs->aux->a_radius); + wcsprt_auxd("b_radius", wcs->aux->b_radius); + wcsprt_auxd("c_radius", wcs->aux->c_radius); + wcsprt_auxd("blon_obs", wcs->aux->blon_obs); + wcsprt_auxd("blat_obs", wcs->aux->blat_obs); + wcsprt_auxd("bdis_obs", wcs->aux->bdis_obs); + } + + wcsprintf(" ntab: %d\n", wcs->ntab); + WCSPRINTF_PTR(" tab: ", wcs->tab, ""); + if (wcs->tab != 0x0) wcsprintf(" (see below)"); + wcsprintf("\n"); + wcsprintf(" nwtb: %d\n", wcs->nwtb); + WCSPRINTF_PTR(" wtb: ", wcs->wtb, ""); + if (wcs->wtb != 0x0) wcsprintf(" (see below)"); + wcsprintf("\n"); + + // Derived values. + wcsprintf(" lngtyp: \"%s\"\n", wcs->lngtyp); + wcsprintf(" lattyp: \"%s\"\n", wcs->lattyp); + wcsprintf(" lng: %d\n", wcs->lng); + wcsprintf(" lat: %d\n", wcs->lat); + wcsprintf(" spec: %d\n", wcs->spec); + wcsprintf(" time: %d\n", wcs->time); + wcsprintf(" cubeface: %d\n", wcs->cubeface); + wcsprintf(" chksum:%12d\n", wcs->chksum); + + WCSPRINTF_PTR(" types: ", wcs->types, "\n "); + for (int i = 0; i < wcs->naxis; i++) { + wcsprintf("%5d", wcs->types[i]); + } + wcsprintf("\n"); + + // Contained structs. + wcsprintf(" lin: (see below)\n"); + wcsprintf(" cel: (see below)\n"); + wcsprintf(" spc: (see below)\n"); + + // Error handling. + WCSPRINTF_PTR(" err: ", wcs->err, "\n"); + if (wcs->err) { + wcserr_prt(wcs->err, " "); + } + + // Memory management. + wcsprintf(" m_flag: %d\n", wcs->m_flag); + wcsprintf(" m_naxis: %d\n", wcs->m_naxis); + WCSPRINTF_PTR(" m_crpix: ", wcs->m_crpix, ""); + if (wcs->m_crpix == wcs->crpix) wcsprintf(" (= crpix)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_pc: ", wcs->m_pc, ""); + if (wcs->m_pc == wcs->pc) wcsprintf(" (= pc)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_cdelt: ", wcs->m_cdelt, ""); + if (wcs->m_cdelt == wcs->cdelt) wcsprintf(" (= cdelt)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_crval: ", wcs->m_crval, ""); + if (wcs->m_crval == wcs->crval) wcsprintf(" (= crval)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_cunit: ", wcs->m_cunit, ""); + if (wcs->m_cunit == wcs->cunit) wcsprintf(" (= cunit)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_ctype: ", wcs->m_ctype, ""); + if (wcs->m_ctype == wcs->ctype) wcsprintf(" (= ctype)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_pv: ", wcs->m_pv, ""); + if (wcs->m_pv == wcs->pv) wcsprintf(" (= pv)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_ps: ", wcs->m_ps, ""); + if (wcs->m_ps == wcs->ps) wcsprintf(" (= ps)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_cd: ", wcs->m_cd, ""); + if (wcs->m_cd == wcs->cd) wcsprintf(" (= cd)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_crota: ", wcs->m_crota, ""); + if (wcs->m_crota == wcs->crota) wcsprintf(" (= crota)"); + wcsprintf("\n"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_colax: ", wcs->m_colax, ""); + if (wcs->m_colax == wcs->colax) wcsprintf(" (= colax)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_cname: ", wcs->m_cname, ""); + if (wcs->m_cname == wcs->cname) wcsprintf(" (= cname)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_crder: ", wcs->m_crder, ""); + if (wcs->m_crder == wcs->crder) wcsprintf(" (= crder)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_csyer: ", wcs->m_csyer, ""); + if (wcs->m_csyer == wcs->csyer) wcsprintf(" (= csyer)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_czphs: ", wcs->m_czphs, ""); + if (wcs->m_czphs == wcs->czphs) wcsprintf(" (= czphs)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_cperi: ", wcs->m_cperi, ""); + if (wcs->m_cperi == wcs->cperi) wcsprintf(" (= cperi)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_aux: ", wcs->m_aux, ""); + if (wcs->m_aux == wcs->aux) wcsprintf(" (= aux)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_tab: ", wcs->m_tab, ""); + if (wcs->m_tab == wcs->tab) wcsprintf(" (= tab)"); + wcsprintf("\n"); + WCSPRINTF_PTR(" m_wtb: ", wcs->m_wtb, ""); + if (wcs->m_wtb == wcs->wtb) wcsprintf(" (= wtb)"); + wcsprintf("\n"); + + // Tabular transformation parameters. + struct wtbarr *wtbp = wcs->wtb; + if (wtbp) { + for (int iwtb = 0; iwtb < wcs->nwtb; iwtb++, wtbp++) { + wcsprintf("\n"); + wcsprintf("wtb[%d].*\n", iwtb); + wcsprintf(" i: %d\n", wtbp->i); + wcsprintf(" m: %d\n", wtbp->m); + wcsprintf(" kind: %c\n", wtbp->kind); + wcsprintf(" extnam: %s\n", wtbp->extnam); + wcsprintf(" extver: %d\n", wtbp->extver); + wcsprintf(" extlev: %d\n", wtbp->extlev); + wcsprintf(" ttype: %s\n", wtbp->ttype); + wcsprintf(" row: %ld\n", wtbp->row); + wcsprintf(" ndim: %d\n", wtbp->ndim); + WCSPRINTF_PTR(" dimlen: ", wtbp->dimlen, "\n"); + WCSPRINTF_PTR(" arrayp: ", wtbp->arrayp, " -> "); + WCSPRINTF_PTR("", *(wtbp->arrayp), "\n"); + } + } + + if (wcs->tab) { + for (int itab = 0; itab < wcs->ntab; itab++) { + wcsprintf("\n"); + wcsprintf("tab[%d].*\n", itab); + tabprt(wcs->tab + itab); + } + } + + // Linear transformation parameters. + wcsprintf("\n"); + wcsprintf(" lin.*\n"); + linprt(&(wcs->lin)); + + // Celestial transformation parameters. + wcsprintf("\n"); + wcsprintf(" cel.*\n"); + celprt(&(wcs->cel)); + + // Spectral transformation parameters. + wcsprintf("\n"); + wcsprintf(" spc.*\n"); + spcprt(&(wcs->spc)); + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsperr(const struct wcsprm *wcs, const char *prefix) + +{ + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + if (wcs->err && wcserr_prt(wcs->err, prefix) == 0) { + linperr(&(wcs->lin), prefix); + celperr(&(wcs->cel), prefix); + wcserr_prt(wcs->spc.err, prefix); + if (wcs->tab) { + for (int itab = 0; itab < wcs->ntab; itab++) { + wcserr_prt((wcs->tab + itab)->err, prefix); + } + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsbchk(struct wcsprm *wcs, int bounds) + +{ + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + if (abs(wcs->flag) != WCSSET) { + int status; + if ((status = wcsset(wcs))) return status; + } + + wcs->cel.prj.bounds = bounds; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsset(struct wcsprm *wcs) + +{ + static const char *function = "wcsset"; + + if (wcs == 0x0) return WCSERR_NULL_POINTER; + if (wcs->flag == -WCSSET) return 0; + struct wcserr **err = &(wcs->err); + + // Determine axis types from CTYPEia. + int status; + if ((status = wcs_types(wcs))) { + return status; + } + + // Convert to canonical units. + if ((status = wcs_units(wcs))) { + return status; + } + + int naxis = wcs->naxis; + if (32 < naxis) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), + "naxis must not exceed 32 (got %d)", naxis); + } + + + // Non-linear celestial axes present? + if (wcs->lng >= 0 && wcs->types[wcs->lng] == 2200) { + struct celprm *wcscel = &(wcs->cel); + celini(wcscel); + + // CRVALia, LONPOLEa, and LATPOLEa keyvalues. + wcscel->ref[0] = wcs->crval[wcs->lng]; + wcscel->ref[1] = wcs->crval[wcs->lat]; + wcscel->ref[2] = wcs->lonpole; + wcscel->ref[3] = wcs->latpole; + + // Do alias translation for TPU/TPV before dealing with PVi_ma. + struct prjprm *wcsprj = &(wcscel->prj); + strncpy(wcsprj->code, wcs->ctype[wcs->lng]+5, 3); + wcsprj->code[3] = '\0'; + if (strncmp(wcsprj->code, "TPU", 3) == 0 || + strncmp(wcsprj->code, "TPV", 3) == 0) { + // Translate the PV parameters. + struct disprm *dis; + if ((dis = calloc(1, sizeof(struct disprm))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + int ndpmax = 6 + wcs->npv; + + // Attach it to linprm. Also inits it. + char dpq[16]; + struct linprm *wcslin = &(wcs->lin); + dis->flag = -1; + if (strncmp(wcsprj->code, "TPU", 3) == 0) { + // Prior distortion. + lindist(1, wcslin, dis, ndpmax); + strcpy(dpq, "DP"); + } else { + // Sequent distortion. + lindist(2, wcslin, dis, ndpmax); + strcpy(dpq, "DQ"); + } + + // Yes, the distortion type is "TPV" even for TPU. + strcpy(dis->dtype[wcs->lng], "TPV"); + strcpy(dis->dtype[wcs->lat], "TPV"); + + // Keep the keywords in axis-order to aid debugging. + struct dpkey *keyp = dis->dp; + dis->ndp = 0; + + sprintf(dpq+2, "%d", wcs->lng+1); + dpfill(keyp++, dpq, "NAXES", 0, 0, 2, 0.0); + dpfill(keyp++, dpq, "AXIS.1", 0, 0, 1, 0.0); + dpfill(keyp++, dpq, "AXIS.2", 0, 0, 2, 0.0); + dis->ndp += 3; + + // Copy distortion parameters for the longitude axis. + for (int k = 0; k < wcs->npv; k++) { + if (wcs->pv[k].i != wcs->lng+1) continue; + sprintf(keyp->field, "%s.TPV.%d", dpq, wcs->pv[k].m); + dpfill(keyp++, 0x0, 0x0, 0, 1, 0, wcs->pv[k].value); + dis->ndp++; + } + + // Now the latitude axis. + sprintf(dpq+2, "%d", wcs->lat+1); + dpfill(keyp++, dpq, "NAXES", 0, 0, 2, 0.0); + dpfill(keyp++, dpq, "AXIS.1", 0, 0, 2, 0.0); + dpfill(keyp++, dpq, "AXIS.2", 0, 0, 1, 0.0); + dis->ndp += 3; + + for (int k = 0; k < wcs->npv; k++) { + if (wcs->pv[k].i != wcs->lat+1) continue; + sprintf(keyp->field, "%s.TPV.%d", dpq, wcs->pv[k].m); + dpfill(keyp++, 0x0, 0x0, 0, 1, 0, wcs->pv[k].value); + dis->ndp++; + } + + // Erase PVi_ma associated with the celestial axes. + int n = 0; + for (int k = 0; k < wcs->npv; k++) { + int i = wcs->pv[k].i - 1; + if (i == wcs->lng || i == wcs->lat) continue; + + wcs->pv[n].i = wcs->pv[k].i; + wcs->pv[n].m = wcs->pv[k].m; + wcs->pv[n].value = wcs->pv[k].value; + + n++; + } + + wcs->npv = n; + strcpy(wcsprj->code, "TAN"); + + // As the PVi_ma have now been erased, ctype must be reset to prevent + // this translation from re-occurring if wcsset() is called again. + strcpy(wcs->ctype[wcs->lng]+5, "TAN"); + strcpy(wcs->ctype[wcs->lat]+5, "TAN"); + + } else if (strncmp(wcsprj->code, "TNX", 3) == 0) { + // The WAT distortion should already have been encoded in disseq. + strcpy(wcsprj->code, "TAN"); + strcpy(wcs->ctype[wcs->lng]+5, "TAN"); + strcpy(wcs->ctype[wcs->lat]+5, "TAN"); + + } else if (strncmp(wcsprj->code, "ZPX", 3) == 0) { + // The WAT distortion should already have been encoded in disseq. + strcpy(wcsprj->code, "ZPN"); + strcpy(wcs->ctype[wcs->lng]+5, "ZPN"); + strcpy(wcs->ctype[wcs->lat]+5, "ZPN"); + } + + // PVi_ma keyvalues. + for (int k = 0; k < wcs->npv; k++) { + if (wcs->pv[k].i == 0) { + // From a PROJPn keyword. + wcs->pv[k].i = wcs->lat + 1; + } + + int i = wcs->pv[k].i - 1; + int m = wcs->pv[k].m; + + if (i == wcs->lat) { + // PVi_ma associated with latitude axis. + if (m < 30) { + wcsprj->pv[m] = wcs->pv[k].value; + } + + } else if (i == wcs->lng) { + // PVi_ma associated with longitude axis. + switch (m) { + case 0: + wcscel->offset = (wcs->pv[k].value != 0.0); + break; + case 1: + wcscel->phi0 = wcs->pv[k].value; + break; + case 2: + wcscel->theta0 = wcs->pv[k].value; + break; + case 3: + // If present, overrides LONPOLEa. + wcscel->ref[2] = wcs->pv[k].value; + break; + case 4: + // If present, overrides LATPOLEa. + wcscel->ref[3] = wcs->pv[k].value; + break; + default: + return wcserr_set(WCSERR_SET(WCSERR_BAD_COORD_TRANS), + "PV%i_%i%s: Unrecognized coordinate transformation parameter", + i+1, m, wcs->alt); + break; + } + } + } + + // Do simple alias translations. + if (strncmp(wcs->ctype[wcs->lng]+5, "GLS", 3) == 0) { + wcscel->offset = 1; + wcscel->phi0 = 0.0; + wcscel->theta0 = wcs->crval[wcs->lat]; + strcpy(wcsprj->code, "SFL"); + + } else if (strncmp(wcs->ctype[wcs->lng]+5, "NCP", 3) == 0) { + // Convert NCP to SIN. + if (wcscel->ref[1] == 0.0) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), + "Invalid projection: NCP blows up on the equator"); + } + + strcpy(wcsprj->code, "SIN"); + wcsprj->pv[1] = 0.0; + wcsprj->pv[2] = cosd(wcscel->ref[1])/sind(wcscel->ref[1]); + } + + // Initialize the celestial transformation routines. + wcsprj->r0 = 0.0; + wcscel->flag = 0; + if ((status = celset(wcscel))) { + return wcserr_set(WCS_ERRMSG(wcs_celerr[status])); + } + + // Update LONPOLE, LATPOLE, and PVi_ma keyvalues. + wcs->lonpole = wcscel->ref[2]; + wcs->latpole = wcscel->ref[3]; + + for (int k = 0; k < wcs->npv; k++) { + int i = wcs->pv[k].i - 1; + int m = wcs->pv[k].m; + + if (i == wcs->lng) { + switch (m) { + case 1: + wcs->pv[k].value = wcscel->phi0; + break; + case 2: + wcs->pv[k].value = wcscel->theta0; + break; + case 3: + wcs->pv[k].value = wcscel->ref[2]; + break; + case 4: + wcs->pv[k].value = wcscel->ref[3]; + break; + } + } + } + } + + + // Non-linear spectral axis present? + if (wcs->spec >= 0 && wcs->types[wcs->spec] == 3300) { + char scode[4], stype[5]; + struct spcprm *wcsspc = &(wcs->spc); + spcini(wcsspc); + if ((status = spctype(wcs->ctype[wcs->spec], stype, scode, 0x0, 0x0, 0x0, + 0x0, 0x0, err))) { + return status; + } + strcpy(wcsspc->type, stype); + strcpy(wcsspc->code, scode); + + // CRVALia, RESTFRQa, and RESTWAVa keyvalues. + wcsspc->crval = wcs->crval[wcs->spec]; + wcsspc->restfrq = wcs->restfrq; + wcsspc->restwav = wcs->restwav; + + // PVi_ma keyvalues. + for (int k = 0; k < wcs->npv; k++) { + int i = wcs->pv[k].i - 1; + int m = wcs->pv[k].m; + + if (i == wcs->spec) { + // PVi_ma associated with grism axis. + if (m < 7) { + wcsspc->pv[m] = wcs->pv[k].value; + } + } + } + + // Initialize the spectral transformation routines. + wcsspc->flag = 0; + if ((status = spcset(wcsspc))) { + return wcserr_set(WCS_ERRMSG(wcs_spcerr[status])); + } + } + + + // Tabular axes present? + for (int itab = 0; itab < wcs->ntab; itab++) { + wcs->tab[itab].flag = 0; + if ((status = tabset(wcs->tab + itab))) { + return wcserr_set(WCS_ERRMSG(wcs_taberr[status])); + } + } + + + // Initialize the linear transformation. + wcs->altlin &= 15; + if (wcs->altlin > 1 && !(wcs->altlin & 1)) { + double *pc = wcs->pc; + + if ((wcs->altlin & 2) && !(wcs->altlin & 8)) { + // Copy CDi_ja to PCi_ja and reset CDELTia. + if (!wcs->cd) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), + "ALTLIN == %d but CDij absent", wcs->altlin); + } + + double *cd = wcs->cd; + for (int i = 0; i < naxis; i++) { + for (int j = 0; j < naxis; j++) { + *(pc++) = *(cd++); + } + wcs->cdelt[i] = 1.0; + } + + } else if (wcs->altlin & 4) { + // Construct PCi_ja from CROTAia. + if (!wcs->crota) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_PARAM), + "ALTLIN == %d but CROTAj absent", wcs->altlin); + } + + int i, j; + if ((i = wcs->lng) >= 0 && (j = wcs->lat) >= 0) { + double rho = wcs->crota[j]; + + if (wcs->cdelt[i] == 0.0) { + return wcserr_set(WCSERR_SET(WCSERR_SINGULAR_MTX), + "Singular transformation matrix, CDELT%d is zero", i+1); + } + double lambda = wcs->cdelt[j]/wcs->cdelt[i]; + + *(pc + i*naxis + i) = *(pc + j*naxis + j) = cosd(rho); + *(pc + i*naxis + j) = *(pc + j*naxis + i) = sind(rho); + *(pc + i*naxis + j) *= -lambda; + *(pc + j*naxis + i) /= lambda; + } + } + } + + wcs->lin.crpix = wcs->crpix; + wcs->lin.pc = wcs->pc; + wcs->lin.cdelt = wcs->cdelt; + wcs->lin.flag = 0; + if ((status = linset(&(wcs->lin)))) { + return wcserr_set(WCS_ERRMSG(wcs_linerr[status])); + } + + + // Set defaults for radesys and equinox for equatorial or ecliptic. + if (strcmp(wcs->lngtyp, "RA") == 0 || + strcmp(wcs->lngtyp, "ELON") == 0 || + strcmp(wcs->lngtyp, "HLON") == 0) { + if (wcs->radesys[0] == '\0') { + if (undefined(wcs->equinox)) { + strcpy(wcs->radesys, "ICRS"); + } else if (wcs->equinox < 1984.0) { + strcpy(wcs->radesys, "FK4"); + } else { + strcpy(wcs->radesys, "FK5"); + } + + } else if (strcmp(wcs->radesys, "ICRS") == 0 || + strcmp(wcs->radesys, "GAPPT") == 0) { + // Equinox is not applicable for these coordinate systems. + wcs->equinox = UNDEFINED; + + } else if (undefined(wcs->equinox)) { + if (strcmp(wcs->radesys, "FK5") == 0) { + wcs->equinox = 2000.0; + } else if (strcmp(wcs->radesys, "FK4") == 0 || + strcmp(wcs->radesys, "FK4-NO-E") == 0) { + wcs->equinox = 1950.0; + } + } + + } else { + // No celestial axes, ensure that radesys and equinox are unset. + memset(wcs->radesys, 0, 72); + wcs->equinox = UNDEFINED; + } + + + // Strip off trailing blanks and null-fill auxiliary string members. + if (wcs->alt[0] == '\0') wcs->alt[0] = ' '; + memset(wcs->alt+1, '\0', 3); + + if (wcs->cname) { + for (int i = 0; i < naxis; i++) { + wcsutil_null_fill(72, wcs->cname[i]); + } + } + wcsutil_null_fill(72, wcs->wcsname); + wcsutil_null_fill(72, wcs->timesys); + wcsutil_null_fill(72, wcs->trefpos); + wcsutil_null_fill(72, wcs->trefdir); + wcsutil_null_fill(72, wcs->plephem); + wcsutil_null_fill(72, wcs->timeunit); + wcsutil_null_fill(72, wcs->dateref); + wcsutil_null_fill(72, wcs->dateobs); + wcsutil_null_fill(72, wcs->datebeg); + wcsutil_null_fill(72, wcs->dateavg); + wcsutil_null_fill(72, wcs->dateend); + wcsutil_null_fill(72, wcs->obsorbit); + wcsutil_null_fill(72, wcs->radesys); + wcsutil_null_fill(72, wcs->specsys); + wcsutil_null_fill(72, wcs->ssysobs); + wcsutil_null_fill(72, wcs->ssyssrc); + + // MJDREF defaults to zero if no reference date keywords were defined. + if (wcs->dateref[0] == '\0') { + if (undefined(wcs->mjdref[0])) { + wcs->mjdref[0] = 0.0; + } + if (undefined(wcs->mjdref[1])) { + wcs->mjdref[1] = 0.0; + } + } + + // Compute and store the checksum. + wcs->chksum = wcs_chksum(wcs); + + wcs->flag = (wcs->flag == 1) ? -WCSSET : WCSSET; + + return 0; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +static int wcs_types(struct wcsprm *wcs) + +{ + static const char *function = "wcs_types"; + + const int nalias = 6; + const char aliases [6][4] = {"NCP", "GLS", "TPU", "TPV", "TNX", "ZPX"}; + + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + // Parse the CTYPEia keyvalues. + char pcode[4], requir[16]; + pcode[0] = '\0'; + requir[0] = '\0'; + wcs->lng = -1; + wcs->lat = -1; + wcs->spec = -1; + wcs->time = -1; + wcs->cubeface = -1; + + const char *alt = ""; + if (*(wcs->alt) != ' ') alt = wcs->alt; + + + int naxis = wcs->naxis; + if (wcs->types) free(wcs->types); + if ((wcs->types = calloc(naxis, sizeof(int))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + int *ndx = 0x0; + for (int i = 0; i < naxis; i++) { + // Null fill. + wcsutil_null_fill(72, wcs->ctype[i]); + + char ctypei[16]; + strncpy(ctypei, wcs->ctype[i], 15); + ctypei[15] = '\0'; + + // Check for early Paper IV syntax (e.g. '-SIP' used by Spitzer). + if (strlen(ctypei) == 12 && ctypei[8] == '-') { + // Excise the "4-3-3" or "8-3"-form distortion code. + ctypei[8] = '\0'; + + // Remove trailing dashes from "8-3"-form codes. + for (int j = 7; j > 0; j--) { + if (ctypei[j] != '-') break; + ctypei[j] = '\0'; + } + } + + // Logarithmic or tabular axis? + wcs->types[i] = 0; + if (strcmp(ctypei+4, "-LOG") == 0) { + // Logarithmic axis. + wcs->types[i] = 400; + + } else if (strcmp(ctypei+4, "-TAB") == 0) { + // Tabular axis. + wcs->types[i] = 500; + } + + if (wcs->types[i]) { + // Could have -LOG or -TAB with celestial or spectral types. + ctypei[4] = '\0'; + + // Take care of things like 'FREQ-LOG' or 'RA---TAB'. + for (int j = 3; j >= 0; j--) { + if (ctypei[j] != '-') break; + ctypei[j] = '\0'; + } + } + + // Translate AIPS spectral types for spctyp(). + char specsys[9]; + if (spcaips(ctypei, wcs->velref, ctypei, specsys) == 0) { + strcpy(wcs->ctype[i], ctypei); + if (wcs->specsys[0] == '\0') strcpy(wcs->specsys, specsys); + } + + // Process linear axes. + if (!(strlen(ctypei) == 8 && ctypei[4] == '-')) { + // Identify Stokes, celestial, spectral, and time types. + if (strcmp(ctypei, "STOKES") == 0) { + // STOKES axis. + wcs->types[i] = 1100; + + } else if (strcmp(ctypei, "RA") == 0 || + strcmp(ctypei+1, "LON") == 0 || + strcmp(ctypei+2, "LN") == 0) { + // Longitude axis. + wcs->types[i] += 2000; + if (wcs->lng < 0) { + wcs->lng = i; + strcpy(wcs->lngtyp, ctypei); + } + + } else if (strcmp(ctypei, "DEC") == 0 || + strcmp(ctypei+1, "LAT") == 0 || + strcmp(ctypei+2, "LT") == 0) { + // Latitude axis. + wcs->types[i] += 2001; + if (wcs->lat < 0) { + wcs->lat = i; + strcpy(wcs->lattyp, ctypei); + } + + } else if (strcmp(ctypei, "CUBEFACE") == 0) { + // CUBEFACE axis. + if (wcs->cubeface == -1) { + wcs->types[i] = 2102; + wcs->cubeface = i; + } else { + // Multiple CUBEFACE axes! + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "Multiple CUBEFACE axes (in CTYPE%d%.1s and CTYPE%d%.1s)", + wcs->cubeface+1, alt, i+1, alt); + } + + } else if (spctyp(ctypei, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) == 0) { + // Spectral axis. + if (wcs->spec < 0) wcs->spec = i; + wcs->types[i] += 3000; + + } else if (time_type(ctypei)) { + // Time axis. + if (wcs->time < 0) wcs->time = i; + wcs->types[i] += 4000; + } + + continue; + } + + + // CTYPEia is in "4-3" form; is it a recognized spectral type? + char scode[4]; + if (spctyp(ctypei, 0x0, scode, 0x0, 0x0, 0x0, 0x0, 0x0) == 0) { + // Non-linear spectral axis found. + wcs->types[i] = 3300; + + // Check uniqueness. + if (wcs->spec >= 0) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "Multiple spectral axes (in CTYPE%d%.1s and CTYPE%d%.1s)", + wcs->spec+1, alt, i+1, alt); + } + + wcs->spec = i; + + continue; + } + + + // Is it a recognized celestial projection? + int j; + for (j = 0; j < prj_ncode; j++) { + if (strncmp(ctypei+5, prj_codes[j], 3) == 0) break; + } + + if (j == prj_ncode) { + // Not a standard projection code, maybe it's an alias. + for (j = 0; j < nalias; j++) { + if (strncmp(ctypei+5, aliases[j], 3) == 0) break; + } + + if (j == nalias) { + // Not a recognized algorithm code of any type. + wcs->types[i] = -1; + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "Unrecognized projection code (%s in CTYPE%d%.1s)", + ctypei+5, i+1, alt); + } + } + + // Parse the celestial axis type. + wcs->types[i] = 2200; + if (*pcode == '\0') { + // The first of the two celestial axes. + sprintf(pcode, "%.3s", ctypei+5); + + if (strncmp(ctypei, "RA--", 4) == 0) { + wcs->lng = i; + strcpy(wcs->lngtyp, "RA"); + strcpy(wcs->lattyp, "DEC"); + ndx = &wcs->lat; + sprintf(requir, "DEC--%s", pcode); + } else if (strncmp(ctypei, "DEC-", 4) == 0) { + wcs->lat = i; + strcpy(wcs->lngtyp, "RA"); + strcpy(wcs->lattyp, "DEC"); + ndx = &wcs->lng; + sprintf(requir, "RA---%s", pcode); + } else if (strncmp(ctypei+1, "LON", 3) == 0) { + wcs->lng = i; + sprintf(wcs->lngtyp, "%cLON", ctypei[0]); + sprintf(wcs->lattyp, "%cLAT", ctypei[0]); + ndx = &wcs->lat; + sprintf(requir, "%s-%s", wcs->lattyp, pcode); + } else if (strncmp(ctypei+1, "LAT", 3) == 0) { + wcs->lat = i; + sprintf(wcs->lngtyp, "%cLON", ctypei[0]); + sprintf(wcs->lattyp, "%cLAT", ctypei[0]); + ndx = &wcs->lng; + sprintf(requir, "%s-%s", wcs->lngtyp, pcode); + } else if (strncmp(ctypei+2, "LN", 2) == 0) { + wcs->lng = i; + sprintf(wcs->lngtyp, "%c%cLN", ctypei[0], ctypei[1]); + sprintf(wcs->lattyp, "%c%cLT", ctypei[0], ctypei[1]); + ndx = &wcs->lat; + sprintf(requir, "%s-%s", wcs->lattyp, pcode); + } else if (strncmp(ctypei+2, "LT", 2) == 0) { + wcs->lat = i; + sprintf(wcs->lngtyp, "%c%cLN", ctypei[0], ctypei[1]); + sprintf(wcs->lattyp, "%c%cLT", ctypei[0], ctypei[1]); + ndx = &wcs->lng; + sprintf(requir, "%s-%s", wcs->lngtyp, pcode); + } else { + // Unrecognized celestial type. + wcs->types[i] = -1; + + wcs->lng = -1; + wcs->lat = -1; + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "Unrecognized celestial type (%5s in CTYPE%d%.1s)", + ctypei, i+1, alt); + } + + if (wcs->lat >= 0) wcs->types[i]++; + + } else { + // Looking for the complementary celestial axis. + if (wcs->lat < 0) wcs->types[i]++; + + if (strncmp(ctypei, requir, 8) != 0) { + // Inconsistent projection types. + wcs->lng = -1; + wcs->lat = -1; + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), "Inconsistent " + "projection types (expected %s, got %s in CTYPE%d%.1s)", requir, + ctypei, i+1, alt); + } + + *ndx = i; + requir[0] = '\0'; + } + } + + // Do we have a complementary pair of celestial axes? + if (strcmp(requir, "")) { + // Unmatched celestial axis. + wcs->lng = -1; + wcs->lat = -1; + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "Unmatched celestial axes"); + } + + // Table group numbers. + for (int j = 0; j < wcs->ntab; j++) { + for (int m = 0; m < wcs->tab[j].M; m++) { + // Get image axis number. + int i = wcs->tab[j].map[m]; + + int type = (wcs->types[i] / 100) % 10; + if (type != 5) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "Table parameters set for non-table axis type"); + } + wcs->types[i] += 10 * j; + } + } + + return 0; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +static int time_type(const char *ctype) + +{ + // Is it a recognised time system as listed in Table 2 of WCS Paper VII? + if (strncmp(ctype, "TIME", 4) == 0) return time_code(ctype, 4); + if (strncmp(ctype, "UTC", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "TAI", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "IAT", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "TT", 2) == 0) return time_code(ctype, 2); + if (strncmp(ctype, "TDB", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "TDT", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "GPS", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "TCB", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "TCG", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "GMT", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "UT1", 3) == 0) return time_code(ctype, 3); + if (strncmp(ctype, "UT", 2) == 0) return time_code(ctype, 2); + if (strncmp(ctype, "ET", 2) == 0) return time_code(ctype, 2); + if (strncmp(ctype, "LOCAL",5) == 0) return 1; + + return 0; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +static int time_code(const char *ctype, int nc) + +{ + // If no algorithm code then we're finished. + if (*(ctype+nc) == '\0') return 1; + + // Check the correct number of hyphens for things like "TT---TAB". + while (nc < 4) { + if (*(ctype+nc) != '-') return 0; + nc++; + } + + // Is it a code applicable to time-like axes? + const char *code = ctype + 4; + if (*code == '-') { + if (strncmp(code, "-LOG", 5) == 0) return 1; + if (strncmp(code, "-TAB", 5) == 0) return 1; + } + + return 0; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +static int wcs_units(struct wcsprm *wcs) + +{ + static const char *function = "wcs_units"; + + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + int naxis = wcs->naxis; + for (int i = 0; i < naxis; i++) { + // Squeeze out trailing blanks. + wcsutil_null_fill(72, wcs->cunit[i]); + + // Use types set by wcs_types(). + char ctype[9], units[16]; + switch (wcs->types[i]/1000) { + case 2: + // Celestial axis. + strcpy(units, "deg"); + break; + + case 3: + // Spectral axis. + strncpy(ctype, wcs->ctype[i], 8); + ctype[8] = '\0'; + spctyp(ctype, 0x0, 0x0, 0x0, units, 0x0, 0x0, 0x0); + break; + + default: + continue; + } + + // Tabular axis, CDELTia and CRVALia relate to indices. + if ((wcs->types[i]/100)%10 == 5) { + continue; + } + + if (wcs->cunit[i][0]) { + double scale, offset, power; + struct wcserr *uniterr; + if (wcsunitse(wcs->cunit[i], units, &scale, &offset, &power, + &uniterr)) { + if (uniterr) { + // uniterr will not be set if wcserr is not enabled. + wcserr_set(WCSERR_SET(WCSERR_BAD_COORD_TRANS), + "In CUNIT%d%.1s: %s", i+1, (*wcs->alt)?wcs->alt:"", uniterr->msg); + free(uniterr); + } + return WCSERR_BAD_COORD_TRANS; + } + + if (scale != 1.0) { + wcs->cdelt[i] *= scale; + wcs->crval[i] *= scale; + + if (wcs->cd) { + for (int j = 0; j < naxis; j++) { + *(wcs->cd + i*naxis + j) *= scale; + } + } + + strcpy(wcs->cunit[i], units); + } + + } else { + strcpy(wcs->cunit[i], units); + } + } + + return 0; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +static int wcs_chksum(const struct wcsprm *wcs) + +{ + if (wcs == 0x0) return WCSERR_NULL_POINTER; + + size_t naxis = wcs->naxis; + size_t szi = sizeof(int); + size_t szd = sizeof(double); + size_t nszc72 = naxis * sizeof(char [72]); + size_t nszd = naxis * szd; + size_t nnszd = naxis * nszd; + + int chksum = 0; + + // The checksum is computed incrementally - the result from one invokation + // forms the starting value for the next one. + chksum = wcs_fletcher32(chksum, &wcs->naxis, szi); + chksum = wcs_fletcher32(chksum, wcs->crpix, nszd); + chksum = wcs_fletcher32(chksum, wcs->pc, nnszd); + chksum = wcs_fletcher32(chksum, wcs->cdelt, nszd); + chksum = wcs_fletcher32(chksum, wcs->crval, nszd); + chksum = wcs_fletcher32(chksum, wcs->cunit, nszc72); + chksum = wcs_fletcher32(chksum, wcs->ctype, nszc72); + chksum = wcs_fletcher32(chksum, &wcs->lonpole, szd); + chksum = wcs_fletcher32(chksum, &wcs->latpole, szd); + chksum = wcs_fletcher32(chksum, &wcs->restfrq, szd); + chksum = wcs_fletcher32(chksum, &wcs->restwav, szd); + chksum = wcs_fletcher32(chksum, &wcs->npv, szi); + + if (wcs->pv) { + size_t nszpv = wcs->npv * sizeof(struct pvcard); + chksum = wcs_fletcher32(chksum, wcs->pv, nszpv); + } + + chksum = wcs_fletcher32(chksum, &wcs->nps, szi); + + if (wcs->ps) { + size_t nszps = wcs->nps * sizeof(struct pscard); + chksum = wcs_fletcher32(chksum, wcs->ps, nszps); + } + + if (wcs->cd) { + chksum = wcs_fletcher32(chksum, wcs->cd, nnszd); + } + + if (wcs->crota) { + chksum = wcs_fletcher32(chksum, wcs->crota, nszd); + } + + chksum = wcs_fletcher32(chksum, &wcs->altlin, szi); + chksum = wcs_fletcher32(chksum, &wcs->ntab, szi); + chksum = wcs_fletcher32(chksum, &wcs->nwtb, szi); + chksum = wcs_fletcher32(chksum, &wcs->tab, sizeof(struct tabprm *)); + chksum = wcs_fletcher32(chksum, &wcs->wtb, sizeof(struct wtbarr *)); + + return chksum; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +// Compute the Fletcher-32 checksum for a sequence of bytes. The algorithm is +// described in https://en.wikipedia.org/wiki/Fletcher's_checksum. +// +// Given: +// chksum int Checksum from a previous invokation, forming the +// starting value for this one. +// +// data const void * +// Data array, treated as an array of uint16_t. +// +// len size_t Length of the data array in bytes. Must be even and +// between 0 and 259200 inclusive (no checks are made). +// +// Function return value: +// int Fletcher-32 checksum. + +static int wcs_fletcher32(int chksum, const void *data, size_t len) + +{ + const uint16_t *datap = (const uint16_t *)data; + + uint32_t c0 = ((uint32_t)chksum & 65535); + uint32_t c1 = ((uint32_t)chksum >> 16); + + while (len) { + c0 += *datap++; + c1 += c0; + len -= 2; + } + + c0 %= 65535; + c1 %= 65535; + + return (int)(c1 << 16 | c0); +} + +//---------------------------------------------------------------------------- + +int wcsp2s( + struct wcsprm *wcs, + int ncoord, + int nelem, + const double pixcrd[], + double imgcrd[], + double phi[], + double theta[], + double world[], + int stat[]) + +{ + static const char *function = "wcsp2s"; + + // Initialize if required. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + int status = 0; + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return status; + } + + // Sanity check. + if (ncoord < 1 || (ncoord > 1 && nelem < wcs->naxis)) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "ncoord and/or nelem inconsistent with the wcsprm"); + } + + + // Initialize status vectors. + int *istatp; + if ((istatp = calloc(ncoord, sizeof(int))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + stat[0] = 0; + wcsutil_setAli(ncoord, 1, stat); + + + // Apply pixel-to-world linear transformation. + struct linprm *lin = &(wcs->lin); + if (!(lin->dispre || lin->disseq)) { + // No distortions present, do vector call. + int istat = linp2x(lin, ncoord, nelem, pixcrd, imgcrd); + if (istat) { + // If one fails then all fail. + status = wcserr_set(WCS_ERRMSG(wcs_linerr[istat])); + goto cleanup; + } + + } else { + // Distortions present, get the status return for each coordinate. + int disaxes = 0; + + const double *pix = pixcrd; + double *img = imgcrd; + int *statp = stat; + for (int k = 0 ; k < ncoord; k++, pix += nelem, img += nelem, statp++) { + int istat = linp2x(lin, 1, nelem, pix, img); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_linerr[istat])); + if (status != WCSERR_BAD_PIX) { + goto cleanup; + } + + if (disaxes == 0) { + // Which axes have distortions? + struct disprm *dispre = lin->dispre; + struct disprm *disseq = lin->disseq; + for (int i = 0; i < wcs->naxis; i++) { + if (dispre && dispre->disp2x[i]) { + disaxes |= (1 << i); + } else if (disseq && disseq->disp2x[i]) { + disaxes |= (1 << i); + } + } + + if (disaxes == 0) { + // Shouldn't happen. + disaxes = (2 << wcs->naxis) - 1; + } + } + + // WCSERR_BAD_PIX stat[] vector accounting. + *statp = disaxes; + } + } + } + + + // Convert intermediate world coordinates to world coordinates. + struct celprm *wcscel = &(wcs->cel); + struct prjprm *wcsprj = &(wcscel->prj); + for (int i = 0; i < wcs->naxis; i++) { + // Extract the second digit of the axis type code. + int type = (wcs->types[i] / 100) % 10; + + double *img, *wrl; + if (type <= 1) { + // Linear or quantized coordinate axis. + img = imgcrd + i; + wrl = world + i; + double crvali = wcs->crval[i]; + for (int k = 0; k < ncoord; k++) { + *wrl = *img + crvali; + img += nelem; + wrl += nelem; + } + + } else if (wcs->types[i] == 2200) { + // Convert celestial coordinates; do we have a CUBEFACE axis? + if (wcs->cubeface != -1) { + // Separation between faces. + double offset; + if (wcsprj->r0 == 0.0) { + offset = 90.0; + } else { + offset = wcsprj->r0*PI/2.0; + } + + // Lay out faces in a plane. + img = imgcrd; + int *statp = stat; + int bits = (1 << i) | (1 << wcs->lat); + for (int k = 0; k < ncoord; k++, statp++) { + int face = (int)(*(img+wcs->cubeface) + 0.5); + if (fabs(*(img+wcs->cubeface) - face) > 1e-10) { + *statp |= bits; + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); + + } else { + *statp = 0; + + switch (face) { + case 0: + *(img+wcs->lat) += offset; + break; + case 1: + break; + case 2: + *(img+i) += offset; + break; + case 3: + *(img+i) += offset*2; + break; + case 4: + *(img+i) += offset*3; + break; + case 5: + *(img+wcs->lat) -= offset; + break; + default: + *statp |= bits; + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_PIX)); + } + } + + img += nelem; + } + } + + // Check for constant x and/or y. + int iso_x = 0; + int iso_y = 0; + int nx = ncoord; + int ny = 0; + + if (ncoord > 1) { + if ((iso_x = wcsutil_allEq(ncoord, nelem, imgcrd+i))) { + nx = 1; + ny = ncoord; + } + if ((iso_y = wcsutil_allEq(ncoord, nelem, imgcrd+wcs->lat))) { + ny = 1; + } + } + + // Transform projection plane coordinates to celestial coordinates. + int istat = celx2s(wcscel, nx, ny, nelem, nelem, imgcrd+i, + imgcrd+wcs->lat, phi, theta, world+i, + world+wcs->lat, istatp); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_celerr[istat])); + if (status != WCSERR_BAD_PIX) { + goto cleanup; + } + } + + // If x and y were both constant, replicate values. + if (iso_x && iso_y) { + wcsutil_setAll(ncoord, nelem, world+i); + wcsutil_setAll(ncoord, nelem, world+wcs->lat); + wcsutil_setAll(ncoord, 1, phi); + wcsutil_setAll(ncoord, 1, theta); + wcsutil_setAli(ncoord, 1, istatp); + } + + // WCSERR_BAD_PIX stat[] vector accounting. + if (istat) { + int bits = (1 << i) | (1 << wcs->lat); + wcsutil_setBit(ncoord, istatp, bits, stat); + } + + } else if (type == 3 || type == 4) { + // Spectral and logarithmic coordinates; check for constant x. + int iso_x = 0; + int nx = ncoord; + + if (ncoord > 1) { + if ((iso_x = wcsutil_allEq(ncoord, nelem, imgcrd+i))) { + nx = 1; + } + } + + int istat = 0; + if (wcs->types[i] == 3300) { + // Spectral coordinates. + istat = spcx2s(&(wcs->spc), nx, nelem, nelem, imgcrd+i, world+i, + istatp); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_spcerr[istat])); + if (status != WCSERR_BAD_PIX) { + goto cleanup; + } + } + } else if (type == 4) { + // Logarithmic coordinates. + istat = logx2s(wcs->crval[i], nx, nelem, nelem, imgcrd+i, world+i, + istatp); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_logerr[istat])); + if (status != WCSERR_BAD_PIX) { + goto cleanup; + } + } + } + + // If x was constant, replicate values. + if (iso_x) { + wcsutil_setAll(ncoord, nelem, world+i); + wcsutil_setAli(ncoord, 1, istatp); + } + + // WCSERR_BAD_PIX stat[] vector accounting. + if (istat) { + wcsutil_setBit(ncoord, istatp, 1 << i, stat); + } + } + } + + + // Do tabular coordinates. + for (int itab = 0; itab < wcs->ntab; itab++) { + int istat = tabx2s(wcs->tab + itab, ncoord, nelem, imgcrd, world, istatp); + + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_taberr[istat])); + if (status != WCSERR_BAD_PIX) { + goto cleanup; + } + + // WCSERR_BAD_PIX stat[] vector accounting. + int bits = 0; + for (int m = 0; m < wcs->tab[itab].M; m++) { + bits |= 1 << wcs->tab[itab].map[m]; + } + wcsutil_setBit(ncoord, istatp, bits, stat); + } + } + + + // Zero the unused world coordinate elements. + for (int i = wcs->naxis; i < nelem; i++) { + world[i] = 0.0; + wcsutil_setAll(ncoord, nelem, world+i); + } + +cleanup: + free(istatp); + return status; +} + +//---------------------------------------------------------------------------- + +int wcss2p( + struct wcsprm* wcs, + int ncoord, + int nelem, + const double world[], + double phi[], + double theta[], + double imgcrd[], + double pixcrd[], + int stat[]) + +{ + static const char *function = "wcss2p"; + + // Initialize if required. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + int status = 0; + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return status; + } + + // Sanity check. + if (ncoord < 1 || (ncoord > 1 && nelem < wcs->naxis)) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_CTYPE), + "ncoord and/or nelem inconsistent with the wcsprm"); + } + + // Initialize status vectors. + int *istatp; + if ((istatp = calloc(ncoord, sizeof(int))) == 0x0) { + return wcserr_set(WCS_ERRMSG(WCSERR_MEMORY)); + } + + stat[0] = 0; + wcsutil_setAli(ncoord, 1, stat); + + + // Convert world coordinates to intermediate world coordinates. + struct celprm *wcscel = &(wcs->cel); + struct prjprm *wcsprj = &(wcscel->prj); + for (int i = 0; i < wcs->naxis; i++) { + // Extract the second digit of the axis type code. + int type = (wcs->types[i] / 100) % 10; + + if (type <= 1) { + // Linear or quantized coordinate axis. + const double *wrl = world + i; + double *img = imgcrd + i; + double crvali = wcs->crval[i]; + for (int k = 0; k < ncoord; k++) { + *img = *wrl - crvali; + wrl += nelem; + img += nelem; + } + + } else if (wcs->types[i] == 2200) { + // Celestial coordinates; check for constant lng and/or lat. + int isolng = 0; + int isolat = 0; + int nlng = ncoord; + int nlat = 0; + + if (ncoord > 1) { + if ((isolng = wcsutil_allEq(ncoord, nelem, world+i))) { + nlng = 1; + nlat = ncoord; + } + if ((isolat = wcsutil_allEq(ncoord, nelem, world+wcs->lat))) { + nlat = 1; + } + } + + // Transform celestial coordinates to projection plane coordinates. + int istat = cels2x(wcscel, nlng, nlat, nelem, nelem, world+i, + world+wcs->lat, phi, theta, imgcrd+i, + imgcrd+wcs->lat, istatp); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_celerr[istat])); + if (status != WCSERR_BAD_WORLD) { + goto cleanup; + } + } + + // If lng and lat were both constant, replicate values. + if (isolng && isolat) { + wcsutil_setAll(ncoord, nelem, imgcrd+i); + wcsutil_setAll(ncoord, nelem, imgcrd+wcs->lat); + wcsutil_setAll(ncoord, 1, phi); + wcsutil_setAll(ncoord, 1, theta); + wcsutil_setAli(ncoord, 1, istatp); + } + + // WCSERR_BAD_WORLD stat[] vector accounting. + if (istat) { + int bits = (1 << i) | (1 << wcs->lat); + wcsutil_setBit(ncoord, istatp, bits, stat); + } + + // Do we have a CUBEFACE axis? + if (wcs->cubeface != -1) { + // Separation between faces. + double offset; + if (wcsprj->r0 == 0.0) { + offset = 90.0; + } else { + offset = wcsprj->r0*PI/2.0; + } + + // Stack faces in a cube. + double *img = imgcrd; + for (int k = 0; k < ncoord; k++) { + if (*(img+wcs->lat) < -0.5*offset) { + *(img+wcs->lat) += offset; + *(img+wcs->cubeface) = 5.0; + } else if (*(img+wcs->lat) > 0.5*offset) { + *(img+wcs->lat) -= offset; + *(img+wcs->cubeface) = 0.0; + } else if (*(img+i) > 2.5*offset) { + *(img+i) -= 3.0*offset; + *(img+wcs->cubeface) = 4.0; + } else if (*(img+i) > 1.5*offset) { + *(img+i) -= 2.0*offset; + *(img+wcs->cubeface) = 3.0; + } else if (*(img+i) > 0.5*offset) { + *(img+i) -= offset; + *(img+wcs->cubeface) = 2.0; + } else { + *(img+wcs->cubeface) = 1.0; + } + + img += nelem; + } + } + + } else if (type == 3 || type == 4) { + // Spectral and logarithmic coordinates; check for constancy. + int isospec = 0; + int nwrld = ncoord; + + if (ncoord > 1) { + if ((isospec = wcsutil_allEq(ncoord, nelem, world+i))) { + nwrld = 1; + } + } + + int istat = 0; + if (wcs->types[i] == 3300) { + // Spectral coordinates. + istat = spcs2x(&(wcs->spc), nwrld, nelem, nelem, world+i, + imgcrd+i, istatp); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_spcerr[istat])); + if (status != WCSERR_BAD_WORLD) { + goto cleanup; + } + } + } else if (type == 4) { + // Logarithmic coordinates. + istat = logs2x(wcs->crval[i], nwrld, nelem, nelem, world+i, + imgcrd+i, istatp); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_logerr[istat])); + if (status != WCSERR_BAD_WORLD) { + goto cleanup; + } + } + } + + // If constant, replicate values. + if (isospec) { + wcsutil_setAll(ncoord, nelem, imgcrd+i); + wcsutil_setAli(ncoord, 1, istatp); + } + + // WCSERR_BAD_WORLD stat[] vector accounting. + if (istat) { + wcsutil_setBit(ncoord, istatp, 1 << i, stat); + } + } + } + + + // Do tabular coordinates. + for (int itab = 0; itab < wcs->ntab; itab++) { + int istat = tabs2x(wcs->tab + itab, ncoord, nelem, world, imgcrd, istatp); + + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_taberr[istat])); + + if (status != WCSERR_BAD_WORLD) { + goto cleanup; + } + + int bits = 0; + for (int m = 0; m < wcs->tab[itab].M; m++) { + bits |= 1 << wcs->tab[itab].map[m]; + } + wcsutil_setBit(ncoord, istatp, bits, stat); + } + } + + + // Zero the unused intermediate world coordinate elements. + for (int i = wcs->naxis; i < nelem; i++) { + imgcrd[i] = 0.0; + wcsutil_setAll(ncoord, nelem, imgcrd+i); + } + + + // Apply world-to-pixel linear transformation. + struct linprm *lin = &(wcs->lin); + if (!(lin->dispre || lin->disseq)) { + // No distortions present, do vector call. + int istat = linx2p(lin, ncoord, nelem, imgcrd, pixcrd); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_linerr[istat])); + goto cleanup; + } + + } else { + // Distortions present, get the status return for each coordinate. + int disaxes = 0; + + const double *img = imgcrd; + double *pix = pixcrd; + int *statp = stat; + for (int k = 0 ; k < ncoord; k++, pix += nelem, img += nelem, statp++) { + int istat = linx2p(lin, 1, nelem, img, pix); + if (istat) { + status = wcserr_set(WCS_ERRMSG(wcs_linerr[istat])); + if (status != WCSERR_BAD_WORLD) { + goto cleanup; + } + + if (disaxes == 0) { + // Which axes have distortions? + struct disprm *dispre = lin->dispre; + struct disprm *disseq = lin->disseq; + for (int i = 0; i < wcs->naxis; i++) { + if (dispre && dispre->disp2x[i]) { + disaxes |= (1 << i); + } else if (disseq && disseq->disp2x[i]) { + disaxes |= (1 << i); + } + } + + if (disaxes == 0) { + // Shouldn't happen. + disaxes = (2 << wcs->naxis) - 1; + } + } + + // WCSERR_BAD_WORLD stat[] vector accounting. + *statp = disaxes; + } + } + } + +cleanup: + free(istatp); + return status; +} + +//---------------------------------------------------------------------------- + +int wcsmix( + struct wcsprm *wcs, + int mixpix, + int mixcel, + const double vspan[2], + double vstep, + int viter, + double world[], + double phi[], + double theta[], + double imgcrd[], + double pixcrd[]) + +{ + static const char *function = "wcsmix"; + + const int niter = 60; + const double tol = 1.0e-10; + const double tol2 = 100.0*tol; + + // Initialize if required. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + int status; + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return status; + } + + if (wcs->lng < 0 || wcs->lat < 0) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_SUBIMAGE), + "Image does not have celestial axes"); + } + + double *worldlng = world + wcs->lng; + double *worldlat = world + wcs->lat; + + + // Check vspan. + double span[2]; + if (vspan[0] <= vspan[1]) { + span[0] = vspan[0]; + span[1] = vspan[1]; + } else { + // Swap them. + span[0] = vspan[1]; + span[1] = vspan[0]; + } + + // Check vstep. + double step = fabs(vstep); + if (step == 0.0) { + step = (span[1] - span[0])/10.0; + if (step > 1.0 || step == 0.0) step = 1.0; + } + + // Check viter. + int nstep = viter; + if (nstep < 5) { + nstep = 5; + } else if (nstep > 10) { + nstep = 10; + } + + // Given pixel element. + double pixmix = pixcrd[mixpix]; + + // Iterate on the step size. + for (int istep = 0; istep <= nstep; istep++) { + if (istep) step /= 2.0; + + // Iterate on the sky coordinate between the specified range. + if (mixcel == 1) { + // Celestial longitude is given. + + // Check whether the solution interval is a crossing interval. + double lat0 = span[0]; + *worldlat = lat0; + int stat[1]; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d0 = pixcrd[mixpix] - pixmix; + + double dabs = fabs(d0); + if (dabs < tol) return 0; + + double lat1 = span[1]; + *worldlat = lat1; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d1 = pixcrd[mixpix] - pixmix; + + dabs = fabs(d1); + if (dabs < tol) return 0; + + double lmin = lat1; + double dmin = dabs; + + // Check for a crossing point. + int crossed; + double dx = 0.0; + if (signbit(d0) != signbit(d1)) { + crossed = 1; + dx = d1; + } else { + crossed = 0; + lat0 = span[1]; + } + + for (int retry = 0; retry < 4; retry++) { + // Refine the solution interval. + while (lat0 > span[0]) { + lat0 -= step; + if (lat0 < span[0]) lat0 = span[0]; + *worldlat = lat0; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + d0 = pixcrd[mixpix] - pixmix; + + // Check for a solution. + dabs = fabs(d0); + if (dabs < tol) return 0; + + // Record the point of closest approach. + if (dabs < dmin) { + lmin = lat0; + dmin = dabs; + } + + // Check for a crossing point. + if (signbit(d0) != signbit(d1)) { + crossed = 2; + dx = d0; + break; + } + + // Advance to the next subinterval. + lat1 = lat0; + d1 = d0; + } + + if (crossed) { + // A crossing point was found. + for (int iter = 0; iter < niter; iter++) { + // Use regula falsi division of the interval. + double lambda = d0/(d0-d1); + if (lambda < 0.1) { + lambda = 0.1; + } else if (lambda > 0.9) { + lambda = 0.9; + } + + double dlat = lat1 - lat0; + double lat = lat0 + lambda*dlat; + *worldlat = lat; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + + // Check for a solution. + double d = pixcrd[mixpix] - pixmix; + dabs = fabs(d); + if (dabs < tol) return 0; + + if (dlat < tol) { + // An artifact of numerical imprecision. + if (dabs < tol2) return 0; + + // Must be a discontinuity. + break; + } + + // Record the point of closest approach. + if (dabs < dmin) { + lmin = lat; + dmin = dabs; + } + + if (signbit(d0) == signbit(d)) { + lat0 = lat; + d0 = d; + } else { + lat1 = lat; + d1 = d; + } + } + + // No convergence, must have been a discontinuity. + if (crossed == 1) lat0 = span[1]; + lat1 = lat0; + d1 = dx; + crossed = 0; + + } else { + // No crossing point; look for a tangent point. + if (lmin == span[0]) break; + if (lmin == span[1]) break; + + double lat = lmin; + lat0 = lat - step; + if (lat0 < span[0]) lat0 = span[0]; + lat1 = lat + step; + if (lat1 > span[1]) lat1 = span[1]; + + *worldlat = lat0; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + d0 = fabs(pixcrd[mixpix] - pixmix); + + double d = dmin; + + *worldlat = lat1; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + d1 = fabs(pixcrd[mixpix] - pixmix); + + for (int iter = 0; iter < niter; iter++) { + double lat0m = (lat0 + lat)/2.0; + *worldlat = lat0m; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d0m = fabs(pixcrd[mixpix] - pixmix); + + if (d0m < tol) return 0; + + double lat1m = (lat1 + lat)/2.0; + *worldlat = lat1m; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d1m = fabs(pixcrd[mixpix] - pixmix); + + if (d1m < tol) return 0; + + if (d0m < d && d0m <= d1m) { + lat1 = lat; + d1 = d; + lat = lat0m; + d = d0m; + } else if (d1m < d) { + lat0 = lat; + d0 = d; + lat = lat1m; + d = d1m; + } else { + lat0 = lat0m; + d0 = d0m; + lat1 = lat1m; + d1 = d1m; + } + } + } + } + + } else { + // Celestial latitude is given. + + // Check whether the solution interval is a crossing interval. + double lng0 = span[0]; + *worldlng = lng0; + int stat[1]; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d0 = pixcrd[mixpix] - pixmix; + + double dabs = fabs(d0); + if (dabs < tol) return 0; + + double lng1 = span[1]; + *worldlng = lng1; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d1 = pixcrd[mixpix] - pixmix; + + dabs = fabs(d1); + if (dabs < tol) return 0; + double lmin = lng1; + double dmin = dabs; + + // Check for a crossing point. + int crossed; + double dx = 0.0; + if (signbit(d0) != signbit(d1)) { + crossed = 1; + dx = d1; + } else { + crossed = 0; + lng0 = span[1]; + } + + for (int retry = 0; retry < 4; retry++) { + // Refine the solution interval. + while (lng0 > span[0]) { + lng0 -= step; + if (lng0 < span[0]) lng0 = span[0]; + *worldlng = lng0; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + d0 = pixcrd[mixpix] - pixmix; + + // Check for a solution. + dabs = fabs(d0); + if (dabs < tol) return 0; + + // Record the point of closest approach. + if (dabs < dmin) { + lmin = lng0; + dmin = dabs; + } + + // Check for a crossing point. + if (signbit(d0) != signbit(d1)) { + crossed = 2; + dx = d0; + break; + } + + // Advance to the next subinterval. + lng1 = lng0; + d1 = d0; + } + + if (crossed) { + // A crossing point was found. + for (int iter = 0; iter < niter; iter++) { + // Use regula falsi division of the interval. + double lambda = d0/(d0-d1); + if (lambda < 0.1) { + lambda = 0.1; + } else if (lambda > 0.9) { + lambda = 0.9; + } + + double dlng = lng1 - lng0; + double lng = lng0 + lambda*dlng; + *worldlng = lng; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + + // Check for a solution. + double d = pixcrd[mixpix] - pixmix; + dabs = fabs(d); + if (dabs < tol) return 0; + + if (dlng < tol) { + // An artifact of numerical imprecision. + if (dabs < tol2) return 0; + + // Must be a discontinuity. + break; + } + + // Record the point of closest approach. + if (dabs < dmin) { + lmin = lng; + dmin = dabs; + } + + if (signbit(d0) == signbit(d)) { + lng0 = lng; + d0 = d; + } else { + lng1 = lng; + d1 = d; + } + } + + // No convergence, must have been a discontinuity. + if (crossed == 1) lng0 = span[1]; + lng1 = lng0; + d1 = dx; + crossed = 0; + + } else { + // No crossing point; look for a tangent point. + if (lmin == span[0]) break; + if (lmin == span[1]) break; + + double lng = lmin; + lng0 = lng - step; + if (lng0 < span[0]) lng0 = span[0]; + lng1 = lng + step; + if (lng1 > span[1]) lng1 = span[1]; + + *worldlng = lng0; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + d0 = fabs(pixcrd[mixpix] - pixmix); + + double d = dmin; + + *worldlng = lng1; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + d1 = fabs(pixcrd[mixpix] - pixmix); + + for (int iter = 0; iter < niter; iter++) { + double lng0m = (lng0 + lng)/2.0; + *worldlng = lng0m; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d0m = fabs(pixcrd[mixpix] - pixmix); + + if (d0m < tol) return 0; + + double lng1m = (lng1 + lng)/2.0; + *worldlng = lng1m; + if ((status = wcss2p(wcs, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d1m = fabs(pixcrd[mixpix] - pixmix); + + if (d1m < tol) return 0; + + if (d0m < d && d0m <= d1m) { + lng1 = lng; + d1 = d; + lng = lng0m; + d = d0m; + } else if (d1m < d) { + lng0 = lng; + d0 = d; + lng = lng1m; + d = d1m; + } else { + lng0 = lng0m; + d0 = d0m; + lng1 = lng1m; + d1 = d1m; + } + } + } + } + } + } + + + // Set cel0 to the unity transformation. + struct wcsprm wcs0 = *wcs; + wcs0.cel.euler[0] = -90.0; + wcs0.cel.euler[1] = 0.0; + wcs0.cel.euler[2] = 90.0; + wcs0.cel.euler[3] = 1.0; + wcs0.cel.euler[4] = 0.0; + + // No convergence, check for aberrant behaviour at a native pole. + *theta = -90.0; + for (int j = 1; j <= 2; j++) { + // Could the celestial coordinate element map to a native pole? + *phi = 0.0; + *theta = -*theta; + struct celprm *wcscel = &(wcs->cel); + double lng, lat; + sphx2s(wcscel->euler, 1, 1, 1, 1, phi, theta, &lng, &lat); + + if (mixcel == 1) { + if (fabs(fmod(*worldlng-lng, 360.0)) > tol) continue; + if (lat < span[0]) continue; + if (lat > span[1]) continue; + *worldlat = lat; + } else { + if (fabs(*worldlat-lat) > tol) continue; + if (lng < span[0]) lng += 360.0; + if (lng > span[1]) lng -= 360.0; + if (lng < span[0]) continue; + if (lng > span[1]) continue; + *worldlng = lng; + } + + // Is there a solution for the given pixel coordinate element? + lng = *worldlng; + lat = *worldlat; + + // Feed native coordinates to wcss2p() with cel0 set to unity. + *worldlng = -180.0; + *worldlat = *theta; + int stat[1]; + if ((status = wcss2p(&wcs0, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + wcserr_clear(err); + wcs->err = wcs0.err; + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + double d0 = pixcrd[mixpix] - pixmix; + + // Check for a solution. + if (fabs(d0) < tol) { + // Recall saved world coordinates. + *worldlng = lng; + *worldlat = lat; + return 0; + } + + // Search for a crossing interval. + double phi0 = -180.0, phi1; + double d1; + for (int k = -179; k <= 180; k++) { + phi1 = (double)k; + *worldlng = phi1; + if ((status = wcss2p(&wcs0, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + wcserr_clear(err); + wcs->err = wcs0.err; + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + d1 = pixcrd[mixpix] - pixmix; + + // Check for a solution. + double dabs = fabs(d1); + if (dabs < tol) { + // Recall saved world coordinates. + *worldlng = lng; + *worldlat = lat; + return 0; + } + + // Is it a crossing interval? + if (signbit(d0) != signbit(d1)) break; + + phi0 = phi1; + d0 = d1; + } + + for (int iter = 1; iter <= niter; iter++) { + // Use regula falsi division of the interval. + double lambda = d0/(d0-d1); + if (lambda < 0.1) { + lambda = 0.1; + } else if (lambda > 0.9) { + lambda = 0.9; + } + + double dphi = phi1 - phi0; + *worldlng = phi0 + lambda*dphi; + if ((status = wcss2p(&wcs0, 1, 0, world, phi, theta, imgcrd, pixcrd, + stat))) { + wcserr_clear(err); + wcs->err = wcs0.err; + if (status == WCSERR_BAD_WORLD) { + status = wcserr_set(WCS_ERRMSG(WCSERR_BAD_WORLD_COORD)); + } + return status; + } + + // Check for a solution. + double d = pixcrd[mixpix] - pixmix; + double dabs = fabs(d); + if (dabs < tol || (dphi < tol && dabs < tol2)) { + // Recall saved world coordinates. + *worldlng = lng; + *worldlat = lat; + return 0; + } + + if (signbit(d0) == signbit(d)) { + phi0 = *worldlng; + d0 = d; + } else { + phi1 = *worldlng; + d1 = d; + } + } + } + + + // No solution. + return wcserr_set(WCS_ERRMSG(WCSERR_NO_SOLUTION)); +} + +//---------------------------------------------------------------------------- + +int wcsccs( + struct wcsprm *wcs, + double lng2P1, + double lat2P1, + double lng1P2, + const char *clng, + const char *clat, + const char *radesys, + double equinox, + const char *alt) + +{ + static const char *function = "wcsccs"; + + int status; + + // Initialize if required. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return status; + } + + if (wcs->lng < 0 || wcs->lat < 0) { + return wcserr_set(WCSERR_SET(WCSERR_BAD_SUBIMAGE), + "Image does not have celestial axes"); + } + + // (lng1XX,lat1XX) ...longitude and latitude of XX in the old system. + // (lng2XX,lat2XX) ...longitude and latitude of XX in the new system. + // XX = NP ...natuve pole, + // P1 ...pole of the old system, + // P2 ...pole of the new system, + // FP ...fiducial point. + + // Set up the transformation from the old to the new system. + double euler12[5]; + euler12[0] = lng2P1; + euler12[1] = 90.0 - lat2P1; + euler12[2] = lng1P2; + euler12[3] = cosd(euler12[1]); + euler12[4] = sind(euler12[1]); + + // Transform coordinates of the fiducial point (FP) to the new system. + double lng1FP = wcs->crval[wcs->lng]; + double lat1FP = wcs->crval[wcs->lat]; + double lng2FP, lat2FP; + (void)sphx2s(euler12, 1, 1, 1, 1, &lng1FP, &lat1FP, &lng2FP, &lat2FP); + + // Compute native coordinates of the new pole (noting lat1P2 == lat2P1). + double phiP2, thetaP2; + (void)sphs2x(wcs->cel.euler, 1, 1, 1, 1, &lng1P2, &lat2P1, + &phiP2, &thetaP2); + + if (fabs(lat2FP) == 90.0 || fabs(thetaP2) == 90.0) { + // If one of the poles of the new system is at the fiducial point, then + // lng2FP is indeterminate, and if one of them is at the native pole, then + // phiP2 is indeterminate. We have to work harder to obtain these values. + + // Compute coordinates of the native pole (NP) in the old and new systems. + double phiNP = 0.0, thetaNP = 90.0; + double lng1NP, lat1NP; + (void)sphx2s(wcs->cel.euler, 1, 1, 1, 1, &phiNP, &thetaNP, + &lng1NP, &lat1NP); + + double lng2NP, lat2NP; + (void)sphx2s(euler12, 1, 1, 1, 1, &lng1NP, &lat1NP, &lng2NP, &lat2NP); + + // Native latitude and longitude of the fiducial point, (phi0,theta0). + double phiFP = wcs->cel.prj.phi0; + double thetaFP = wcs->cel.prj.theta0; + + if (fabs(lat2NP) == 90.0) { + // Following WCS Paper II equations (3) and (4), we are free to choose + // phiP2 and set lng2NP accordingly. So set phiP2 to its default value + // for the projection. + if (thetaFP < lat2FP) { + phiP2 = 0.0; + } else { + phiP2 = 180.0; + } + + // Compute coordinates in the old system of test point X. + double phiX = 0.0, thetaX = 0.0; + double lng1X, lat1X; + (void)sphx2s(wcs->cel.euler, 1, 1, 1, 1, &phiX, &thetaX, + &lng1X, &lat1X); + + // Ensure that lng1X is not indeterminate. + if (fabs(lat1X) == 90.0) { + phiX = 90.0; + (void)sphx2s(wcs->cel.euler, 1, 1, 1, 1, &phiX, &thetaX, + &lng1X, &lat1X); + } + + // Compute coordinates in the new system of test point X. + double lng2X, lat2X; + (void)sphx2s(euler12, 1, 1, 1, 1, &lng1X, &lat1X, &lng2X, &lat2X); + + // Apply WCS Paper II equations (3) and (4). + if (lat2NP == +90.0) { + lng2NP = lng2X + (phiP2 - phiX) + 180.0; + } else { + lng2NP = lng2X - (phiP2 - phiX); + } + + } else { + // For (lng2NP + 90, 0), WCS Paper II equation (5) reduces to + // phi = phiP2 - 90. + double lng2X = lng2NP + 90.0; + double lat2X = 0.0; + double lng1X, lat1X; + (void)sphs2x(euler12, 1, 1, 1, 1, &lng2X, &lat2X, &lng1X, &lat1X); + + double phiX, thetaX; + (void)sphs2x(wcs->cel.euler, 1, 1, 1, 1, &lng1X, &lat1X, + &phiX, &thetaX); + + phiP2 = phiX + 90.0; + } + + // Compute the longitude of the fiducial point in the new system. + double eulerN2[5]; + eulerN2[0] = lng2NP; + eulerN2[1] = 90.0 - lat2NP; + eulerN2[2] = phiP2; + eulerN2[3] = cosd(eulerN2[1]); + eulerN2[4] = sind(eulerN2[1]); + + (void)sphx2s(eulerN2, 1, 1, 1, 1, &phiFP, &thetaFP, &lng2FP, &lat2FP); + } + + // Update reference values in wcsprm. + wcs->crval[wcs->lng] = lng2FP; + wcs->crval[wcs->lat] = lat2FP; + wcs->lonpole = phiP2; + wcs->latpole = thetaP2; + + // Update wcsprm::ctype. + if (clng) { + strncpy(wcs->ctype[wcs->lng], clng, 4); + for (int i = 0; i < 4; i++) { + if (wcs->ctype[wcs->lng][i] == '\0') { + wcs->ctype[wcs->lng][i] = '-'; + } + } + } + + if (clat) { + strncpy(wcs->ctype[wcs->lat], clat, 4); + for (int i = 0; i < 4; i++) { + if (wcs->ctype[wcs->lat][i] == '\0') { + wcs->ctype[wcs->lat][i] = '-'; + } + } + } + + // Update auxiliary values. + if (strncmp(wcs->ctype[wcs->lng], "RA--", 4) == 0 && + strncmp(wcs->ctype[wcs->lat], "DEC-", 4) == 0) { + // Transforming to equatorial coordinates. + if (radesys) { + strncpy(wcs->radesys, radesys, 71); + } + + if (equinox != 0.0) { + wcs->equinox = equinox; + } + } else { + // Meaningless for other than equatorial coordinates. + memset(wcs->radesys, 0, 72); + wcs->equinox = UNDEFINED; + } + + if (alt && *alt) { + wcs->alt[0] = *alt; + } + + // Reset the struct. + wcs->flag = (wcs->flag == -WCSSET) ? 1 : 0; + if ((status = wcsset(wcs))) return status; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcssptr( + struct wcsprm *wcs, + int *i, + char ctype[9]) + +{ + static const char *function = "wcssptr"; + + int status; + + // Initialize if required. + if (wcs == 0x0) return WCSERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return status; + } + + int j; + if ((j = *i) < 0) { + if ((j = wcs->spec) < 0) { + // Look for a linear spectral axis. + for (j = 0; j < wcs->naxis; j++) { + if (wcs->types[j]/100 == 30) { + break; + } + } + + if (j >= wcs->naxis) { + // No spectral axis. + return wcserr_set(WCSERR_SET(WCSERR_BAD_SUBIMAGE), + "No spectral axis found"); + } + } + + *i = j; + } + + // Translate the spectral axis. + double cdelt, crval; + if ((status = spctrne(wcs->ctype[j], wcs->crval[j], wcs->cdelt[j], + wcs->restfrq, wcs->restwav, ctype, &crval, &cdelt, + &(wcs->spc.err)))) { + return wcserr_set(WCS_ERRMSG(wcs_spcerr[status])); + } + + + // Translate keyvalues. + wcs->cdelt[j] = cdelt; + wcs->crval[j] = crval; + spctyp(ctype, 0x0, 0x0, 0x0, wcs->cunit[j], 0x0, 0x0, 0x0); + strcpy(wcs->ctype[j], ctype); + + // This keeps things tidy if the spectral axis is linear. + spcfree(&(wcs->spc)); + spcini(&(wcs->spc)); + + // Reset the struct. + wcs->flag = (wcs->flag == -WCSSET) ? 1 : 0; + if ((status = wcsset(wcs))) return status; + + return 0; +} + +//---------------------------------------------------------------------------- + +#define STRINGIZE(s) STRINGIFY(s) +#define STRINGIFY(s) #s + +const char *wcslib_version( + int vers[3]) + +{ + static const char *wcsver = STRINGIZE(WCSLIB_VERSION); + + if (vers != 0x0) { + vers[2] = 0; + sscanf(wcsver, "%d.%d.%d", vers, vers+1, vers+2); + } + + return wcsver; +} diff --git a/deps/wcslib/C/wcs.h b/deps/wcslib/C/wcs.h new file mode 100644 index 0000000..23033be --- /dev/null +++ b/deps/wcslib/C/wcs.h @@ -0,0 +1,2341 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcs.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wcs routines +* --------------------------- +* Routines in this suite implement the FITS World Coordinate System (WCS) +* standard which defines methods to be used for computing world coordinates +* from image pixel coordinates, and vice versa. The standard, and proposed +* extensions for handling distortions, are described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of celestial coordinates in FITS", += Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (WCS Paper II) += += "Representations of spectral coordinates in FITS", += Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. += 2006, A&A, 446, 747 (WCS Paper III) += += "Representations of distortions in FITS world coordinate systems", += Calabretta, M.R. et al. (WCS Paper IV, draft dated 2004/04/22), += available from http://www.atnf.csiro.au/people/Mark.Calabretta += += "Mapping on the HEALPix grid", += Calabretta, M.R., & Roukema, B.F. 2007, MNRAS, 381, 865 (WCS Paper V) += += "Representing the 'Butterfly' Projection in FITS -- Projection Code XPH", += Calabretta, M.R., & Lowe, S.R. 2013, PASA, 30, e050 (WCS Paper VI) += += "Representations of time coordinates in FITS - += Time and relative dimension in space", += Rots, A.H., Bunclark, P.S., Calabretta, M.R., Allen, S.L., += Manchester, R.N., & Thompson, W.T. 2015, A&A, 574, A36 (WCS Paper VII) +* +* These routines are based on the wcsprm struct which contains all information +* needed for the computations. The struct contains some members that must be +* set by the user, and others that are maintained by these routines, somewhat +* like a C++ class but with no encapsulation. +* +* wcsnpv(), wcsnps(), wcsini(), wcsinit(), wcssub(), wcsfree(), and wcstrim(), +* are provided to manage the wcsprm struct, wcssize() computes its total size +* including allocated memory, wcsenq() returns information about the state of +* the struct, and wcsprt() prints its contents. wcscopy(), which does a deep +* copy of one wcsprm struct to another, is defined as a preprocessor macro +* function that invokes wcssub(). +* +* wcsperr() prints the error message(s) (if any) stored in a wcsprm struct, +* and the linprm, celprm, prjprm, spcprm, and tabprm structs that it contains. +* +* A setup routine, wcsset(), computes intermediate values in the wcsprm struct +* from parameters in it that were supplied by the user. The struct always +* needs to be set up by wcsset() but this need not be called explicitly - +* refer to the explanation of wcsprm::flag. +* +* wcsp2s() and wcss2p() implement the WCS world coordinate transformations. +* In fact, they are high level driver routines for the WCS linear, +* logarithmic, celestial, spectral and tabular transformation routines +* described in lin.h, log.h, cel.h, spc.h and tab.h. +* +* Given either the celestial longitude or latitude plus an element of the +* pixel coordinate a hybrid routine, wcsmix(), iteratively solves for the +* unknown elements. +* +* wcsccs() changes the celestial coordinate system of a wcsprm struct, for +* example, from equatorial to galactic, and wcssptr() translates the spectral +* axis. For example, a 'FREQ' axis may be translated into 'ZOPT-F2W' and vice +* versa. +* +* wcslib_version() returns the WCSLIB version number. +* +* Quadcube projections: +* --------------------- +* The quadcube projections (TSC, CSC, QSC) may be represented in FITS in +* either of two ways: +* +* a: The six faces may be laid out in one plane and numbered as follows: +* += 0 += += 4 3 2 1 4 3 2 += += 5 +* +* Faces 2, 3 and 4 may appear on one side or the other (or both). The +* world-to-pixel routines map faces 2, 3 and 4 to the left but the +* pixel-to-world routines accept them on either side. +* +* b: The "COBE" convention in which the six faces are stored in a +* three-dimensional structure using a CUBEFACE axis indexed from +* 0 to 5 as above. +* +* These routines support both methods; wcsset() determines which is being +* used by the presence or absence of a CUBEFACE axis in ctype[]. wcsp2s() +* and wcss2p() translate the CUBEFACE axis representation to the single +* plane representation understood by the lower-level WCSLIB projection +* routines. +* +* +* wcsnpv() - Memory allocation for PVi_ma +* --------------------------------------- +* wcsnpv() sets or gets the value of NPVMAX (default 64). This global +* variable controls the number of pvcard structs, for holding PVi_ma +* keyvalues, that wcsini() should allocate space for. It is also used by +* wcsinit() as the default value of npvmax. +* +* PLEASE NOTE: This function is not thread-safe. +* +* Given: +* n int Value of NPVMAX; ignored if < 0. Use a value less +* than zero to get the current value. +* +* Function return value: +* int Current value of NPVMAX. +* +* +* wcsnps() - Memory allocation for PSi_ma +* --------------------------------------- +* wcsnps() sets or gets the value of NPSMAX (default 8). This global variable +* controls the number of pscard structs, for holding PSi_ma keyvalues, that +* wcsini() should allocate space for. It is also used by wcsinit() as the +* default value of npsmax. +* +* PLEASE NOTE: This function is not thread-safe. +* +* Given: +* n int Value of NPSMAX; ignored if < 0. Use a value less +* than zero to get the current value. +* +* Function return value: +* int Current value of NPSMAX. +* +* +* wcsini() - Default constructor for the wcsprm struct +* ---------------------------------------------------- +* wcsini() is a thin wrapper on wcsinit(). It invokes it with npvmax, +* npsmax, and ndpmax set to -1 which causes it to use the values of the +* global variables NDPMAX, NPSMAX, and NDPMAX. It is thereby potentially +* thread-unsafe if these variables are altered dynamically via wcsnpv(), +* wcsnps(), and disndp(). Use wcsinit() for a thread-safe alternative in +* this case. +* +* +* wcsinit() - Default constructor for the wcsprm struct +* ----------------------------------------------------- +* wcsinit() optionally allocates memory for arrays in a wcsprm struct and sets +* all members of the struct to default values. +* +* PLEASE NOTE: every wcsprm struct should be initialized by wcsinit(), +* possibly repeatedly. On the first invokation, and only the first +* invokation, wcsprm::flag must be set to -1 to initialize memory management, +* regardless of whether wcsinit() will actually be used to allocate memory. +* +* Given: +* alloc int If true, allocate memory unconditionally for the +* crpix, etc. arrays. Please note that memory is never +* allocated by wcsinit() for the auxprm, tabprm, nor +* wtbarr structs. +* +* If false, it is assumed that pointers to these arrays +* have been set by the user except if they are null +* pointers in which case memory will be allocated for +* them regardless. (In other words, setting alloc true +* saves having to initalize these pointers to zero.) +* +* naxis int The number of world coordinate axes. This is used to +* determine the length of the various wcsprm vectors and +* matrices and therefore the amount of memory to +* allocate for them. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Note that, in order to initialize memory management, +* wcsprm::flag should be set to -1 when wcs is +* initialized for the first time (memory leaks may +* result if it had already been initialized). +* +* Given: +* npvmax int The number of PVi_ma keywords to allocate space for. +* If set to -1, the value of the global variable NPVMAX +* will be used. This is potentially thread-unsafe if +* wcsnpv() is being used dynamically to alter its value. +* +* npsmax int The number of PSi_ma keywords to allocate space for. +* If set to -1, the value of the global variable NPSMAX +* will be used. This is potentially thread-unsafe if +* wcsnps() is being used dynamically to alter its value. +* +* ndpmax int The number of DPja or DQia keywords to allocate space +* for. If set to -1, the value of the global variable +* NDPMAX will be used. This is potentially +* thread-unsafe if disndp() is being used dynamically to +* alter its value. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* +* wcsauxi() - Default constructor for the auxprm struct +* ----------------------------------------------------- +* wcsauxi() optionally allocates memory for an auxprm struct, attaches it to +* wcsprm, and sets all members of the struct to default values. +* +* Given: +* alloc int If true, allocate memory unconditionally for the +* auxprm struct. +* +* If false, it is assumed that wcsprm::aux has already +* been set to point to an auxprm struct, in which case +* the user is responsible for managing that memory. +* However, if wcsprm::aux is a null pointer, memory will +* be allocated regardless. (In other words, setting +* alloc true saves having to initalize the pointer to +* zero.) +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* +* +* wcssub() - Subimage extraction routine for the wcsprm struct +* ------------------------------------------------------------ +* wcssub() extracts the coordinate description for a subimage from a wcsprm +* struct. It does a deep copy, using wcsinit() to allocate memory for its +* arrays if required. Only the "information to be provided" part of the +* struct is extracted. Consequently, wcsset() need not have been, and won't +* be invoked on the struct from which the subimage is extracted. A call to +* wcsset() is required to set up the subimage struct. +* +* The world coordinate system of the subimage must be separable in the sense +* that the world coordinates at any point in the subimage must depend only on +* the pixel coordinates of the axes extracted. In practice, this means that +* the linear transformation matrix of the original image must not contain +* non-zero off-diagonal terms that associate any of the subimage axes with any +* of the non-subimage axes. Likewise, if any distortions are associated with +* the subimage axes, they must not depend on any of the axes that are not +* being extracted. +* +* Note that while the required elements of the tabprm array are extracted, the +* wtbarr array is not. (Thus it is not appropriate to call wcssub() after +* wcstab() but before filling the tabprm structs - refer to wcshdr.h.) +* +* wcssub() can also add axes to a wcsprm struct. The new axes will be created +* using the defaults set by wcsinit() which produce a simple, unnamed, linear +* axis with world coordinate equal to the pixel coordinate. These default +* values can be changed afterwards, before invoking wcsset(). +* +* Given: +* alloc int If true, allocate memory for the crpix, etc. arrays in +* the destination. Otherwise, it is assumed that +* pointers to these arrays have been set by the user +* except if they are null pointers in which case memory +* will be allocated for them regardless. +* +* wcssrc const struct wcsprm* +* Struct to extract from. +* +* Given and returned: +* nsub int* +* axes int[] Vector of length *nsub containing the image axis +* numbers (1-relative) to extract. Order is +* significant; axes[0] is the axis number of the input +* image that corresponds to the first axis in the +* subimage, etc. +* +* Use an axis number of 0 to create a new axis using +* the defaults set by wcsinit(). They can be changed +* later. +* +* nsub (the pointer) may be set to zero, and so also may +* *nsub, which is interpreted to mean all axes in the +* input image; the number of axes will be returned if +* nsub != 0x0. axes itself (the pointer) may be set to +* zero to indicate the first *nsub axes in their +* original order. +* +* Set both nsub (or *nsub) and axes to zero to do a deep +* copy of one wcsprm struct to another. +* +* Subimage extraction by coordinate axis type may be +* done by setting the elements of axes[] to the +* following special preprocessor macro values: +* +* WCSSUB_LONGITUDE: Celestial longitude. +* WCSSUB_LATITUDE: Celestial latitude. +* WCSSUB_CUBEFACE: Quadcube CUBEFACE axis. +* WCSSUB_SPECTRAL: Spectral axis. +* WCSSUB_STOKES: Stokes axis. +* WCSSUB_TIME: Time axis. +* +* Refer to the notes (below) for further usage examples. +* +* On return, *nsub will be set to the number of axes in +* the subimage; this may be zero if there were no axes +* of the required type(s) (in which case no memory will +* be allocated). axes[] will contain the axis numbers +* that were extracted, or 0 for newly created axes. The +* vector length must be sufficient to contain all axis +* numbers. No checks are performed to verify that the +* coordinate axes are consistent, this is done by +* wcsset(). +* +* wcsdst struct wcsprm* +* Struct describing the subimage. wcsprm::flag should +* be set to -1 if wcsdst was not previously initialized +* (memory leaks may result if it was previously +* initialized). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 12: Invalid subimage specification. +* 13: Non-separable subimage coordinate system. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* Notes: +* 1: Combinations of subimage axes of particular types may be extracted in +* the same order as they occur in the input image by combining +* preprocessor codes, for example +* += *nsub = 1; += axes[0] = WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_SPECTRAL; +* +* would extract the longitude, latitude, and spectral axes in the same +* order as the input image. If one of each were present, *nsub = 3 would +* be returned. +* +* For convenience, WCSSUB_CELESTIAL is defined as the combination +* WCSSUB_LONGITUDE | WCSSUB_LATITUDE | WCSSUB_CUBEFACE. +* +* The codes may also be negated to extract all but the types specified, +* for example +* += *nsub = 4; += axes[0] = WCSSUB_LONGITUDE; += axes[1] = WCSSUB_LATITUDE; += axes[2] = WCSSUB_CUBEFACE; += axes[3] = -(WCSSUB_SPECTRAL | WCSSUB_STOKES); +* +* The last of these specifies all axis types other than spectral or +* Stokes. Extraction is done in the order specified by axes[] a +* longitude axis (if present) would be extracted first (via axes[0]) and +* not subsequently (via axes[3]). Likewise for the latitude and cubeface +* axes in this example. +* +* From the foregoing, it is apparent that the value of *nsub returned may +* be less than or greater than that given. However, it will never exceed +* the number of axes in the input image (plus the number of newly-created +* axes if any were specified on input). +* +* +* wcscompare() - Compare two wcsprm structs for equality +* ------------------------------------------------------ +* wcscompare() compares two wcsprm structs for equality. +* +* Given: +* cmp int A bit field controlling the strictness of the +* comparison. When 0, all fields must be identical. +* +* The following constants may be or'ed together to +* relax the comparison: +* WCSCOMPARE_ANCILLARY: Ignore ancillary keywords +* that don't change the WCS transformation, such +* as DATE-OBS or EQUINOX. +* WCSCOMPARE_TILING: Ignore integral differences in +* CRPIXja. This is the 'tiling' condition, where +* two WCSes cover different regions of the same +* map projection and align on the same map grid. +* WCSCOMPARE_CRPIX: Ignore any differences at all in +* CRPIXja. The two WCSes cover different regions +* of the same map projection but may not align on +* the same map grid. Overrides WCSCOMPARE_TILING. +* +* tol double Tolerance for comparison of floating-point values. +* For example, for tol == 1e-6, all floating-point +* values in the structs must be equal to the first 6 +* decimal places. A value of 0 implies exact equality. +* +* wcs1 const struct wcsprm* +* The first wcsprm struct to compare. +* +* wcs2 const struct wcsprm* +* The second wcsprm struct to compare. +* +* Returned: +* equal int* Non-zero when the given structs are equal. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null pointer passed. +* +* +* wcscopy() macro - Copy routine for the wcsprm struct +* ---------------------------------------------------- +* wcscopy() does a deep copy of one wcsprm struct to another. As of +* WCSLIB 3.6, it is implemented as a preprocessor macro that invokes +* wcssub() with the nsub and axes pointers both set to zero. +* +* +* wcsfree() - Destructor for the wcsprm struct +* -------------------------------------------- +* wcsfree() frees memory allocated for the wcsprm arrays by wcsinit() and/or +* wcsset(). wcsinit() records the memory it allocates and wcsfree() will only +* attempt to free this. +* +* PLEASE NOTE: wcsfree() must not be invoked on a wcsprm struct that was not +* initialized by wcsinit(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* wcstrim() - Free unused arrays in the wcsprm struct +* --------------------------------------------------- +* wcstrim() frees memory allocated by wcsinit() for arrays in the wcsprm +* struct that remains unused after it has been set up by wcsset(). +* +* The free'd array members are associated with FITS WCS keyrecords that are +* rarely used and usually just bloat the struct: wcsprm::crota, wcsprm::colax, +* wcsprm::cname, wcsprm::crder, wcsprm::csyer, wcsprm::czphs, and +* wcsprm::cperi. If unused, wcsprm::pv, wcsprm::ps, and wcsprm::cd are also +* freed. +* +* Once these arrays have been freed, a test such as += += if (!undefined(wcs->cname[i])) {...} += +* must be protected as follows += += if (wcs->cname && !undefined(wcs->cname[i])) {...} += +* In addition, if wcsprm::npv is non-zero but less than wcsprm::npvmax, then +* the unused space in wcsprm::pv will be recovered (using realloc()). +* Likewise for wcsprm::ps. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 14: wcsprm struct is unset. +* +* +* wcssize() - Compute the size of a wcsprm struct +* ----------------------------------------------- +* wcssize() computes the full size of a wcsprm struct, including allocated +* memory. +* +* Given: +* wcs const struct wcsprm* +* Coordinate transformation parameters. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct wcsprm). The second element +* is the total allocated size, in bytes, assuming that +* the allocation was done by wcsini(). This figure +* includes memory allocated for members of constituent +* structs, such as wcsprm::lin. +* +* It is not an error for the struct not to have been set +* up via wcsset(), which normally results in additional +* memory allocation. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* auxsize() - Compute the size of a auxprm struct +* ----------------------------------------------- +* auxsize() computes the full size of an auxprm struct, including allocated +* memory. +* +* Given: +* aux const struct auxprm* +* Auxiliary coordinate information. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct auxprm). The second element +* is the total allocated size, in bytes, currently zero. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* wcsenq() - enquire about the state of a wcsprm struct +* ----------------------------------------------------- +* wcsenq() may be used to obtain information about the state of a wcsprm +* struct. The function returns a true/false answer for the enquiry asked. +* +* Given: +* wcs const struct wcsprm* +* Coordinate transformation parameters. +* +* enquiry int Enquiry according to the following parameters: +* WCSENQ_MEM: memory in the struct is being managed by +* WCSLIB (see wcsini()). +* WCSENQ_SET: the struct has been set up by wcsset(). +* WCSENQ_BYP: the struct is in bypass mode (see +* wcsset()). +* WCSENQ_CHK: the struct is self-consistent in that +* no changes have been made to any of the +* "parameters to be given" since the last +* call to wcsset(). +* These may be combined by logical OR, e.g. +* WCSENQ_MEM | WCSENQ_SET. The enquiry result will be +* the logical AND of the individual results. +* +* Function return value: +* int Enquiry result: +* 0: False. +* 1: True. +* +* +* wcsprt() - Print routine for the wcsprm struct +* ---------------------------------------------- +* wcsprt() prints the contents of a wcsprm struct using wcsprintf(). Mainly +* intended for diagnostic purposes. +* +* Given: +* wcs const struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* wcsperr() - Print error messages from a wcsprm struct +* ----------------------------------------------------- +* wcsperr() prints the error message(s), if any, stored in a wcsprm struct, +* and the linprm, celprm, prjprm, spcprm, and tabprm structs that it contains. +* If there are no errors then nothing is printed. It uses wcserr_prt(), q.v. +* +* Given: +* wcs const struct wcsprm* +* Coordinate transformation parameters. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* wcsbchk() - Enable/disable bounds checking +* ------------------------------------------ +* wcsbchk() is used to control bounds checking in the projection routines. +* Note that wcsset() always enables bounds checking. wcsbchk() will invoke +* wcsset() on the wcsprm struct beforehand if necessary. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Given: +* bounds int If bounds&1 then enable strict bounds checking for the +* spherical-to-Cartesian (s2x) transformation for the +* AZP, SZP, TAN, SIN, ZPN, and COP projections. +* +* If bounds&2 then enable strict bounds checking for the +* Cartesian-to-spherical (x2s) transformation for the +* HPX and XPH projections. +* +* If bounds&4 then enable bounds checking on the native +* coordinates returned by the Cartesian-to-spherical +* (x2s) transformations using prjchk(). +* +* Zero it to disable all checking. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* wcsset() - Setup routine for the wcsprm struct +* ---------------------------------------------- +* wcsset() sets up a wcsprm struct according to information supplied within +* it (refer to the description of the wcsprm struct). +* +* wcsset() recognizes the NCP projection and converts it to the equivalent SIN +* projection and likewise translates GLS into SFL. It also translates the +* AIPS spectral types ('FREQ-LSR', 'FELO-HEL', etc.), possibly changing the +* input header keywords wcsprm::ctype and/or wcsprm::specsys if necessary. +* +* Note that this routine need not be called directly; it will be invoked by +* wcsp2s() and wcss2p() if the wcsprm::flag is anything other than a +* predefined magic value. +* +* wcsset() normally operates regardless of the value of wcsprm::flag; i.e. +* even if a struct was previously set up it will be reset unconditionally. +* However, a wcsprm struct may be put into "bypass" mode by invoking wcsset() +* initially with wcsprm::flag == 1 (rather than 0). wcsset() will return +* immediately if invoked on a struct in that state. To take a struct out of +* bypass mode, simply reset wcsprm::flag to zero. See also wcsenq(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* Notes: +* 1: wcsset() always enables strict bounds checking in the projection +* routines (via a call to prjini()). Use wcsbchk() to modify +* bounds-checking after wcsset() is invoked. +* +* +* wcsp2s() - Pixel-to-world transformation +* ---------------------------------------- +* wcsp2s() transforms pixel coordinates to world coordinates. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Given: +* ncoord, +* nelem int The number of coordinates, each of vector length +* nelem but containing wcs.naxis coordinate elements. +* Thus nelem must equal or exceed the value of the +* NAXIS keyword unless ncoord == 1, in which case nelem +* is not used. +* +* pixcrd const double[ncoord][nelem] +* Array of pixel coordinates. +* +* Returned: +* imgcrd double[ncoord][nelem] +* Array of intermediate world coordinates. For +* celestial axes, imgcrd[][wcs.lng] and +* imgcrd[][wcs.lat] are the projected x-, and +* y-coordinates in pseudo "degrees". For spectral +* axes, imgcrd[][wcs.spec] is the intermediate spectral +* coordinate, in SI units. For time axes, +* imgcrd[][wcs.time] is the intermediate time +* coordinate. +* +* phi,theta double[ncoord] +* Longitude and latitude in the native coordinate system +* of the projection [deg]. +* +* world double[ncoord][nelem] +* Array of world coordinates. For celestial axes, +* world[][wcs.lng] and world[][wcs.lat] are the +* celestial longitude and latitude [deg]. For spectral +* axes, world[][wcs.spec] is the spectral coordinate, in +* SI units. For time axes, world[][wcs.time] is the +* time coordinate. +* +* stat int[ncoord] +* Status return value for each coordinate: +* 0: Success. +* 1+: A bit mask indicating invalid pixel coordinate +* element(s). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* 8: One or more of the pixel coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* +* wcss2p() - World-to-pixel transformation +* ---------------------------------------- +* wcss2p() transforms world coordinates to pixel coordinates. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Given: +* ncoord, +* nelem int The number of coordinates, each of vector length nelem +* but containing wcs.naxis coordinate elements. Thus +* nelem must equal or exceed the value of the NAXIS +* keyword unless ncoord == 1, in which case nelem is not +* used. +* +* world const double[ncoord][nelem] +* Array of world coordinates. For celestial axes, +* world[][wcs.lng] and world[][wcs.lat] are the +* celestial longitude and latitude [deg]. For spectral +* axes, world[][wcs.spec] is the spectral coordinate, in +* SI units. For time axes, world[][wcs.time] is the +* time coordinate. +* +* Returned: +* phi,theta double[ncoord] +* Longitude and latitude in the native coordinate +* system of the projection [deg]. +* +* imgcrd double[ncoord][nelem] +* Array of intermediate world coordinates. For +* celestial axes, imgcrd[][wcs.lng] and +* imgcrd[][wcs.lat] are the projected x-, and +* y-coordinates in pseudo "degrees". For quadcube +* projections with a CUBEFACE axis the face number is +* also returned in imgcrd[][wcs.cubeface]. For +* spectral axes, imgcrd[][wcs.spec] is the intermediate +* spectral coordinate, in SI units. For time axes, +* imgcrd[][wcs.time] is the intermediate time +* coordinate. +* +* pixcrd double[ncoord][nelem] +* Array of pixel coordinates. +* +* stat int[ncoord] +* Status return value for each coordinate: +* 0: Success. +* 1+: A bit mask indicating invalid world coordinate +* element(s). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* 9: One or more of the world coordinates were +* invalid, as indicated by the stat vector. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* +* wcsmix() - Hybrid coordinate transformation +* ------------------------------------------- +* wcsmix(), given either the celestial longitude or latitude plus an element +* of the pixel coordinate, solves for the remaining elements by iterating on +* the unknown celestial coordinate element using wcss2p(). Refer also to the +* notes below. +* +* Given and returned: +* wcs struct wcsprm* +* Indices for the celestial coordinates obtained +* by parsing the wcsprm::ctype[]. +* +* Given: +* mixpix int Which element of the pixel coordinate is given. +* +* mixcel int Which element of the celestial coordinate is given: +* 1: Celestial longitude is given in +* world[wcs.lng], latitude returned in +* world[wcs.lat]. +* 2: Celestial latitude is given in +* world[wcs.lat], longitude returned in +* world[wcs.lng]. +* +* vspan const double[2] +* Solution interval for the celestial coordinate [deg]. +* The ordering of the two limits is irrelevant. +* Longitude ranges may be specified with any convenient +* normalization, for example [-120,+120] is the same as +* [240,480], except that the solution will be returned +* with the same normalization, i.e. lie within the +* interval specified. +* +* vstep const double +* Step size for solution search [deg]. If zero, a +* sensible, although perhaps non-optimal default will be +* used. +* +* viter int If a solution is not found then the step size will be +* halved and the search recommenced. viter controls how +* many times the step size is halved. The allowed range +* is 5 - 10. +* +* Given and returned: +* world double[naxis] +* World coordinate elements. world[wcs.lng] and +* world[wcs.lat] are the celestial longitude and +* latitude [deg]. Which is given and which returned +* depends on the value of mixcel. All other elements +* are given. +* +* Returned: +* phi,theta double[naxis] +* Longitude and latitude in the native coordinate +* system of the projection [deg]. +* +* imgcrd double[naxis] +* Image coordinate elements. imgcrd[wcs.lng] and +* imgcrd[wcs.lat] are the projected x-, and +* y-coordinates in pseudo "degrees". +* +* Given and returned: +* pixcrd double[naxis] +* Pixel coordinate. The element indicated by mixpix is +* given and the remaining elements are returned. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* 10: Invalid world coordinate. +* 11: No solution found in the specified interval. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* Notes: +* 1: Initially the specified solution interval is checked to see if it's a +* "crossing" interval. If it isn't, a search is made for a crossing +* solution by iterating on the unknown celestial coordinate starting at +* the upper limit of the solution interval and decrementing by the +* specified step size. A crossing is indicated if the trial value of the +* pixel coordinate steps through the value specified. If a crossing +* interval is found then the solution is determined by a modified form of +* "regula falsi" division of the crossing interval. If no crossing +* interval was found within the specified solution interval then a search +* is made for a "non-crossing" solution as may arise from a point of +* tangency. The process is complicated by having to make allowance for +* the discontinuities that occur in all map projections. +* +* Once one solution has been determined others may be found by subsequent +* invokations of wcsmix() with suitably restricted solution intervals. +* +* Note the circumstance that arises when the solution point lies at a +* native pole of a projection in which the pole is represented as a +* finite curve, for example the zenithals and conics. In such cases two +* or more valid solutions may exist but wcsmix() only ever returns one. +* +* Because of its generality wcsmix() is very compute-intensive. For +* compute-limited applications more efficient special-case solvers could +* be written for simple projections, for example non-oblique cylindrical +* projections. +* +* +* wcsccs() - Change celestial coordinate system +* --------------------------------------------- +* wcsccs() changes the celestial coordinate system of a wcsprm struct. For +* example, from equatorial to galactic coordinates. +* +* Parameters that define the spherical coordinate transformation, essentially +* being three Euler angles, must be provided. Thereby wcsccs() does not need +* prior knowledge of specific celestial coordinate systems. It also has the +* advantage of making it completely general. +* +* Auxiliary members of the wcsprm struct relating to equatorial celestial +* coordinate systems may also be changed. +* +* Only orthodox spherical coordinate systems are supported. That is, they +* must be right-handed, with latitude increasing from zero at the equator to +* +90 degrees at the pole. This precludes systems such as aziumuth and zenith +* distance, which, however, could be handled as negative azimuth and +* elevation. +* +* PLEASE NOTE: Information in the wcsprm struct relating to the original +* coordinate system will be overwritten and therefore lost. If this is +* undesirable, invoke wcsccs() on a copy of the struct made with wcssub(). +* The wcsprm struct is reset on return with an explicit call to wcsset(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. Particular +* "values to be given" elements of the wcsprm struct +* are modified. +* +* Given: +* lng2p1, +* lat2p1 double Longitude and latitude in the new celestial coordinate +* system of the pole (i.e. latitude +90) of the original +* system [deg]. See notes 1 and 2 below. +* +* lng1p2 double Longitude in the original celestial coordinate system +* of the pole (i.e. latitude +90) of the new system +* [deg]. See note 1 below. +* +* clng,clat const char* +* Longitude and latitude identifiers of the new CTYPEia +* celestial axis codes, without trailing dashes. For +* example, "RA" and "DEC" or "GLON" and "GLAT". Up to +* four characters are used, longer strings need not be +* null-terminated. +* +* radesys const char* +* Used when transforming to equatorial coordinates, +* identified by clng == "RA" and clat = "DEC". May be +* set to the null pointer to preserve the current value. +* Up to 71 characters are used, longer strings need not +* be null-terminated. +* +* If the new coordinate system is anything other than +* equatorial, then wcsprm::radesys will be cleared. +* +* equinox double Used when transforming to equatorial coordinates. May +* be set to zero to preserve the current value. +* +* If the new coordinate system is not equatorial, then +* wcsprm::equinox will be marked as undefined. +* +* alt const char* +* Character code for alternate coordinate descriptions +* (i.e. the 'a' in keyword names such as CTYPEia). This +* is blank for the primary coordinate description, or +* one of the 26 upper-case letters, A-Z. May be set to +* the null pointer, or null string if no change is +* required. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 12: Invalid subimage specification (no celestial +* axes). +* +* Notes: +* 1: Follows the prescription given in WCS Paper II, Sect. 2.7 for changing +* celestial coordinates. +* +* The implementation takes account of indeterminacies that arise in that +* prescription in the particular cases where one of the poles of the new +* system is at the fiducial point, or one of them is at the native pole. +* +* 2: If lat2p1 == +90, i.e. where the poles of the two coordinate systems +* coincide, then the spherical coordinate transformation becomes a simple +* change in origin of longitude given by +* lng2 = lng1 + (lng2p1 - lng1p2 - 180), and lat2 = lat1, where +* (lng2,lat2) are coordinates in the new system, and (lng1,lat1) are +* coordinates in the original system. +* +* Likewise, if lat2p1 == -90, then lng2 = -lng1 + (lng2p1 + lng1p2), and +* lat2 = -lat1. +* +* 3: For example, if the original coordinate system is B1950 equatorial and +* the desired new coordinate system is galactic, then +* +* - (lng2p1,lat2p1) are the galactic coordinates of the B1950 celestial +* pole, defined by the IAU to be (123.0,+27.4), and lng1p2 is the B1950 +* right ascension of the galactic pole, defined as 192.25. Clearly +* these coordinates are fixed for a particular coordinate +* transformation. +* +* - (clng,clat) would be 'GLON' and 'GLAT', these being the FITS standard +* identifiers for galactic coordinates. +* +* - Since the new coordinate system is not equatorial, wcsprm::radesys +* and wcsprm::equinox will be cleared. +* +* 4. The coordinates required for some common transformations (obtained from +* https://ned.ipac.caltech.edu/coordinate_calculator) are as follows: +* += (123.0000,+27.4000) galactic coordinates of B1950 celestial pole, += (192.2500,+27.4000) B1950 equatorial coordinates of galactic pole. +* += (122.9319,+27.1283) galactic coordinates of J2000 celestial pole, += (192.8595,+27.1283) J2000 equatorial coordinates of galactic pole. +* += (359.6774,+89.7217) B1950 equatorial coordinates of J2000 pole, += (180.3162,+89.7217) J2000 equatorial coordinates of B1950 pole. +* += (270.0000,+66.5542) B1950 equatorial coordinates of B1950 ecliptic pole, += ( 90.0000,+66.5542) B1950 ecliptic coordinates of B1950 celestial pole. +* += (270.0000,+66.5607) J2000 equatorial coordinates of J2000 ecliptic pole, += ( 90.0000,+66.5607) J2000 ecliptic coordinates of J2000 celestial pole. +* += ( 26.7315,+15.6441) supergalactic coordinates of B1950 celestial pole, += (283.1894,+15.6441) B1950 equatorial coordinates of supergalactic pole. +* += ( 26.4505,+15.7089) supergalactic coordinates of J2000 celestial pole, += (283.7542,+15.7089) J2000 equatorial coordinates of supergalactic pole. +* +* +* wcssptr() - Spectral axis translation +* ------------------------------------- +* wcssptr() translates the spectral axis in a wcsprm struct. For example, a +* 'FREQ' axis may be translated into 'ZOPT-F2W' and vice versa. +* +* PLEASE NOTE: Information in the wcsprm struct relating to the original +* coordinate system will be overwritten and therefore lost. If this is +* undesirable, invoke wcssptr() on a copy of the struct made with wcssub(). +* The wcsprm struct is reset on return with an explicit call to wcsset(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* i int* Index of the spectral axis (0-relative). If given < 0 +* it will be set to the first spectral axis identified +* from the ctype[] keyvalues in the wcsprm struct. +* +* ctype char[9] Desired spectral CTYPEia. Wildcarding may be used as +* for the ctypeS2 argument to spctrn() as described in +* the prologue of spc.h, i.e. if the final three +* characters are specified as "???", or if just the +* eighth character is specified as '?', the correct +* algorithm code will be substituted and returned. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* 12: Invalid subimage specification (no spectral +* axis). +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* +* wcslib_version() - WCSLIB version number +* ---------------------------------------- +* wcslib_version() returns the WCSLIB version number. +* +* The major version number changes when the ABI changes or when the license +* conditions change. ABI changes typically result from a change to the +* contents of one of the structs. The major version number is used to +* distinguish between incompatible versions of the sharable library. +* +* The minor version number changes with new functionality or bug fixes that do +* not involve a change in the ABI. +* +* The auxiliary version number (which is often absent) signals changes to the +* documentation, test suite, build procedures, or any other change that does +* not affect the compiled library. +* +* Returned: +* vers[3] int[3] The broken-down version number: +* 0: Major version number. +* 1: Minor version number. +* 2: Auxiliary version number (zero if absent). +* May be given as a null pointer if not required. +* +* Function return value: +* char* A null-terminated, statically allocated string +* containing the version number in the usual form, i.e. +* "..". +* +* +* wcsprm struct - Coordinate transformation parameters +* ---------------------------------------------------- +* The wcsprm struct contains information required to transform world +* coordinates. It consists of certain members that must be set by the user +* ("given") and others that are set by the WCSLIB routines ("returned"). +* While the addresses of the arrays themselves may be set by wcsinit() if it +* (optionally) allocates memory, their contents must be set by the user. +* +* Some parameters that are given are not actually required for transforming +* coordinates. These are described as "auxiliary"; the struct simply provides +* a place to store them, though they may be used by wcshdo() in constructing a +* FITS header from a wcsprm struct. Some of the returned values are supplied +* for informational purposes and others are for internal use only as +* indicated. +* +* In practice, it is expected that a WCS parser would scan the FITS header to +* determine the number of coordinate axes. It would then use wcsinit() to +* allocate memory for arrays in the wcsprm struct and set default values. +* Then as it reread the header and identified each WCS keyrecord it would load +* the value into the relevant wcsprm array element. This is essentially what +* wcspih() does - refer to the prologue of wcshdr.h. As the final step, +* wcsset() is invoked, either directly or indirectly, to set the derived +* members of the wcsprm struct. wcsset() strips off trailing blanks in all +* string members and null-fills the character array. +* +* int flag +* (Given and returned) This flag must be set to zero (or 1, see wcsset()) +* whenever any of the following wcsprm members are set or changed: +* +* - wcsprm::naxis (q.v., not normally set by the user), +* - wcsprm::crpix, +* - wcsprm::pc, +* - wcsprm::cdelt, +* - wcsprm::crval, +* - wcsprm::cunit, +* - wcsprm::ctype, +* - wcsprm::lonpole, +* - wcsprm::latpole, +* - wcsprm::restfrq, +* - wcsprm::restwav, +* - wcsprm::npv, +* - wcsprm::pv, +* - wcsprm::nps, +* - wcsprm::ps, +* - wcsprm::cd, +* - wcsprm::crota, +* - wcsprm::altlin, +* - wcsprm::ntab, +* - wcsprm::nwtb, +* - wcsprm::tab, +* - wcsprm::wtb. +* +* This signals the initialization routine, wcsset(), to recompute the +* returned members of the linprm, celprm, spcprm, and tabprm structs. +* wcsset() will reset flag to indicate that this has been done. +* +* PLEASE NOTE: flag should be set to -1 when wcsinit() is called for the +* first time for a particular wcsprm struct in order to initialize memory +* management. It must ONLY be used on the first initialization otherwise +* memory leaks may result. +* +* int naxis +* (Given or returned) Number of pixel and world coordinate elements. +* +* If wcsinit() is used to initialize the linprm struct (as would normally +* be the case) then it will set naxis from the value passed to it as a +* function argument. The user should not subsequently modify it. +* +* double *crpix +* (Given) Address of the first element of an array of double containing +* the coordinate reference pixel, CRPIXja. +* +* double *pc +* (Given) Address of the first element of the PCi_ja (pixel coordinate) +* transformation matrix. The expected order is +* += struct wcsprm wcs; += wcs.pc = {PC1_1, PC1_2, PC2_1, PC2_2}; +* +* This may be constructed conveniently from a 2-D array via +* += double m[2][2] = {{PC1_1, PC1_2}, += {PC2_1, PC2_2}}; +* +* which is equivalent to +* += double m[2][2]; += m[0][0] = PC1_1; += m[0][1] = PC1_2; += m[1][0] = PC2_1; += m[1][1] = PC2_2; +* +* The storage order for this 2-D array is the same as for the 1-D array, +* whence +* += wcs.pc = *m; +* +* would be legitimate. +* +* double *cdelt +* (Given) Address of the first element of an array of double containing +* the coordinate increments, CDELTia. +* +* double *crval +* (Given) Address of the first element of an array of double containing +* the coordinate reference values, CRVALia. +* +* char (*cunit)[72] +* (Given) Address of the first element of an array of char[72] containing +* the CUNITia keyvalues which define the units of measurement of the +* CRVALia, CDELTia, and CDi_ja keywords. +* +* As CUNITia is an optional header keyword, cunit[][72] may be left blank +* but otherwise is expected to contain a standard units specification as +* defined by WCS Paper I. Utility function wcsutrn(), described in +* wcsunits.h, is available to translate commonly used non-standard units +* specifications but this must be done as a separate step before invoking +* wcsset(). +* +* For celestial axes, if cunit[][72] is not blank, wcsset() uses +* wcsunits() to parse it and scale cdelt[], crval[], and cd[][*] to +* degrees. It then resets cunit[][72] to "deg". +* +* For spectral axes, if cunit[][72] is not blank, wcsset() uses wcsunits() +* to parse it and scale cdelt[], crval[], and cd[][*] to SI units. It +* then resets cunit[][72] accordingly. +* +* wcsset() ignores cunit[][72] for other coordinate types; cunit[][72] may +* be used to label coordinate values. +* +* These variables accomodate the longest allowed string-valued FITS +* keyword, being limited to 68 characters, plus the null-terminating +* character. +* +* char (*ctype)[72] +* (Given) Address of the first element of an array of char[72] containing +* the coordinate axis types, CTYPEia. +* +* The ctype[][72] keyword values must be in upper case and there must be +* zero or one pair of matched celestial axis types, and zero or one +* spectral axis. The ctype[][72] strings should be padded with blanks on +* the right and null-terminated so that they are at least eight characters +* in length. +* +* These variables accomodate the longest allowed string-valued FITS +* keyword, being limited to 68 characters, plus the null-terminating +* character. +* +* double lonpole +* (Given and returned) The native longitude of the celestial pole, phi_p, +* given by LONPOLEa [deg] or by PVi_2a [deg] attached to the longitude +* axis which takes precedence if defined, and ... +* double latpole +* (Given and returned) ... the native latitude of the celestial pole, +* theta_p, given by LATPOLEa [deg] or by PVi_3a [deg] attached to the +* longitude axis which takes precedence if defined. +* +* lonpole and latpole may be left to default to values set by wcsinit() +* (see celprm::ref), but in any case they will be reset by wcsset() to +* the values actually used. Note therefore that if the wcsprm struct is +* reused without resetting them, whether directly or via wcsinit(), they +* will no longer have their default values. +* +* double restfrq +* (Given) The rest frequency [Hz], and/or ... +* double restwav +* (Given) ... the rest wavelength in vacuo [m], only one of which need be +* given, the other should be set to zero. +* +* int npv +* (Given) The number of entries in the wcsprm::pv[] array. +* +* int npvmax +* (Given or returned) The length of the wcsprm::pv[] array. +* +* npvmax will be set by wcsinit() if it allocates memory for wcsprm::pv[], +* otherwise it must be set by the user. See also wcsnpv(). +* +* struct pvcard *pv +* (Given) Address of the first element of an array of length npvmax of +* pvcard structs. +* +* As a FITS header parser encounters each PVi_ma keyword it should load it +* into a pvcard struct in the array and increment npv. wcsset() +* interprets these as required. +* +* Note that, if they were not given, wcsset() resets the entries for +* PVi_1a, PVi_2a, PVi_3a, and PVi_4a for longitude axis i to match +* phi_0 and theta_0 (the native longitude and latitude of the reference +* point), LONPOLEa and LATPOLEa respectively. +* +* int nps +* (Given) The number of entries in the wcsprm::ps[] array. +* +* int npsmax +* (Given or returned) The length of the wcsprm::ps[] array. +* +* npsmax will be set by wcsinit() if it allocates memory for wcsprm::ps[], +* otherwise it must be set by the user. See also wcsnps(). +* +* struct pscard *ps +* (Given) Address of the first element of an array of length npsmax of +* pscard structs. +* +* As a FITS header parser encounters each PSi_ma keyword it should load it +* into a pscard struct in the array and increment nps. wcsset() +* interprets these as required (currently no PSi_ma keyvalues are +* recognized). +* +* double *cd +* (Given) For historical compatibility, the wcsprm struct supports two +* alternate specifications of the linear transformation matrix, those +* associated with the CDi_ja keywords, and ... +* double *crota +* (Given) ... those associated with the CROTAi keywords. Although these +* may not formally co-exist with PCi_ja, the approach taken here is simply +* to ignore them if given in conjunction with PCi_ja. +* +* int altlin +* (Given) altlin is a bit flag that denotes which of the PCi_ja, CDi_ja +* and CROTAi keywords are present in the header: +* +* - Bit 0: PCi_ja is present. +* +* - Bit 1: CDi_ja is present. +* +* Matrix elements in the IRAF convention are equivalent to the product +* CDi_ja = CDELTia * PCi_ja, but the defaults differ from that of the +* PCi_ja matrix. If one or more CDi_ja keywords are present then all +* unspecified CDi_ja default to zero. If no CDi_ja (or CROTAi) keywords +* are present, then the header is assumed to be in PCi_ja form whether +* or not any PCi_ja keywords are present since this results in an +* interpretation of CDELTia consistent with the original FITS +* specification. +* +* While CDi_ja may not formally co-exist with PCi_ja, it may co-exist +* with CDELTia and CROTAi which are to be ignored. +* +* - Bit 2: CROTAi is present. +* +* In the AIPS convention, CROTAi may only be associated with the +* latitude axis of a celestial axis pair. It specifies a rotation in +* the image plane that is applied AFTER the CDELTia; any other CROTAi +* keywords are ignored. +* +* CROTAi may not formally co-exist with PCi_ja. +* +* CROTAi and CDELTia may formally co-exist with CDi_ja but if so are to +* be ignored. +* +* - Bit 3: PCi_ja + CDELTia was derived from CDi_ja by wcspcx(). +* +* This bit is set by wcspcx() when it derives PCi_ja and CDELTia from +* CDi_ja via an orthonormal decomposition. In particular, it signals +* wcsset() not to replace PCi_ja by a copy of CDi_ja with CDELTia set +* to unity. +* +* CDi_ja and CROTAi keywords, if found, are to be stored in the wcsprm::cd +* and wcsprm::crota arrays which are dimensioned similarly to wcsprm::pc +* and wcsprm::cdelt. FITS header parsers should use the following +* procedure: +* +* - Whenever a PCi_ja keyword is encountered: altlin |= 1; +* +* - Whenever a CDi_ja keyword is encountered: altlin |= 2; +* +* - Whenever a CROTAi keyword is encountered: altlin |= 4; +* +* If none of these bits are set the PCi_ja representation results, i.e. +* wcsprm::pc and wcsprm::cdelt will be used as given. +* +* These alternate specifications of the linear transformation matrix are +* translated immediately to PCi_ja by wcsset() and are invisible to the +* lower-level WCSLIB routines. In particular, unless bit 3 is also set, +* wcsset() resets wcsprm::cdelt to unity if CDi_ja is present (and no +* PCi_ja). +* +* If CROTAi are present but none is associated with the latitude axis +* (and no PCi_ja or CDi_ja), then wcsset() reverts to a unity PCi_ja +* matrix. +* +* int velref +* (Given) AIPS velocity code VELREF, refer to spcaips(). +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::velref is changed. +* +* char alt[4] +* (Given, auxiliary) Character code for alternate coordinate descriptions +* (i.e. the 'a' in keyword names such as CTYPEia). This is blank for the +* primary coordinate description, or one of the 26 upper-case letters, +* A-Z. +* +* An array of four characters is provided for alignment purposes, only the +* first is used. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::alt is changed. +* +* int colnum +* (Given, auxiliary) Where the coordinate representation is associated +* with an image-array column in a FITS binary table, this variable may be +* used to record the relevant column number. +* +* It should be set to zero for an image header or pixel list. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::colnum is changed. +* +* int *colax +* (Given, auxiliary) Address of the first element of an array of int +* recording the column numbers for each axis in a pixel list. +* +* The array elements should be set to zero for an image header or image +* array in a binary table. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::colax is changed. +* +* char (*cname)[72] +* (Given, auxiliary) The address of the first element of an array of +* char[72] containing the coordinate axis names, CNAMEia. +* +* These variables accomodate the longest allowed string-valued FITS +* keyword, being limited to 68 characters, plus the null-terminating +* character. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::cname is changed. +* +* double *crder +* (Given, auxiliary) Address of the first element of an array of double +* recording the random error in the coordinate value, CRDERia. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::crder is changed. +* +* double *csyer +* (Given, auxiliary) Address of the first element of an array of double +* recording the systematic error in the coordinate value, CSYERia. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::csyer is changed. +* +* double *czphs +* (Given, auxiliary) Address of the first element of an array of double +* recording the time at the zero point of a phase axis, CZPHSia. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::czphs is changed. +* +* double *cperi +* (Given, auxiliary) Address of the first element of an array of double +* recording the period of a phase axis, CPERIia. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::cperi is changed. +* +* char wcsname[72] +* (Given, auxiliary) The name given to the coordinate representation, +* WCSNAMEa. This variable accomodates the longest allowed string-valued +* FITS keyword, being limited to 68 characters, plus the null-terminating +* character. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::wcsname is changed. +* +* char timesys[72] +* (Given, auxiliary) TIMESYS keyvalue, being the time scale (UTC, TAI, +* etc.) in which all other time-related auxiliary header values are +* recorded. Also defines the time scale for an image axis with CTYPEia +* set to 'TIME'. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::timesys is changed. +* +* char trefpos[72] +* (Given, auxiliary) TREFPOS keyvalue, being the location in space where +* the recorded time is valid. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::trefpos is changed. +* +* char trefdir[72] +* (Given, auxiliary) TREFDIR keyvalue, being the reference direction used +* in calculating a pathlength delay. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::trefdir is changed. +* +* char plephem[72] +* (Given, auxiliary) PLEPHEM keyvalue, being the Solar System ephemeris +* used for calculating a pathlength delay. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::plephem is changed. +* +* char timeunit[72] +* (Given, auxiliary) TIMEUNIT keyvalue, being the time units in which +* the following header values are expressed: TSTART, TSTOP, TIMEOFFS, +* TIMSYER, TIMRDER, TIMEDEL. It also provides the default value for +* CUNITia for time axes. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::timeunit is changed. +* +* char dateref[72] +* (Given, auxiliary) DATEREF keyvalue, being the date of a reference epoch +* relative to which other time measurements refer. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::dateref is changed. +* +* double mjdref[2] +* (Given, auxiliary) MJDREF keyvalue, equivalent to DATEREF expressed as +* a Modified Julian Date (MJD = JD - 2400000.5). The value is given as +* the sum of the two-element vector, allowing increased precision. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::mjdref is changed. +* +* double timeoffs +* (Given, auxiliary) TIMEOFFS keyvalue, being a time offset, which may be +* used, for example, to provide a uniform clock correction for times +* referenced to DATEREF. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::timeoffs is changed. +* +* char dateobs[72] +* (Given, auxiliary) DATE-OBS keyvalue, being the date at the start of the +* observation unless otherwise explained in the DATE-OBS keycomment, in +* ISO format, yyyy-mm-ddThh:mm:ss. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::dateobs is changed. +* +* char datebeg[72] +* (Given, auxiliary) DATE-BEG keyvalue, being the date at the start of the +* observation in ISO format, yyyy-mm-ddThh:mm:ss. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::datebeg is changed. +* +* char dateavg[72] +* (Given, auxiliary) DATE-AVG keyvalue, being the date at a representative +* mid-point of the observation in ISO format, yyyy-mm-ddThh:mm:ss. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::dateavg is changed. +* +* char dateend[72] +* (Given, auxiliary) DATE-END keyvalue, baing the date at the end of the +* observation in ISO format, yyyy-mm-ddThh:mm:ss. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::dateend is changed. +* +* double mjdobs +* (Given, auxiliary) MJD-OBS keyvalue, equivalent to DATE-OBS expressed +* as a Modified Julian Date (MJD = JD - 2400000.5). +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::mjdobs is changed. +* +* double mjdbeg +* (Given, auxiliary) MJD-BEG keyvalue, equivalent to DATE-BEG expressed +* as a Modified Julian Date (MJD = JD - 2400000.5). +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::mjdbeg is changed. +* +* double mjdavg +* (Given, auxiliary) MJD-AVG keyvalue, equivalent to DATE-AVG expressed +* as a Modified Julian Date (MJD = JD - 2400000.5). +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::mjdavg is changed. +* +* double mjdend +* (Given, auxiliary) MJD-END keyvalue, equivalent to DATE-END expressed +* as a Modified Julian Date (MJD = JD - 2400000.5). +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::mjdend is changed. +* +* double jepoch +* (Given, auxiliary) JEPOCH keyvalue, equivalent to DATE-OBS expressed +* as a Julian epoch. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::jepoch is changed. +* +* double bepoch +* (Given, auxiliary) BEPOCH keyvalue, equivalent to DATE-OBS expressed +* as a Besselian epoch +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::bepoch is changed. +* +* double tstart +* (Given, auxiliary) TSTART keyvalue, equivalent to DATE-BEG expressed +* as a time in units of TIMEUNIT relative to DATEREF+TIMEOFFS. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::tstart is changed. +* +* double tstop +* (Given, auxiliary) TSTOP keyvalue, equivalent to DATE-END expressed +* as a time in units of TIMEUNIT relative to DATEREF+TIMEOFFS. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::tstop is changed. +* +* double xposure +* (Given, auxiliary) XPOSURE keyvalue, being the effective exposure time +* in units of TIMEUNIT. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::xposure is changed. +* +* double telapse +* (Given, auxiliary) TELAPSE keyvalue, equivalent to the elapsed time +* between DATE-BEG and DATE-END, in units of TIMEUNIT. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::telapse is changed. +* +* double timsyer +* (Given, auxiliary) TIMSYER keyvalue, being the absolute error of the +* time values, in units of TIMEUNIT. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::timsyer is changed. +* +* double timrder +* (Given, auxiliary) TIMRDER keyvalue, being the accuracy of time stamps +* relative to each other, in units of TIMEUNIT. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::timrder is changed. +* +* double timedel +* (Given, auxiliary) TIMEDEL keyvalue, being the resolution of the time +* stamps. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::timedel is changed. +* +* double timepixr +* (Given, auxiliary) TIMEPIXR keyvalue, being the relative position of the +* time stamps in binned time intervals, a value between 0.0 and 1.0. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::timepixr is changed. +* +* double obsgeo[6] +* (Given, auxiliary) Location of the observer in a standard terrestrial +* reference frame. The first three give ITRS Cartesian coordinates +* OBSGEO-X [m], OBSGEO-Y [m], OBSGEO-Z [m], and the second three give +* OBSGEO-L [deg], OBSGEO-B [deg], OBSGEO-H [m], which are related through +* a standard transformation. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::obsgeo is changed. +* +* char obsorbit[72] +* (Given, auxiliary) OBSORBIT keyvalue, being the URI, URL, or name of an +* orbit ephemeris file giving spacecraft coordinates relating to TREFPOS. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::obsorbit is changed. +* +* char radesys[72] +* (Given, auxiliary) The equatorial or ecliptic coordinate system type, +* RADESYSa. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::radesys is changed. +* +* double equinox +* (Given, auxiliary) The equinox associated with dynamical equatorial or +* ecliptic coordinate systems, EQUINOXa (or EPOCH in older headers). Not +* applicable to ICRS equatorial or ecliptic coordinates. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::equinox is changed. +* +* char specsys[72] +* (Given, auxiliary) Spectral reference frame (standard of rest), +* SPECSYSa. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::specsys is changed. +* +* char ssysobs[72] +* (Given, auxiliary) The spectral reference frame in which there is no +* differential variation in the spectral coordinate across the +* field-of-view, SSYSOBSa. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::ssysobs is changed. +* +* double velosys +* (Given, auxiliary) The relative radial velocity [m/s] between the +* observer and the selected standard of rest in the direction of the +* celestial reference coordinate, VELOSYSa. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::velosys is changed. +* +* double zsource +* (Given, auxiliary) The redshift, ZSOURCEa, of the source. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::zsource is changed. +* +* char ssyssrc[72] +* (Given, auxiliary) The spectral reference frame (standard of rest), +* SSYSSRCa, in which wcsprm::zsource was measured. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::ssyssrc is changed. +* +* double velangl +* (Given, auxiliary) The angle [deg] that should be used to decompose an +* observed velocity into radial and transverse components. +* +* It is not necessary to reset the wcsprm struct (via wcsset()) when +* wcsprm::velangl is changed. +* +* struct auxprm *aux +* (Given, auxiliary) This struct holds auxiliary coordinate system +* information of a specialist nature. While these parameters may be +* widely recognized within particular fields of astronomy, they differ +* from the above auxiliary parameters in not being defined by any of the +* FITS WCS standards. Collecting them together in a separate struct that +* is allocated only when required helps to control bloat in the size of +* the wcsprm struct. +* +* int ntab +* (Given) See wcsprm::tab. +* +* int nwtb +* (Given) See wcsprm::wtb. +* +* struct tabprm *tab +* (Given) Address of the first element of an array of ntab tabprm structs +* for which memory has been allocated. These are used to store tabular +* transformation parameters. +* +* Although technically wcsprm::ntab and tab are "given", they will +* normally be set by invoking wcstab(), whether directly or indirectly. +* +* The tabprm structs contain some members that must be supplied and others +* that are derived. The information to be supplied comes primarily from +* arrays stored in one or more FITS binary table extensions. These +* arrays, referred to here as "wcstab arrays", are themselves located by +* parameters stored in the FITS image header. +* +* struct wtbarr *wtb +* (Given) Address of the first element of an array of nwtb wtbarr structs +* for which memory has been allocated. These are used in extracting +* wcstab arrays from a FITS binary table. +* +* Although technically wcsprm::nwtb and wtb are "given", they will +* normally be set by invoking wcstab(), whether directly or indirectly. +* +* char lngtyp[8] +* (Returned) Four-character WCS celestial longitude and ... +* char lattyp[8] +* (Returned) ... latitude axis types. e.g. "RA", "DEC", "GLON", "GLAT", +* etc. extracted from 'RA--', 'DEC-', 'GLON', 'GLAT', etc. in the first +* four characters of CTYPEia but with trailing dashes removed. (Declared +* as char[8] for alignment reasons.) +* +* int lng +* (Returned) Index for the longitude coordinate, and ... +* int lat +* (Returned) ... index for the latitude coordinate, and ... +* int spec +* (Returned) ... index for the spectral coordinate, and ... +* int time +* (Returned) ... index for the time coordinate in the imgcrd[][] and +* world[][] arrays in the API of wcsp2s(), wcss2p() and wcsmix(). +* +* These may also serve as indices into the pixcrd[][] array provided that +* the PCi_ja matrix does not transpose axes. +* +* int cubeface +* (Returned) Index into the pixcrd[][] array for the CUBEFACE axis. This +* is used for quadcube projections where the cube faces are stored on a +* separate axis (see wcs.h). +* +* int chksum +* (Returned) Checksum of keyvalues provided (see wcsprm::flag). Used by +* wcsenq() to validate the self-consistency of the struct. Note that +* the checksum incorporates addresses and is therefore highly specific to +* the instance of the wcsprm struct. +* +* int *types +* (Returned) Address of the first element of an array of int containing a +* four-digit type code for each axis. +* +* - First digit (i.e. 1000s): +* - 0: Non-specific coordinate type. +* - 1: Stokes coordinate. +* - 2: Celestial coordinate (including CUBEFACE). +* - 3: Spectral coordinate. +* - 4: Time coordinate. +* +* - Second digit (i.e. 100s): +* - 0: Linear axis. +* - 1: Quantized axis (STOKES, CUBEFACE). +* - 2: Non-linear celestial axis. +* - 3: Non-linear spectral axis. +* - 4: Logarithmic axis. +* - 5: Tabular axis. +* +* - Third digit (i.e. 10s): +* - 0: Group number, e.g. lookup table number, being an index into the +* tabprm array (see above). +* +* - The fourth digit is used as a qualifier depending on the axis type. +* +* - For celestial axes: +* - 0: Longitude coordinate. +* - 1: Latitude coordinate. +* - 2: CUBEFACE number. +* +* - For lookup tables: the axis number in a multidimensional table. +* +* CTYPEia in "4-3" form with unrecognized algorithm code will have its +* type set to -1 and generate an error. +* +* struct linprm lin +* (Returned) Linear transformation parameters (usage is described in the +* prologue to lin.h). +* +* struct celprm cel +* (Returned) Celestial transformation parameters (usage is described in +* the prologue to cel.h). +* +* struct spcprm spc +* (Returned) Spectral transformation parameters (usage is described in the +* prologue to spc.h). +* +* struct wcserr *err +* (Returned) If enabled, when an error status is returned, this struct +* contains detailed information about the error, see wcserr_enable(). +* +* int m_flag +* (For internal use only.) +* int m_naxis +* (For internal use only.) +* double *m_crpix +* (For internal use only.) +* double *m_pc +* (For internal use only.) +* double *m_cdelt +* (For internal use only.) +* double *m_crval +* (For internal use only.) +* char (*m_cunit)[72] +* (For internal use only.) +* char (*m_ctype)[72] +* (For internal use only.) +* struct pvcard *m_pv +* (For internal use only.) +* struct pscard *m_ps +* (For internal use only.) +* double *m_cd +* (For internal use only.) +* double *m_crota +* (For internal use only.) +* int *m_colax +* (For internal use only.) +* char (*m_cname)[72] +* (For internal use only.) +* double *m_crder +* (For internal use only.) +* double *m_csyer +* (For internal use only.) +* double *m_czphs +* (For internal use only.) +* double *m_cperi +* (For internal use only.) +* struct tabprm *m_tab +* (For internal use only.) +* struct wtbarr *m_wtb +* (For internal use only.) +* +* +* pvcard struct - Store for PVi_ma keyrecords +* ------------------------------------------- +* The pvcard struct is used to pass the parsed contents of PVi_ma keyrecords +* to wcsset() via the wcsprm struct. +* +* All members of this struct are to be set by the user. +* +* int i +* (Given) Axis number (1-relative), as in the FITS PVi_ma keyword. If +* i == 0, wcsset() will replace it with the latitude axis number. +* +* int m +* (Given) Parameter number (non-negative), as in the FITS PVi_ma keyword. +* +* double value +* (Given) Parameter value. +* +* +* pscard struct - Store for PSi_ma keyrecords +* ------------------------------------------- +* The pscard struct is used to pass the parsed contents of PSi_ma keyrecords +* to wcsset() via the wcsprm struct. +* +* All members of this struct are to be set by the user. +* +* int i +* (Given) Axis number (1-relative), as in the FITS PSi_ma keyword. +* +* int m +* (Given) Parameter number (non-negative), as in the FITS PSi_ma keyword. +* +* char value[72] +* (Given) Parameter value. +* +* +* auxprm struct - Additional auxiliary parameters +* ----------------------------------------------- +* The auxprm struct holds auxiliary coordinate system information of a +* specialist nature. It is anticipated that this struct will expand in future +* to accomodate additional parameters. +* +* All members of this struct are to be set by the user. +* +* double rsun_ref +* (Given, auxiliary) Reference radius of the Sun used in coordinate +* calculations (m). +* +* double dsun_obs +* (Given, auxiliary) Distance between the centre of the Sun and the +* observer (m). +* +* double crln_obs +* (Given, auxiliary) Carrington heliographic longitude of the observer +* (deg). +* +* double hgln_obs +* (Given, auxiliary) Stonyhurst heliographic longitude of the observer +* (deg). +* +* double hglt_obs +* (Given, auxiliary) Heliographic latitude (Carrington or Stonyhurst) of +* the observer (deg). +* +* double a_radius +* Length of the semi-major axis of a triaxial ellipsoid approximating the +* shape of a body (e.g. planet) in the solar system (m). +* +* double b_radius +* Length of the intermediate axis, normal to the semi-major and semi-minor +* axes, of a triaxial ellipsoid approximating the shape of a body (m). +* +* double c_radius +* Length of the semi-minor axis, normal to the semi-major axis, of a +* triaxial ellipsoid approximating the shape of a body (m). +* +* double blon_obs +* Bodycentric longitude of the observer in the coordinate system fixed to +* the planet or other solar system body (deg, in range 0 to 360). +* +* double blat_obs +* Bodycentric latitude of the observer in the coordinate system fixed to +* the planet or other solar system body (deg). +* +* double bdis_obs +* Bodycentric distance of the observer (m). +* +* +* Global variable: const char *wcs_errmsg[] - Status return messages +* ------------------------------------------------------------------ +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCS +#define WCSLIB_WCS + +#include "lin.h" +#include "cel.h" +#include "spc.h" + +#ifdef __cplusplus +extern "C" { +#define wtbarr wtbarr_s // See prologue of wtbarr.h. +#endif + +enum wcsenq_enum { + WCSENQ_MEM = 1, // wcsprm struct memory is managed by WCSLIB. + WCSENQ_SET = 2, // wcsprm struct has been set up. + WCSENQ_BYP = 4, // wcsprm struct is in bypass mode. + WCSENQ_CHK = 8, // wcsprm struct is self-consistent. +}; + +#define WCSSUB_LONGITUDE 0x1001 +#define WCSSUB_LATITUDE 0x1002 +#define WCSSUB_CUBEFACE 0x1004 +#define WCSSUB_CELESTIAL 0x1007 +#define WCSSUB_SPECTRAL 0x1008 +#define WCSSUB_STOKES 0x1010 +#define WCSSUB_TIME 0x1020 + + +#define WCSCOMPARE_ANCILLARY 0x0001 +#define WCSCOMPARE_TILING 0x0002 +#define WCSCOMPARE_CRPIX 0x0004 + + +extern const char *wcs_errmsg[]; + +enum wcs_errmsg_enum { + WCSERR_SUCCESS = 0, // Success. + WCSERR_NULL_POINTER = 1, // Null wcsprm pointer passed. + WCSERR_MEMORY = 2, // Memory allocation failed. + WCSERR_SINGULAR_MTX = 3, // Linear transformation matrix is singular. + WCSERR_BAD_CTYPE = 4, // Inconsistent or unrecognized coordinate + // axis type. + WCSERR_BAD_PARAM = 5, // Invalid parameter value. + WCSERR_BAD_COORD_TRANS = 6, // Unrecognized coordinate transformation + // parameter. + WCSERR_ILL_COORD_TRANS = 7, // Ill-conditioned coordinate transformation + // parameter. + WCSERR_BAD_PIX = 8, // One or more of the pixel coordinates were + // invalid. + WCSERR_BAD_WORLD = 9, // One or more of the world coordinates were + // invalid. + WCSERR_BAD_WORLD_COORD = 10, // Invalid world coordinate. + WCSERR_NO_SOLUTION = 11, // No solution found in the specified + // interval. + WCSERR_BAD_SUBIMAGE = 12, // Invalid subimage specification. + WCSERR_NON_SEPARABLE = 13, // Non-separable subimage coordinate system. + WCSERR_UNSET = 14 // wcsprm struct is unset. +}; + + +// Struct used for storing PVi_ma keywords. +struct pvcard { + int i; // Axis number, as in PVi_ma (1-relative). + int m; // Parameter number, ditto (0-relative). + double value; // Parameter value. +}; + +// Size of the pvcard struct in int units, used by the Fortran wrappers. +#define PVLEN (sizeof(struct pvcard)/sizeof(int)) + +// Struct used for storing PSi_ma keywords. +struct pscard { + int i; // Axis number, as in PSi_ma (1-relative). + int m; // Parameter number, ditto (0-relative). + char value[72]; // Parameter value. +}; + +// Size of the pscard struct in int units, used by the Fortran wrappers. +#define PSLEN (sizeof(struct pscard)/sizeof(int)) + +// Struct used to hold additional auxiliary parameters. +struct auxprm { + double rsun_ref; // Solar radius. + double dsun_obs; // Distance from Sun centre to observer. + double crln_obs; // Carrington heliographic lng of observer. + double hgln_obs; // Stonyhurst heliographic lng of observer. + double hglt_obs; // Heliographic latitude of observer. + + double a_radius; // Semi-major axis of solar system body. + double b_radius; // Semi-intermediate axis of solar system body. + double c_radius; // Semi-minor axis of solar system body. + double blon_obs; // Bodycentric longitude of observer. + double blat_obs; // Bodycentric latitude of observer. + double bdis_obs; // Bodycentric distance of observer. + double dummy[2]; // Reserved for future use. +}; + +// Size of the auxprm struct in int units, used by the Fortran wrappers. +#define AUXLEN (sizeof(struct auxprm)/sizeof(int)) + + +struct wcsprm { + // Initialization flag (see the prologue above). + //-------------------------------------------------------------------------- + int flag; // Set to zero to force initialization. + + // FITS header keyvalues to be provided (see the prologue above). + //-------------------------------------------------------------------------- + int naxis; // Number of axes (pixel and coordinate). + double *crpix; // CRPIXja keyvalues for each pixel axis. + double *pc; // PCi_ja linear transformation matrix. + double *cdelt; // CDELTia keyvalues for each coord axis. + double *crval; // CRVALia keyvalues for each coord axis. + + char (*cunit)[72]; // CUNITia keyvalues for each coord axis. + char (*ctype)[72]; // CTYPEia keyvalues for each coord axis. + + double lonpole; // LONPOLEa keyvalue. + double latpole; // LATPOLEa keyvalue. + + double restfrq; // RESTFRQa keyvalue. + double restwav; // RESTWAVa keyvalue. + + int npv; // Number of PVi_ma keywords, and the + int npvmax; // number for which space was allocated. + struct pvcard *pv; // PVi_ma keywords for each i and m. + + int nps; // Number of PSi_ma keywords, and the + int npsmax; // number for which space was allocated. + struct pscard *ps; // PSi_ma keywords for each i and m. + + // Alternative header keyvalues (see the prologue above). + //-------------------------------------------------------------------------- + double *cd; // CDi_ja linear transformation matrix. + double *crota; // CROTAi keyvalues for each coord axis. + int altlin; // Alternative representations + // Bit 0: PCi_ja is present, + // Bit 1: CDi_ja is present, + // Bit 2: CROTAi is present. + int velref; // AIPS velocity code, VELREF. + + // Auxiliary coordinate system information of a general nature. Not + // used by WCSLIB. Refer to the prologue comments above for a brief + // explanation of these values. + char alt[4]; + int colnum; + int *colax; + // Auxiliary coordinate axis information. + char (*cname)[72]; + double *crder; + double *csyer; + double *czphs; + double *cperi; + + char wcsname[72]; + // Time reference system and measurement. + char timesys[72], trefpos[72], trefdir[72], plephem[72]; + char timeunit[72]; + char dateref[72]; + double mjdref[2]; + double timeoffs; + // Data timestamps and durations. + char dateobs[72], datebeg[72], dateavg[72], dateend[72]; + double mjdobs, mjdbeg, mjdavg, mjdend; + double jepoch, bepoch; + double tstart, tstop; + double xposure, telapse; + // Timing accuracy. + double timsyer, timrder; + double timedel, timepixr; + // Spatial & celestial reference frame. + double obsgeo[6]; + char obsorbit[72]; + char radesys[72]; + double equinox; + char specsys[72]; + char ssysobs[72]; + double velosys; + double zsource; + char ssyssrc[72]; + double velangl; + + // Additional auxiliary coordinate system information of a specialist + // nature. Not used by WCSLIB. Refer to the prologue comments above. + struct auxprm *aux; + + // Coordinate lookup tables (see the prologue above). + //-------------------------------------------------------------------------- + int ntab; // Number of separate tables. + int nwtb; // Number of wtbarr structs. + struct tabprm *tab; // Tabular transformation parameters. + struct wtbarr *wtb; // Array of wtbarr structs. + + //-------------------------------------------------------------------------- + // Information derived from the FITS header keyvalues by wcsset(). + //-------------------------------------------------------------------------- + char lngtyp[8], lattyp[8]; // Celestial axis types, e.g. RA, DEC. + int lng, lat, spec, time; // Longitude, latitude, spectral, and time + // axis indices (0-relative). + int cubeface; // True if there is a CUBEFACE axis. + int chksum; // Checksum of keyvalues provided. + int *types; // Coordinate type codes for each axis. + + struct linprm lin; // Linear transformation parameters. + struct celprm cel; // Celestial transformation parameters. + struct spcprm spc; // Spectral transformation parameters. + + // Error messaging, if enabled. + //-------------------------------------------------------------------------- + struct wcserr *err; + + //-------------------------------------------------------------------------- + // Private - the remainder are for internal use. + //-------------------------------------------------------------------------- + // Memory management. + int m_flag, m_naxis; + double *m_crpix, *m_pc, *m_cdelt, *m_crval; + char (*m_cunit)[72], (*m_ctype)[72]; + struct pvcard *m_pv; + struct pscard *m_ps; + double *m_cd, *m_crota; + int *m_colax; + char (*m_cname)[72]; + double *m_crder, *m_csyer, *m_czphs, *m_cperi; + struct auxprm *m_aux; + struct tabprm *m_tab; + struct wtbarr *m_wtb; +}; + +// Size of the wcsprm struct in int units, used by the Fortran wrappers. +#define WCSLEN (sizeof(struct wcsprm)/sizeof(int)) + + +int wcsnpv(int n); + +int wcsnps(int n); + +int wcsini(int alloc, int naxis, struct wcsprm *wcs); + +int wcsinit(int alloc, int naxis, struct wcsprm *wcs, int npvmax, int npsmax, + int ndpmax); + +int wcsauxi(int alloc, struct wcsprm *wcs); + +int wcssub(int alloc, const struct wcsprm *wcssrc, int *nsub, int axes[], + struct wcsprm *wcsdst); + +int wcscompare(int cmp, double tol, const struct wcsprm *wcs1, + const struct wcsprm *wcs2, int *equal); + +int wcsfree(struct wcsprm *wcs); + +int wcstrim(struct wcsprm *wcs); + +int wcssize(const struct wcsprm *wcs, int sizes[2]); + +int auxsize(const struct auxprm *aux, int sizes[2]); + +int wcsenq(const struct wcsprm *wcs, int enquiry); + +int wcsprt(const struct wcsprm *wcs); + +int wcsperr(const struct wcsprm *wcs, const char *prefix); + +int wcsbchk(struct wcsprm *wcs, int bounds); + +int wcsset(struct wcsprm *wcs); + +int wcsp2s(struct wcsprm *wcs, int ncoord, int nelem, const double pixcrd[], + double imgcrd[], double phi[], double theta[], double world[], + int stat[]); + +int wcss2p(struct wcsprm *wcs, int ncoord, int nelem, const double world[], + double phi[], double theta[], double imgcrd[], double pixcrd[], + int stat[]); + +int wcsmix(struct wcsprm *wcs, int mixpix, int mixcel, const double vspan[2], + double vstep, int viter, double world[], double phi[], + double theta[], double imgcrd[], double pixcrd[]); + +int wcsccs(struct wcsprm *wcs, double lng2p1, double lat2p1, double lng1p2, + const char *clng, const char *clat, const char *radesys, + double equinox, const char *alt); + +int wcssptr(struct wcsprm *wcs, int *i, char ctype[9]); + +const char* wcslib_version(int vers[3]); + +// Defined mainly for backwards compatibility, use wcssub() instead. +#define wcscopy(alloc, wcssrc, wcsdst) wcssub(alloc, wcssrc, 0x0, 0x0, wcsdst) + + +// Deprecated. +#define wcsini_errmsg wcs_errmsg +#define wcssub_errmsg wcs_errmsg +#define wcscopy_errmsg wcs_errmsg +#define wcsfree_errmsg wcs_errmsg +#define wcsprt_errmsg wcs_errmsg +#define wcsset_errmsg wcs_errmsg +#define wcsp2s_errmsg wcs_errmsg +#define wcss2p_errmsg wcs_errmsg +#define wcsmix_errmsg wcs_errmsg + +#ifdef __cplusplus +#undef wtbarr +} +#endif + +#endif // WCSLIB_WCS diff --git a/deps/wcslib/C/wcsbth.c b/deps/wcslib/C/wcsbth.c new file mode 100644 index 0000000..6442a83 --- /dev/null +++ b/deps/wcslib/C/wcsbth.c @@ -0,0 +1,32201 @@ +#line 1 "wcsbth.c" + +#line 3 "wcsbth.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define wcsbth_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wcsbth_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wcsbth_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wcsbth_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wcsbth_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wcsbth_scan_buffer +#endif + +#ifdef yy_scan_string +#define wcsbth_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wcsbth_scan_string +#endif + +#ifdef yy_scan_bytes +#define wcsbth_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wcsbth_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wcsbth_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wcsbth_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wcsbth_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wcsbth_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wcsbth_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wcsbth_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wcsbth_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wcsbth_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wcsbthpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wcsbthpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wcsbthpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wcsbthpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wcsbthensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wcsbthensure_buffer_stack +#endif + +#ifdef yylex +#define wcsbthlex_ALREADY_DEFINED +#else +#define yylex wcsbthlex +#endif + +#ifdef yyrestart +#define wcsbthrestart_ALREADY_DEFINED +#else +#define yyrestart wcsbthrestart +#endif + +#ifdef yylex_init +#define wcsbthlex_init_ALREADY_DEFINED +#else +#define yylex_init wcsbthlex_init +#endif + +#ifdef yylex_init_extra +#define wcsbthlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wcsbthlex_init_extra +#endif + +#ifdef yylex_destroy +#define wcsbthlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wcsbthlex_destroy +#endif + +#ifdef yyget_debug +#define wcsbthget_debug_ALREADY_DEFINED +#else +#define yyget_debug wcsbthget_debug +#endif + +#ifdef yyset_debug +#define wcsbthset_debug_ALREADY_DEFINED +#else +#define yyset_debug wcsbthset_debug +#endif + +#ifdef yyget_extra +#define wcsbthget_extra_ALREADY_DEFINED +#else +#define yyget_extra wcsbthget_extra +#endif + +#ifdef yyset_extra +#define wcsbthset_extra_ALREADY_DEFINED +#else +#define yyset_extra wcsbthset_extra +#endif + +#ifdef yyget_in +#define wcsbthget_in_ALREADY_DEFINED +#else +#define yyget_in wcsbthget_in +#endif + +#ifdef yyset_in +#define wcsbthset_in_ALREADY_DEFINED +#else +#define yyset_in wcsbthset_in +#endif + +#ifdef yyget_out +#define wcsbthget_out_ALREADY_DEFINED +#else +#define yyget_out wcsbthget_out +#endif + +#ifdef yyset_out +#define wcsbthset_out_ALREADY_DEFINED +#else +#define yyset_out wcsbthset_out +#endif + +#ifdef yyget_leng +#define wcsbthget_leng_ALREADY_DEFINED +#else +#define yyget_leng wcsbthget_leng +#endif + +#ifdef yyget_text +#define wcsbthget_text_ALREADY_DEFINED +#else +#define yyget_text wcsbthget_text +#endif + +#ifdef yyget_lineno +#define wcsbthget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wcsbthget_lineno +#endif + +#ifdef yyset_lineno +#define wcsbthset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wcsbthset_lineno +#endif + +#ifdef yyget_column +#define wcsbthget_column_ALREADY_DEFINED +#else +#define yyget_column wcsbthget_column +#endif + +#ifdef yyset_column +#define wcsbthset_column_ALREADY_DEFINED +#else +#define yyset_column wcsbthset_column +#endif + +#ifdef yywrap +#define wcsbthwrap_ALREADY_DEFINED +#else +#define yywrap wcsbthwrap +#endif + +#ifdef yyalloc +#define wcsbthalloc_ALREADY_DEFINED +#else +#define yyalloc wcsbthalloc +#endif + +#ifdef yyrealloc +#define wcsbthrealloc_ALREADY_DEFINED +#else +#define yyrealloc wcsbthrealloc +#endif + +#ifdef yyfree +#define wcsbthfree_ALREADY_DEFINED +#else +#define yyfree wcsbthfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define wcsbthwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70 + }, + + { + 69, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + + 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, + 71, 71, 71, 71, 71, 73, 74, 75, 76, 77, + 71, 71, 78, 71, 79, 71, 80, 81, 71, 82, + 83, 71, 84, 85, 86, 71, 87, 88, 89, 71, + 90, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71 + }, + + { + 69, 91, 91, 91, 91, 91, 91, 91, 91, 91, + + 70, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 92, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91 + }, + + { + 69, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 70, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 92, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91 + }, + + { + 69, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 70, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, + + 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94 + }, + + { + 69, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 70, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94 + }, + + { + 69, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 70, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96 + }, + + { + 69, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 70, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 96, 96, + + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96 + }, + + { + 69, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 70, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98 + + }, + + { + 69, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 70, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98 + }, + + { + 69, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 69, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 70, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + + 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100 + }, + + { + 69, 102, 102, 102, 102, 102, 102, 102, 102, 102, + + 70, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 103, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102 + }, + + { + 69, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 70, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 103, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102 + }, + + { + 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70 + }, + + { + 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + + 70, 70, 70, 70, 70, 70, 70, 70 + }, + + { + 69, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 70, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106 + }, + + { + 69, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 70, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 106, 106, + + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106 + }, + + { + 69, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 70, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108 + + }, + + { + 69, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 70, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108 + }, + + { + 69, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 70, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 69, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 70, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 69, 112, 112, 112, 112, 112, 112, 112, 112, 112, + + 70, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112 + }, + + { + 69, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 70, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112 + }, + + { + 69, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 70, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, + + 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 69, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 70, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 69, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 70, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116 + }, + + { + 69, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 70, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 117, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 116, 116, + + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, + 116, 116, 116, 116, 116, 116, 116, 116 + }, + + { + 69, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 70, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119 + + }, + + { + 69, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 70, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119 + }, + + { + 69, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 70, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121 + }, + + { + 69, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 70, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + + 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 121, 121, 121, 121, 121, 121 + }, + + { + 69, 123, 123, 123, 123, 123, 123, 123, 123, 123, + + 70, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123 + }, + + { + 69, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 70, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123 + }, + + { + 69, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 70, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, + + 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125 + }, + + { + 69, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 70, 125, 125, 125, 125, 125, 125, 125, 125, 125, + + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, + + 125, 125, 125, 125, 125, 125, 125, 125 + }, + + { + 69, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 70, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127 + }, + + { + 69, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 70, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 127, 127, + + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, + 127, 127, 127, 127, 127, 127, 127, 127 + }, + + { + 69, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 70, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129 + + }, + + { + 69, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 70, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129 + }, + + { + 69, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 70, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130 + }, + + { + 69, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 70, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 131, 130, 130, 130, 130, 130, 130, 130, + + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130 + }, + + { + 69, 132, 132, 132, 132, 132, 132, 132, 132, 132, + + 70, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132 + }, + + { + 69, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 70, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, + 132, 132, 132, 132, 132, 132, 132, 132 + }, + + { + 69, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 70, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134 + }, + + { + 69, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 70, 134, 134, 134, 134, 134, 134, 134, 134, 134, + + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + + 134, 134, 134, 134, 134, 134, 134, 134 + }, + + { + 69, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 70, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136 + }, + + { + 69, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 70, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 136, 136, + + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136 + }, + + { + 69, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 70, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138 + + }, + + { + 69, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 70, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, + 138, 138, 138, 138, 138, 138, 138, 138 + }, + + { + 69, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 70, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 141, 140, 140, 140, 140, 140, 140, 140, 140, + + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140 + }, + + { + 69, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 70, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 141, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140 + }, + + { + 69, 142, 142, 142, 142, 142, 142, 142, 142, 142, + + 70, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 143, 142, 143, 142, 142, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142 + }, + + { + 69, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 70, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 143, 142, 143, 142, 142, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142 + }, + + { + 69, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 70, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 146, 145, 146, 147, 145, 148, 148, + + 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145 + }, + + { + 69, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 70, 145, 145, 145, 145, 145, 145, 145, 145, 145, + + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 146, 145, 146, 147, 145, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, + + 145, 145, 145, 145, 145, 145, 145, 145 + }, + + { + 69, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 70, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 150, 149, 150, 151, 149, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149 + }, + + { + 69, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 70, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 150, 149, 150, 151, 149, 152, 152, + 152, 152, 152, 152, 152, 152, 152, 152, 149, 149, + + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149 + }, + + { + 69, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 70, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + + 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153 + + }, + + { + 69, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 70, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 153, 153, 153 + }, + + { + 69, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 157, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 158, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155 + }, + + { + 69, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 156, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 157, 155, 155, 155, 155, 155, 155, 155, + + 155, 155, 155, 155, 155, 155, 155, 158, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 155 + }, + + { + 69, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159 + }, + + { + 69, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 160, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159 + }, + + { + 69, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161 + }, + + { + 69, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 162, 161, 161, 161, 161, 161, 161, 161, 161, 161, + + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + + 161, 161, 161, 161, 161, 161, 161, 161 + }, + + { + 69, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163 + }, + + { + 69, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 163 + }, + + { + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69 + + }, + + { + 69, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70 + }, + + { + 69, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71 + }, + + { + 69, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + + -72, -72, -72, -72, -72, -72, -72, -72, 165, 165, + 165, 165, 165, 165, 165, 165, 165, 165, -72, -72, + -72, -72, -72, -72, -72, -72, -72, 166, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + 167, -72, -72, 168, -72, -72, 169, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72 + }, + + { + 69, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, 170, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73 + }, + + { + 69, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, 171, 172, + -74, -74, -74, -74, -74, -74, 173, -74, -74, -74, + + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, 174, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74 + }, + + { + 69, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, 175, -75, + -75, -75, -75, -75, -75, -75, -75, -75, 176, -75, + 177, -75, 178, 179, 180, 181, -75, -75, -75, -75, + 182, -75, -75, -75, -75, 183, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75 + }, + + { + 69, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, 184, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, 185, + -76, -76, -76, 186, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76 + }, + + { + 69, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, 187, -77, + 188, 189, -77, -77, -77, -77, -77, -77, -77, -77, + + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77 + }, + + { + 69, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, 190, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78 + }, + + { + 69, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, 191, 192, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79 + + }, + + { + 69, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, 193, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, 194, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80 + }, + + { + 69, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + + -81, -81, -81, -81, 195, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81 + }, + + { + 69, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, 196, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 69, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, 197, -83, -83, + -83, -83, -83, -83, -83, -83, 198, -83, -83, -83, + -83, -83, 199, 200, -83, -83, 201, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83 + }, + + { + 69, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, 202, -84, -84, -84, 203, + 204, -84, -84, -84, -84, -84, -84, -84, -84, -84, + + -84, -84, -84, 205, -84, -84, -84, 206, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84 + }, + + { + 69, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, 207, + 208, -85, -85, 209, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 69, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, 210, -86, 211, + 212, -86, -86, 213, -86, -86, -86, -86, -86, -86, + 214, -86, 215, 216, -86, -86, 217, 218, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86 + }, + + { + 69, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, 219, -87, -87, -87, 220, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, 221, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 69, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + + -88, -88, -88, -88, -88, -88, -88, 222, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88 + }, + + { + 69, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + 223, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89 + + }, + + { + 69, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, 224, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 69, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91 + }, + + { + 69, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, 225, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, 226, 227, + 227, 227, 227, 227, 227, 227, 227, 227, -92, -92, + -92, -92, -92, -92, -92, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, + 225, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92 + }, + + { + 69, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, 228, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -93, -93, + -93, -93, -93, -93, -93, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 69, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94 + }, + + { + 69, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, 230, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, 231, 231, + + 231, 231, 231, 231, 231, 231, 231, 231, -95, -95, + -95, -95, -95, -95, -95, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95 + }, + + { + 69, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96 + }, + + { + 69, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, 232, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, -97, -97, + -97, -97, -97, -97, -97, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + + 234, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97 + }, + + { + 69, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98 + }, + + { + 69, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, 235, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, -99, -99, + -99, -99, -99, -99, -99, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99 + + }, + + { + 69, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100 + }, + + { + 69, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, 237, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -101, -101, + -101, -101, -101, -101, -101, 239, 239, 239, 239, 239, + + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101 + }, + + { + 69, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102 + }, + + { + 69, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, 240, -103, -103, 241, 242, + 242, 242, 242, 242, 242, 242, 242, 242, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, 243, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103 + }, + + { + 69, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, 240, -104, -104, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, 245, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104 + }, + + { + 69, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, 246, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, 247, 247, + + 247, 247, 247, 247, 247, 247, 247, 247, -105, -105, + -105, -105, -105, -105, -105, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105 + }, + + { + 69, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106 + }, + + { + 69, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, 248, 248, + 248, 248, 248, 248, 248, 248, 248, 248, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + + -107, -107, -107, -107, -107, 249, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107 + }, + + { + 69, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108 + }, + + { + 69, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, 251, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109 + + }, + + { + 69, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110 + }, + + { + 69, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, 252, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, -111, -111, + -111, -111, -111, -111, -111, 252, 252, 252, 252, 252, + + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111 + }, + + { + 69, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112 + }, + + { + 69, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, 254, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, -113, -113, + -113, -113, -113, -113, -113, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113 + }, + + { + 69, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114 + }, + + { + 69, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, 257, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, 258, 258, + + 258, 258, 258, 258, 258, 258, 258, 258, -115, -115, + -115, -115, -115, -115, -115, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, 259, 259, 259, 259, 259, 259, 259, 259, 259, + 259, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115 + }, + + { + 69, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116 + }, + + { + 69, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, 260, -117, -117, 261, 262, + 262, 262, 262, 262, 262, 262, 262, 262, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + + -117, -117, -117, -117, -117, 263, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117 + }, + + { + 69, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, 260, -118, -118, 264, 264, + 264, 264, 264, 264, 264, 264, 264, 264, -118, -118, + + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, 265, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118 + }, + + { + 69, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119 + + }, + + { + 69, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, 267, -120, -120, -120, -120, + + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120 + }, + + { + 69, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121 + }, + + { + 69, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, -122, -122, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, 269, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122 + }, + + { + 69, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123 + }, + + { + 69, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, 271, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124 + }, + + { + 69, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125 + }, + + { + 69, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, 272, 272, + 272, 272, 272, 272, 272, 272, 272, 272, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, 273, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126 + }, + + { + 69, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127 + }, + + { + 69, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, 274, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, 275, 275, + 275, 275, 275, 275, 275, 275, 275, 275, -128, -128, + + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128 + }, + + { + 69, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129 + + }, + + { + 69, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130 + }, + + { + 69, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131 + }, + + { + 69, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132 + }, + + { + 69, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, 276, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, 277, 277, + 277, 277, 277, 277, 277, 277, 277, 277, -133, -133, + -133, -133, -133, -133, -133, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, + 276, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133 + }, + + { + 69, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134 + }, + + { + 69, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, 278, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, 279, 279, + + 279, 279, 279, 279, 279, 279, 279, 279, -135, -135, + -135, -135, -135, -135, -135, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 278, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135 + }, + + { + 69, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136 + }, + + { + 69, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, 280, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, 281, 281, + 281, 281, 281, 281, 281, 281, 281, 281, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137 + }, + + { + 69, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138 + }, + + { + 69, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + + -139, -139, 282, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, 283, 283, + 283, 283, 283, 283, 283, 283, 283, 283, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139 + + }, + + { + 69, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140 + }, + + { + 69, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, 284, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141 + }, + + { + 69, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142 + }, + + { + 69, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, 285, 285, + 285, 285, 285, 285, 285, 285, 285, 285, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143 + }, + + { + 69, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, 285, 285, + 285, 285, 285, 285, 285, 285, 285, 285, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144 + }, + + { + 69, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145 + }, + + { + 69, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, 286, -146, 287, 287, + 287, 287, 287, 287, 287, 287, 287, 287, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146 + }, + + { + 69, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147 + }, + + { + 69, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, 289, -148, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -148, -148, + + -148, -148, -148, -148, -148, -148, -148, -148, 291, 291, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + 291, 291, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148 + }, + + { + 69, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149 + + }, + + { + 69, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, 292, -150, 293, 293, + 293, 293, 293, 293, 293, 293, 293, 293, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150 + }, + + { + 69, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151 + }, + + { + 69, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + + -152, -152, -152, -152, -152, -152, 295, -152, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, 297, 297, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + 297, 297, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152 + }, + + { + 69, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153 + }, + + { + 69, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298 + }, + + { + 69, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 302, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 303, 300, 300, + + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300 + }, + + { + 69, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156 + }, + + { + 69, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 305, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 306, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 307, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 304, 304, 304 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312 + + }, + + { + 69, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160 + }, + + { + 69, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 315, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314 + }, + + { + 69, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162 + }, + + { + 69, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 317, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316 + }, + + { + 69, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164 + }, + + { + 69, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, 318, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + 319, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165 + }, + + { + 69, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, 320, -166, + -166, -166, -166, -166, -166, -166, -166, -166, 321, -166, + 322, -166, 323, 324, 325, 326, -166, -166, -166, -166, + 327, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166 + }, + + { + 69, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, 328, -167, -167, 329, -167, -167, -167, + + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167 + }, + + { + 69, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168 + }, + + { + 69, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169 + + }, + + { + 69, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, 330, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170 + }, + + { + 69, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + + -171, -171, -171, 331, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171 + }, + + { + 69, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + 332, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172 + }, + + { + 69, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, 333, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, 334, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173 + }, + + { + 69, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + + -174, -174, 335, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174 + }, + + { + 69, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, 336, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175 + }, + + { + 69, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, 337, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176 + }, + + { + 69, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, 338, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177 + }, + + { + 69, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + + -178, -178, -178, -178, -178, -178, -178, -178, 339, -178, + -178, -178, -178, -178, -178, -178, 340, -178, -178, 341, + 342, -178, -178, -178, -178, -178, 343, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178 + }, + + { + 69, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, 344, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179 + + }, + + { + 69, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, 345, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180 + }, + + { + 69, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + + -181, -181, -181, -181, -181, -181, -181, -181, 346, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181 + }, + + { + 69, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + 347, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182 + }, + + { + 69, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, 348, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183 + }, + + { + 69, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + + -184, -184, -184, -184, 349, -184, 350, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184 + }, + + { + 69, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, 351, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185 + }, + + { + 69, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, 352, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186 + }, + + { + 69, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, 353, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187 + }, + + { + 69, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, 354, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188 + }, + + { + 69, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, 355, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189 + + }, + + { + 69, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, 356, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190 + }, + + { + 69, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, 357, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, 358, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191 + }, + + { + 69, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + 359, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192 + }, + + { + 69, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, 360, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193 + }, + + { + 69, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, 361, -194, + + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194 + }, + + { + 69, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, 362, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195 + }, + + { + 69, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, 363, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196 + }, + + { + 69, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197 + }, + + { + 69, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + + -198, -198, -198, -198, -198, -198, -198, -198, -198, 364, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198 + }, + + { + 69, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, 365, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199 + + }, + + { + 69, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200 + }, + + { + 69, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201 + }, + + { + 69, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, 366, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202 + }, + + { + 69, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, 367, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203 + }, + + { + 69, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + + -204, -204, 368, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204 + }, + + { + 69, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, 369, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205 + }, + + { + 69, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 370, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206 + }, + + { + 69, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, 371, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207 + }, + + { + 69, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + + -208, -208, -208, -208, -208, -208, -208, -208, -208, 372, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208 + }, + + { + 69, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, 373, -209, -209, -209, -209, -209, -209, 374, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209 + + }, + + { + 69, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, 375, -210, + -210, -210, -210, -210, -210, -210, -210, -210, 376, -210, + 377, -210, 378, 379, 380, 381, -210, -210, -210, -210, + 382, -210, -210, -210, -210, -210, -210, -210, -210, -210, + + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210 + }, + + { + 69, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + + -211, -211, -211, -211, -211, -211, 383, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211 + }, + + { + 69, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, 384, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212 + }, + + { + 69, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, 385, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 + }, + + { + 69, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, 386, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + + -214, -214, -214, 387, -214, -214, 388, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214 + }, + + { + 69, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, 389, 390, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + 391, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215 + }, + + { + 69, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, 392, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216 + }, + + { + 69, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217 + }, + + { + 69, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + + -218, -218, -218, -218, -218, -218, -218, 393, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218 + }, + + { + 69, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, 394, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219 + + }, + + { + 69, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, 395, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220 + }, + + { + 69, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + + -221, -221, -221, -221, -221, -221, -221, -221, -221, 396, + -221, -221, -221, -221, -221, -221, -221, -221, -221, 397, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221 + }, + + { + 69, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, 398, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, 399, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222 + }, + + { + 69, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, 400, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223 + }, + + { + 69, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, 401, + + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224 + }, + + { + 69, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, 402, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225 + }, + + { + 69, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, 403, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, 404, 405, + 405, 405, 405, 405, 405, 405, 405, 405, -226, -226, + -226, -226, -226, -226, -226, 403, 403, 403, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + 403, 403, 403, 403, 403, 403, 403, 403, 403, 403, + 403, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226 + }, + + { + 69, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, 406, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, -227, -227, + -227, -227, -227, -227, -227, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, + 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, + + 406, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227 + }, + + { + 69, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, 407, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228 + }, + + { + 69, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + + -229, -229, 408, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 404, -229, -229, + -229, -229, -229, -229, -229, 408, 408, 408, 408, 408, + 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, + 408, 408, 408, 408, 408, 408, 408, 408, 408, 408, + 408, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229 + + }, + + { + 69, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, 409, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230 + }, + + { + 69, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, 410, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, 411, 411, + 411, 411, 411, 411, 411, 411, 411, 411, -231, -231, + -231, -231, -231, -231, -231, 410, 410, 410, 410, 410, + + 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, + 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, + 410, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231 + }, + + { + 69, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, 412, -232, -232, -232, -232, -232, -232, -232, + + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232 + }, + + { + 69, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, 413, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 414, 414, + 414, 414, 414, 414, 414, 414, 414, 414, -233, -233, + -233, -233, -233, -233, -233, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, + 415, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233 + }, + + { + 69, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, 416, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234 + }, + + { + 69, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, 417, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235 + }, + + { + 69, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, 418, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, 419, 419, + 419, 419, 419, 419, 419, 419, 419, 419, -236, -236, + -236, -236, -236, -236, -236, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, + 418, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236 + }, + + { + 69, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, 420, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237 + }, + + { + 69, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, 421, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, 422, 422, + 422, 422, 422, 422, 422, 422, 422, 422, -238, -238, + + -238, -238, -238, -238, -238, 423, 423, 423, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, + 423, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238 + }, + + { + 69, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + + -239, -239, 424, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239 + + }, + + { + 69, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, 425, 425, + 425, 425, 425, 425, 425, 425, 425, 425, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240 + }, + + { + 69, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, 426, -241, -241, 427, 428, + 428, 428, 428, 428, 428, 428, 428, 428, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, 429, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241 + }, + + { + 69, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + + -242, -242, -242, -242, -242, 426, -242, -242, 430, 430, + 430, 430, 430, 430, 430, 430, 430, 430, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, 431, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242, -242, -242, + -242, -242, -242, -242, -242, -242, -242, -242 + }, + + { + 69, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 432, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243 + }, + + { + 69, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, 426, -244, -244, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 433, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, 434, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, + -244, -244, -244, -244, -244, -244, -244, -244 + }, + + { + 69, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, 435, 436, + + 436, 436, 436, 436, 436, 436, 436, 436, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245 + }, + + { + 69, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, 437, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246 + }, + + { + 69, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, 438, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, 439, 439, + 439, 439, 439, 439, 439, 439, 439, 439, -247, -247, + -247, -247, -247, -247, -247, 438, 438, 438, 438, 438, + 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, + 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, + + 438, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247 + }, + + { + 69, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, 440, 440, + 440, 440, 440, 440, 440, 440, 440, 440, -248, -248, + + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, 441, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248 + }, + + { + 69, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, 442, + 442, 442, 442, 442, 442, 442, 442, 442, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249 + + }, + + { + 69, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 443, 443, + 443, 443, 443, 443, 443, 443, 443, 443, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, 444, -250, -250, -250, -250, + + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250 + }, + + { + 69, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, 445, + 445, 445, 445, 445, 445, 445, 445, 445, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251 + }, + + { + 69, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, 446, -252, -252, -252, -252, -252, -252, -252, + + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252 + }, + + { + 69, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, 447, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, 448, 448, + 448, 448, 448, 448, 448, 448, 448, 448, -253, -253, + -253, -253, -253, -253, -253, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, + 447, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253 + }, + + { + 69, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, 449, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, + -254, -254, -254, -254, -254, -254, -254, -254 + }, + + { + 69, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, 450, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, 451, 451, + + 451, 451, 451, 451, 451, 451, 451, 451, -255, -255, + -255, -255, -255, -255, -255, 452, 452, 452, 452, 452, + 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 452, 452, 452, 452, 452, 452, 452, 452, 452, 452, + 452, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255 + }, + + { + 69, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, 453, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + -256, -256, -256, -256, -256, -256, -256, -256, -256, -256, + + -256, -256, -256, -256, -256, -256, -256, -256 + }, + + { + 69, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, 454, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257, -257, -257, + -257, -257, -257, -257, -257, -257, -257, -257 + }, + + { + 69, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, 455, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, 456, 456, + 456, 456, 456, 456, 456, 456, 456, 456, -258, -258, + + -258, -258, -258, -258, -258, 457, 457, 457, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, + 457, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, -258, -258, -258, -258 + }, + + { + 69, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + + -259, -259, 458, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259 + + }, + + { + 69, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, 459, 459, + 459, 459, 459, 459, 459, 459, 459, 459, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260, -260, -260, + -260, -260, -260, -260, -260, -260, -260, -260 + }, + + { + 69, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, 460, -261, -261, 461, 462, + 462, 462, 462, 462, 462, 462, 462, 462, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, 463, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, + -261, -261, -261, -261, -261, -261, -261, -261 + }, + + { + 69, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + + -262, -262, -262, -262, -262, 460, -262, -262, 464, 464, + 464, 464, 464, 464, 464, 464, 464, 464, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, 465, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262, -262, -262, + -262, -262, -262, -262, -262, -262, -262, -262 + }, + + { + 69, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, 466, 466, + 466, 466, 466, 466, 466, 466, 466, 466, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263 + }, + + { + 69, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, 460, -264, -264, 467, 467, + 467, 467, 467, 467, 467, 467, 467, 467, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, 468, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264, -264, -264, + -264, -264, -264, -264, -264, -264, -264, -264 + }, + + { + 69, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, 469, 470, + + 470, 470, 470, 470, 470, 470, 470, 470, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265, -265, -265, + -265, -265, -265, -265, -265, -265, -265, -265 + }, + + { + 69, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, 471, 471, + 471, 471, 471, 471, 471, 471, 471, 471, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, 472, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + -266, -266, -266, -266, -266, -266, -266, -266, -266, -266, + + -266, -266, -266, -266, -266, -266, -266, -266 + }, + + { + 69, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, 473, 474, + 474, 474, 474, 474, 474, 474, 474, 474, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267 + }, + + { + 69, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, 475, 475, + 475, 475, 475, 475, 475, 475, 475, 475, -268, -268, + + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, 476, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268, -268, -268, + -268, -268, -268, -268, -268, -268, -268, -268 + }, + + { + 69, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, 477, 478, + 478, 478, 478, 478, 478, 478, 478, 478, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269 + + }, + + { + 69, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, 479, 479, + 479, 479, 479, 479, 479, 479, 479, 479, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, 480, -270, -270, -270, -270, + + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270, -270, -270, + -270, -270, -270, -270, -270, -270, -270, -270 + }, + + { + 69, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, 481, 482, + 482, 482, 482, 482, 482, 482, 482, 482, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271 + }, + + { + 69, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + + -272, -272, -272, -272, -272, -272, -272, -272, 483, 483, + 483, 483, 483, 483, 483, 483, 483, 483, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, 484, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272 + }, + + { + 69, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, 485, 486, + 486, 486, 486, 486, 486, 486, 486, 486, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273 + }, + + { + 69, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, 487, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274 + }, + + { + 69, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, 488, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, 489, 489, + + 489, 489, 489, 489, 489, 489, 489, 489, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275 + }, + + { + 69, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, 490, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276 + }, + + { + 69, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, 491, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, 492, 492, + 492, 492, 492, 492, 492, 492, 492, 492, -277, -277, + -277, -277, -277, -277, -277, 491, 491, 491, 491, 491, + 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, + 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, + + 491, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277 + }, + + { + 69, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, 493, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278 + }, + + { + 69, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + + -279, -279, 494, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, -279, -279, + -279, -279, -279, -279, -279, 494, 494, 494, 494, 494, + 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, + 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, + 494, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279 + + }, + + { + 69, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, 496, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280 + }, + + { + 69, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, 497, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281 + }, + + { + 69, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, 499, -282, -282, -282, -282, -282, -282, -282, + + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282 + }, + + { + 69, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, 500, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, 501, 501, + 501, 501, 501, 501, 501, 501, 501, 501, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283 + }, + + { + 69, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, 284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 + }, + + { + 69, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, 285, 285, + + 285, 285, 285, 285, 285, 285, 285, 285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285 + }, + + { + 69, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286 + }, + + { + 69, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, 289, -287, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, 291, 291, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + 291, 291, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287 + }, + + { + 69, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, 288, 288, + 288, 288, 288, 288, 288, 288, 288, 288, -288, -288, + + -288, -288, -288, -288, -288, -288, -288, -288, 291, 291, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + 291, 291, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288 + }, + + { + 69, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 502, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, 291, 291, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + 291, 291, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289 + + }, + + { + 69, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, 289, -290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, 291, 291, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + + 291, 291, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290 + }, + + { + 69, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, 503, -291, 503, -291, -291, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291 + }, + + { + 69, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + + -292, -292, -292, -292, -292, -292, -292, -292, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292 + }, + + { + 69, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, 295, -293, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 297, 297, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + 297, 297, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293 + }, + + { + 69, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, 294, 294, + 294, 294, 294, 294, 294, 294, 294, 294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, 297, 297, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + 297, 297, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294 + }, + + { + 69, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, 505, 505, + + 505, 505, 505, 505, 505, 505, 505, 505, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, 297, 297, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + 297, 297, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295 + }, + + { + 69, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, 295, -296, 296, 296, + 296, 296, 296, 296, 296, 296, 296, 296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, 297, 297, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + 297, 297, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296 + }, + + { + 69, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, 506, -297, 506, -297, -297, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297 + }, + + { + 69, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 299, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 298, 298, 298, 298, 298, 298 + }, + + { + 69, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + + -299, -299, -299, -299, -299, -299, -299, -299, -299, 298, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299 + + }, + + { + 69, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 301, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 302, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 303, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 300, 300, 300, 300, 300, 300, 300, 300 + }, + + { + 69, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301 + }, + + { + 69, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 301, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 302, 508, 508, 508, 508, 508, 508, 508, + + 508, 508, 508, 508, 508, 508, 508, 303, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305 + }, + + { + 69, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 518, 517, 517, 517, 517, 517, 517, 517, 517, 517, + + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 519, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 520, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + + 517, 517, 517, 517, 517, 517, 517, 517 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309 + + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 309, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 310, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 311, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 308, 308, 308, 308, 308, 308 + }, + + { + 69, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 313, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, + 312, 312, 312, 312, 312, 312, 312, 312 + }, + + { + 69, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313 + }, + + { + 69, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 315, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, + 314, 314, 314, 314, 314, 314, 314, 314 + }, + + { + 69, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315 + }, + + { + 69, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 317, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, + + 316, 316, 316, 316, 316, 316, 316, 316 + }, + + { + 69, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317 + }, + + { + 69, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + + -318, -318, -318, -318, -318, -318, -318, -318, 521, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318 + }, + + { + 69, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, 522, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319 + + }, + + { + 69, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, 523, + -320, -320, -320, -320, -320, -320, 524, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320 + }, + + { + 69, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, 525, -321, -321, -321, -321, + + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321 + }, + + { + 69, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, 526, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, 527, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322 + }, + + { + 69, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, 528, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, 529, + 530, -323, -323, -323, -323, -323, 531, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323 + }, + + { + 69, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + + -324, -324, -324, -324, -324, -324, -324, -324, -324, 532, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324 + }, + + { + 69, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, 533, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325 + }, + + { + 69, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, 534, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326 + }, + + { + 69, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + 535, -327, -327, -327, -327, -327, -327, -327, -327, -327, + + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327 + }, + + { + 69, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328 + }, + + { + 69, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329 + + }, + + { + 69, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, 536, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330 + }, + + { + 69, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, 537, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331 + }, + + { + 69, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, 538, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332 + }, + + { + 69, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, 539, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333 + }, + + { + 69, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, 540, -334, + + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334 + }, + + { + 69, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, 541, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335 + }, + + { + 69, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, 542, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336 + }, + + { + 69, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, 543, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337 + }, + + { + 69, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, 544, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338 + }, + + { + 69, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, 545, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339 + + }, + + { + 69, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, 546, -340, + -340, -340, -340, -340, 547, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340 + }, + + { + 69, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, 548, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341 + }, + + { + 69, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, 549, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342 + }, + + { + 69, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, 550, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343 + }, + + { + 69, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, 551, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344 + }, + + { + 69, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + 552, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345 + }, + + { + 69, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, 553, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346 + }, + + { + 69, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, 554, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347 + }, + + { + 69, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + + -348, -348, -348, -348, -348, 555, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348 + }, + + { + 69, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, 556, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349 + + }, + + { + 69, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, 557, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350 + }, + + { + 69, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, 558, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351 + }, + + { + 69, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, 559, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352 + }, + + { + 69, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, 560, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353 + }, + + { + 69, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, 561, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354 + }, + + { + 69, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, 562, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355 + }, + + { + 69, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, 563, -356, + -356, -356, -356, -356, 564, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356 + }, + + { + 69, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, 565, -357, -357, -357, -357, -357, -357, -357, + + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357 + }, + + { + 69, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + + -358, -358, -358, -358, -358, -358, -358, -358, -358, 566, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358 + }, + + { + 69, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, 567, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359 + + }, + + { + 69, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + 568, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360 + }, + + { + 69, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + 569, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361 + }, + + { + 69, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + + -362, -362, -362, -362, -362, 570, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, 571, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, 572, + -362, -362, 573, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362 + }, + + { + 69, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, 574, -363, -363, -363, -363, -363, -363, -363, 575, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363 + }, + + { + 69, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + + 576, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364 + }, + + { + 69, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, 577, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365 + }, + + { + 69, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, 578, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366 + }, + + { + 69, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, 579, -367, -367, -367, -367, -367, + + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367 + }, + + { + 69, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, 580, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368 + }, + + { + 69, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, 581, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369 + + }, + + { + 69, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, 582, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370 + }, + + { + 69, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, 583, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371 + }, + + { + 69, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, 584, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372 + }, + + { + 69, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, 585, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373 + }, + + { + 69, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + + -374, -374, -374, 586, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374 + }, + + { + 69, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, 587, + -375, -375, -375, -375, -375, -375, 588, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375 + }, + + { + 69, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, 589, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376 + }, + + { + 69, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, 590, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, 591, -377, -377, -377, -377, -377, -377, -377, + + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377 + }, + + { + 69, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + + -378, -378, -378, -378, -378, -378, -378, -378, 592, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, 593, + 594, -378, -378, -378, -378, -378, 595, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378 + }, + + { + 69, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, 596, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379 + + }, + + { + 69, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, 597, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380 + }, + + { + 69, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + + -381, -381, -381, -381, -381, -381, -381, -381, 598, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381 + }, + + { + 69, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + 599, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382 + }, + + { + 69, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, 600, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383 + }, + + { + 69, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, 601, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384 + }, + + { + 69, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, 602, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, 603, 604, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385 + }, + + { + 69, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386 + }, + + { + 69, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387 + }, + + { + 69, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388 + }, + + { + 69, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, 605, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389 + + }, + + { + 69, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + 606, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390, -390, -390, + -390, -390, -390, -390, -390, -390, -390, -390 + }, + + { + 69, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + + -391, -391, -391, -391, -391, -391, -391, -391, -391, 607, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391 + }, + + { + 69, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, 608, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, 609, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392 + }, + + { + 69, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, 610, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393 + }, + + { + 69, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, 611, -394, -394, -394, -394, -394, -394, -394, -394, + + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394 + }, + + { + 69, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, 612, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, 613, + -395, -395, 614, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395 + }, + + { + 69, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, 615, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396 + }, + + { + 69, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, 616, -397, -397, -397, -397, -397, -397, + + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397 + }, + + { + 69, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, 617, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398 + }, + + { + 69, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, 618, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, 619, -399, + -399, -399, -399, -399, 620, -399, -399, -399, 621, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399 + + }, + + { + 69, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, 622, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400, -400, -400, + -400, -400, -400, -400, -400, -400, -400, -400 + }, + + { + 69, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, 623, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401, -401, -401, + -401, -401, -401, -401, -401, -401, -401, -401 + }, + + { + 69, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402 + }, + + { + 69, -403, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + + -403, -403, -403, -403, -403, -403, -403, -403, -403, -403, + -403, -403, -403, -403, -403, -403, -403, -403 + }, + + { + 69, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404, -404, -404, + -404, -404, -404, -404, -404, -404, -404, -404 + }, + + { + 69, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, + -405, -405, -405, -405, -405, -405, -405, -405 + }, + + { + 69, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406 + }, + + { + 69, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407, -407, -407, + -407, -407, -407, -407, -407, -407, -407, -407 + }, + + { + 69, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408, -408, -408, + -408, -408, -408, -408, -408, -408, -408, -408 + }, + + { + 69, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + + -409, -409, 624, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409, -409, -409, + -409, -409, -409, -409, -409, -409, -409, -409 + + }, + + { + 69, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, 625, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410 + }, + + { + 69, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, 626, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, 626, 626, 626, 626, 626, + + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411, -411, -411, + -411, -411, -411, -411, -411, -411, -411, -411 + }, + + { + 69, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412, -412, -412, + -412, -412, -412, -412, -412, -412, -412, -412 + }, + + { + 69, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413 + }, + + { + 69, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414 + }, + + { + 69, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415 + }, + + { + 69, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416 + }, + + { + 69, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, 627, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417 + }, + + { + 69, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, 628, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418 + }, + + { + 69, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + + -419, -419, 629, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, 629, 629, 629, 629, 629, + 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, + 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, + 629, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419 + + }, + + { + 69, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420 + }, + + { + 69, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421 + }, + + { + 69, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422 + }, + + { + 69, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423 + }, + + { + 69, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424 + }, + + { + 69, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, 630, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, 631, 631, + + 631, 631, 631, 631, 631, 631, 631, 631, -425, -425, + -425, -425, -425, -425, -425, 630, 630, 630, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, + 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, + 630, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425 + }, + + { + 69, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, 632, 632, + 632, 632, 632, 632, 632, 632, 632, 632, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426 + }, + + { + 69, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, 633, -427, -427, 634, 635, + 635, 635, 635, 635, 635, 635, 635, 635, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + + -427, -427, -427, -427, -427, 636, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427 + }, + + { + 69, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, 633, -428, -428, 637, 637, + 637, 637, 637, 637, 637, 637, 637, 637, -428, -428, + + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, 638, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428 + }, + + { + 69, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, 639, 639, + 639, 639, 639, 639, 639, 639, 639, 639, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429 + + }, + + { + 69, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, 633, -430, -430, 634, 634, + 634, 634, 634, 634, 634, 634, 634, 634, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, 640, -430, -430, -430, -430, + + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430 + }, + + { + 69, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, 641, 642, + 642, 642, 642, 642, 642, 642, 642, 642, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431 + }, + + { + 69, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, 643, -432, -432, -432, -432, -432, -432, -432, + + -432, -432, -432, -432, -432, -432, -432, -432, 644, 644, + 644, 644, 644, 644, 644, 644, 644, 644, -432, -432, + -432, -432, -432, -432, -432, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432 + }, + + { + 69, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, 633, -433, -433, 634, 634, + 634, 634, 634, 634, 634, 634, 634, 634, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, 636, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433 + }, + + { + 69, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, 645, 646, + 646, 646, 646, 646, 646, 646, 646, 646, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434 + }, + + { + 69, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, 643, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, 647, 648, + + 648, 648, 648, 648, 648, 648, 648, 648, -435, -435, + -435, -435, -435, -435, -435, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 643, 643, 643, 643, 643, + 643, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435 + }, + + { + 69, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, 649, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, 650, 650, + 650, 650, 650, 650, 650, 650, 650, 650, -436, -436, + -436, -436, -436, -436, -436, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, + 649, 649, 649, 649, 649, 649, 649, 649, 649, 649, + 649, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436 + }, + + { + 69, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, 651, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437 + }, + + { + 69, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, 652, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438 + }, + + { + 69, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + + -439, -439, 653, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, 653, 653, 653, 653, 653, + 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, + 653, 653, 653, 653, 653, 653, 653, 653, 653, 653, + 653, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439 + + }, + + { + 69, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, 654, 654, + 654, 654, 654, 654, 654, 654, 654, 654, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, 655, -440, -440, -440, -440, + + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440 + }, + + { + 69, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, 656, + 656, 656, 656, 656, 656, 656, 656, 656, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441 + }, + + { + 69, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, 657, -442, -442, -442, -442, -442, -442, -442, + + -442, -442, -442, -442, -442, -442, -442, -442, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, -442, -442, + -442, -442, -442, -442, -442, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442 + }, + + { + 69, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, 659, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443 + }, + + { + 69, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, 660, + 660, 660, 660, 660, 660, 660, 660, 660, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444 + }, + + { + 69, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, 661, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, 662, 662, + + 662, 662, 662, 662, 662, 662, 662, 662, -445, -445, + -445, -445, -445, -445, -445, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + 661, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445 + }, + + { + 69, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446 + }, + + { + 69, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447 + }, + + { + 69, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448 + }, + + { + 69, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449 + + }, + + { + 69, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450 + }, + + { + 69, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451 + }, + + { + 69, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452 + }, + + { + 69, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453 + }, + + { + 69, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454 + }, + + { + 69, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455 + }, + + { + 69, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456 + }, + + { + 69, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457 + }, + + { + 69, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458 + }, + + { + 69, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + + -459, -459, 663, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, 664, 664, + 664, 664, 664, 664, 664, 664, 664, 664, -459, -459, + -459, -459, -459, -459, -459, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459 + + }, + + { + 69, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, 665, 665, + 665, 665, 665, 665, 665, 665, 665, 665, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460 + }, + + { + 69, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, 666, -461, -461, 667, 668, + 668, 668, 668, 668, 668, 668, 668, 668, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, 669, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461 + }, + + { + 69, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + + -462, -462, -462, -462, -462, 666, -462, -462, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, 671, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462 + }, + + { + 69, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463 + }, + + { + 69, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, 666, -464, -464, 667, 667, + 667, 667, 667, 667, 667, 667, 667, 667, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, 673, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464 + }, + + { + 69, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, 674, 675, + + 675, 675, 675, 675, 675, 675, 675, 675, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465 + }, + + { + 69, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, 676, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, -466, -466, + -466, -466, -466, -466, -466, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, + 676, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466 + }, + + { + 69, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, 666, -467, -467, 667, 667, + 667, 667, 667, 667, 667, 667, 667, 667, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + + -467, -467, -467, -467, -467, 669, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467 + }, + + { + 69, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, 678, 679, + 679, 679, 679, 679, 679, 679, 679, 679, -468, -468, + + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468 + }, + + { + 69, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + + -469, -469, 680, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, 681, 682, + 682, 682, 682, 682, 682, 682, 682, 682, -469, -469, + -469, -469, -469, -469, -469, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469 + + }, + + { + 69, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, 680, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, 683, 683, + 683, 683, 683, 683, 683, 683, 683, 683, -470, -470, + -470, -470, -470, -470, -470, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, 680, 680, 680, 680, 680, 680, 680, 680, 680, + 680, -470, -470, -470, -470, -470, -470, -470, -470, -470, + + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470 + }, + + { + 69, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, 684, 684, + 684, 684, 684, 684, 684, 684, 684, 684, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, 685, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471 + }, + + { + 69, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + + -472, -472, -472, -472, -472, -472, -472, -472, 686, 687, + 687, 687, 687, 687, 687, 687, 687, 687, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472 + }, + + { + 69, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, 688, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 688, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473 + }, + + { + 69, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, 688, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, 689, 689, + 689, 689, 689, 689, 689, 689, 689, 689, -474, -474, + -474, -474, -474, -474, -474, 688, 688, 688, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + + 688, 688, 688, 688, 688, 688, 688, 688, 688, 688, + 688, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474 + }, + + { + 69, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, 690, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475 + }, + + { + 69, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, 691, 692, + 692, 692, 692, 692, 692, 692, 692, 692, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476 + }, + + { + 69, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, 693, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + + 693, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477 + }, + + { + 69, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, 693, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 694, -478, -478, + + -478, -478, -478, -478, -478, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, + 693, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478 + }, + + { + 69, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, 695, 695, + 695, 695, 695, 695, 695, 695, 695, 695, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, 696, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479 + + }, + + { + 69, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, 697, 698, + 698, 698, 698, 698, 698, 698, 698, 698, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480 + }, + + { + 69, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, 699, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, 699, 699, 699, 699, 699, + + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481 + }, + + { + 69, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, 699, -482, -482, -482, -482, -482, -482, -482, + + -482, -482, -482, -482, -482, -482, -482, -482, 700, 700, + 700, 700, 700, 700, 700, 700, 700, 700, -482, -482, + -482, -482, -482, -482, -482, 699, 699, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, + 699, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482 + }, + + { + 69, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, 701, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483 + }, + + { + 69, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, 702, 703, + 703, 703, 703, 703, 703, 703, 703, 703, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484 + }, + + { + 69, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, 704, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485 + }, + + { + 69, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, 704, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, 705, 705, + 705, 705, 705, 705, 705, 705, 705, 705, -486, -486, + -486, -486, -486, -486, -486, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, 704, 704, + 704, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486 + }, + + { + 69, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487 + }, + + { + 69, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488 + }, + + { + 69, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489 + + }, + + { + 69, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, 706, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490 + }, + + { + 69, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, 707, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491 + }, + + { + 69, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, 708, -492, -492, -492, -492, -492, -492, -492, + + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492 + }, + + { + 69, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493 + }, + + { + 69, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494 + }, + + { + 69, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495 + }, + + { + 69, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, 709, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496 + }, + + { + 69, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, 710, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497 + }, + + { + 69, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, 711, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 712, -498, -498, + + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498 + }, + + { + 69, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499 + + }, + + { + 69, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500 + }, + + { + 69, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501 + }, + + { + 69, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + + -502, -502, -502, -502, -502, -502, -502, -502, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, 291, 291, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + 291, 291, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502 + }, + + { + 69, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503 + }, + + { + 69, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504 + }, + + { + 69, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, 505, 505, + + 505, 505, 505, 505, 505, 505, 505, 505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, 297, 297, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + 297, 297, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505 + }, + + { + 69, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506 + }, + + { + 69, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507 + }, + + { + 69, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 713, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 714, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 715, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + + }, + + { + 69, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + }, + + { + 69, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 510, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 511, 509, 509, 509, 509, 509, 509, 509, + + 509, 509, 509, 509, 509, 509, 509, 512, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716 + }, + + { + 69, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 514, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 515, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 516, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 513, 513, 513, 513, 513 + }, + + { + 69, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518 + }, + + { + 69, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 518, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + + 517, 517, 519, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 520, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517 + + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521 + }, + + { + 69, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522 + }, + + { + 69, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523 + }, + + { + 69, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + + -524, -524, -524, -524, 724, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524 + }, + + { + 69, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, 725, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525 + }, + + { + 69, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, 726, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526 + }, + + { + 69, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527 + }, + + { + 69, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + + -528, -528, -528, -528, -528, -528, -528, -528, -528, 727, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528 + }, + + { + 69, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, 728, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529 + + }, + + { + 69, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, 729, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530 + }, + + { + 69, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + + -531, -531, -531, -531, -531, -531, 730, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531 + }, + + { + 69, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, 731, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532 + }, + + { + 69, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + 732, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533 + }, + + { + 69, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, 733, -534, -534, -534, -534, -534, -534, + + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534 + }, + + { + 69, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, 734, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535 + }, + + { + 69, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, 735, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536 + }, + + { + 69, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + + -537, -537, -537, -537, -537, 736, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537 + }, + + { + 69, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + + -538, -538, -538, -538, -538, -538, -538, 737, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538 + }, + + { + 69, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, 738, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539 + + }, + + { + 69, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, 739, -540, -540, -540, -540, + + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540 + }, + + { + 69, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, 740, -541, + + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541 + }, + + { + 69, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, 741, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542 + }, + + { + 69, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, 742, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543 + }, + + { + 69, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, 743, -544, -544, -544, -544, -544, -544, + + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544 + }, + + { + 69, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, 744, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545 + }, + + { + 69, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, 745, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546 + }, + + { + 69, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + + -547, -547, -547, -547, -547, 746, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547 + }, + + { + 69, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + + -548, -548, -548, -548, -548, 747, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548 + }, + + { + 69, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, 748, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549 + + }, + + { + 69, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, 749, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550, -550, -550, + -550, -550, -550, -550, -550, -550, -550, -550 + }, + + { + 69, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, 750, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551 + }, + + { + 69, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, 751, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552 + }, + + { + 69, -553, -553, -553, -553, -553, -553, -553, -553, -553, + + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, 752, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + + -553, -553, -553, -553, -553, -553, -553, -553, -553, -553, + -553, -553, -553, -553, -553, -553, -553, -553 + }, + + { + 69, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + + -554, -554, -554, 753, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554, -554, -554, + -554, -554, -554, -554, -554, -554, -554, -554 + }, + + { + 69, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, 754, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, + -555, -555, -555, -555, -555, -555, -555, -555 + }, + + { + 69, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, 755, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, 756, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556 + }, + + { + 69, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, + -557, -557, -557, -557, -557, -557, -557, -557 + }, + + { + 69, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, 757, + 757, 757, 757, 757, 757, 757, 757, 757, -558, -558, + + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558, -558, -558, + -558, -558, -558, -558, -558, -558, -558, -558 + }, + + { + 69, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, 758, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559, -559, -559, + -559, -559, -559, -559, -559, -559, -559, -559 + + }, + + { + 69, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, 759, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560 + }, + + { + 69, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + + -561, -561, 760, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561, -561, -561, + -561, -561, -561, -561, -561, -561, -561, -561 + }, + + { + 69, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, 761, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562, -562, -562, + -562, -562, -562, -562, -562, -562, -562, -562 + }, + + { + 69, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, 762, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563 + }, + + { + 69, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, 763, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564 + }, + + { + 69, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, 764, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565 + }, + + { + 69, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + 765, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566 + }, + + { + 69, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, 766, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567 + }, + + { + 69, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, 767, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568 + }, + + { + 69, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, 768, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569 + + }, + + { + 69, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, 769, 770, -570, -570, 771, + -570, -570, -570, -570, -570, -570, -570, -570, -570, 772, + -570, -570, 773, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570 + }, + + { + 69, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571 + }, + + { + 69, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, 774, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572 + }, + + { + 69, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, 775, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573 + }, + + { + 69, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, 776, -574, -574, 777, + -574, -574, 778, -574, -574, -574, 779, -574, -574, -574, + + -574, -574, -574, -574, -574, -574, -574, -574, 780, 781, + 782, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574 + }, + + { + 69, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, 783, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575 + }, + + { + 69, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, 784, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576 + }, + + { + 69, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + 785, -577, -577, -577, -577, -577, -577, -577, -577, -577, + + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577 + }, + + { + 69, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + + -578, -578, -578, -578, -578, -578, -578, 786, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, 787, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578 + }, + + { + 69, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + 788, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, 789, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579 + + }, + + { + 69, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580 + }, + + { + 69, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, 790, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581 + }, + + { + 69, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582 + }, + + { + 69, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583 + }, + + { + 69, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + + -584, -584, -584, 791, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584 + }, + + { + 69, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585 + }, + + { + 69, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, 792, + -586, -586, -586, 793, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586 + }, + + { + 69, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587 + }, + + { + 69, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, 794, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588 + }, + + { + 69, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, 795, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589 + + }, + + { + 69, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, 796, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590 + }, + + { + 69, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591 + }, + + { + 69, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, 797, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592 + }, + + { + 69, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, 798, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593 + }, + + { + 69, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + + -594, -594, -594, -594, -594, -594, -594, -594, 799, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594 + }, + + { + 69, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, 800, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595 + }, + + { + 69, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, 801, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596 + }, + + { + 69, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + 802, -597, -597, -597, -597, -597, -597, -597, -597, -597, + + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597 + }, + + { + 69, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, 803, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598 + }, + + { + 69, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, 804, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599 + + }, + + { + 69, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + 805, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600 + }, + + { + 69, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + + -601, -601, -601, -601, -601, -601, 806, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601 + }, + + { + 69, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, 807, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, 808, + 809, -602, -602, 810, -602, 811, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602 + }, + + { + 69, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, 812, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603 + }, + + { + 69, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + + -604, -604, -604, -604, -604, -604, -604, -604, -604, 813, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604 + }, + + { + 69, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, 814, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605 + }, + + { + 69, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, 815, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + 816, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606 + }, + + { + 69, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, 817, -607, -607, -607, -607, -607, -607, + + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607 + }, + + { + 69, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, 818, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608 + }, + + { + 69, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + 819, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609 + + }, + + { + 69, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610 + }, + + { + 69, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611 + }, + + { + 69, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, 820, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612 + }, + + { + 69, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, 821, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613 + }, + + { + 69, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, 822, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614 + }, + + { + 69, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, 823, + + 823, 823, 823, 823, 823, 823, 823, 823, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, 824, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615 + }, + + { + 69, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616 + }, + + { + 69, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, 825, + 825, 825, 825, 825, 825, 825, 825, 825, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617 + }, + + { + 69, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, 826, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618 + }, + + { + 69, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, 827, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619 + + }, + + { + 69, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, 828, + 828, 828, 828, 828, 828, 828, 828, 828, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620 + }, + + { + 69, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, 829, + 829, 829, 829, 829, 829, 829, 829, 829, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621 + }, + + { + 69, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, 830, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622 + }, + + { + 69, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, 831, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623 + }, + + { + 69, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624 + }, + + { + 69, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625 + }, + + { + 69, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626 + }, + + { + 69, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627 + }, + + { + 69, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628 + }, + + { + 69, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629 + + }, + + { + 69, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, 832, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630 + }, + + { + 69, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, 833, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, 834, 834, + 834, 834, 834, 834, 834, 834, 834, 834, -631, -631, + -631, -631, -631, -631, -631, 833, 833, 833, 833, 833, + + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631 + }, + + { + 69, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, 835, -632, -632, -632, -632, -632, -632, -632, + + -632, -632, -632, -632, -632, -632, -632, -632, 836, 836, + 836, 836, 836, 836, 836, 836, 836, 836, -632, -632, + -632, -632, -632, -632, -632, 835, 835, 835, 835, 835, + 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 835, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632 + }, + + { + 69, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, 837, 837, + 837, 837, 837, 837, 837, 837, 837, 837, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633 + }, + + { + 69, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, 838, -634, -634, 839, 839, + 839, 839, 839, 839, 839, 839, 839, 839, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, 840, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634 + }, + + { + 69, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, 838, -635, -635, 839, 839, + + 839, 839, 839, 839, 839, 839, 839, 839, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, 841, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635 + }, + + { + 69, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, 842, 842, + 842, 842, 842, 842, 842, 842, 842, 842, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636 + }, + + { + 69, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, 838, -637, -637, 839, 839, + 839, 839, 839, 839, 839, 839, 839, 839, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + + -637, -637, -637, -637, -637, 843, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637 + }, + + { + 69, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, 844, 845, + 845, 845, 845, 845, 845, 845, 845, 845, -638, -638, + + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638 + }, + + { + 69, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + + -639, -639, 846, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, 847, 847, + 847, 847, 847, 847, 847, 847, 847, 847, -639, -639, + -639, -639, -639, -639, -639, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639 + + }, + + { + 69, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, 848, 849, + 849, 849, 849, 849, 849, 849, 849, 849, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640 + }, + + { + 69, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, 846, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, 850, 851, + 851, 851, 851, 851, 851, 851, 851, 851, -641, -641, + -641, -641, -641, -641, -641, 846, 846, 846, 846, 846, + + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641 + }, + + { + 69, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, 852, -642, -642, -642, -642, -642, -642, -642, + + -642, -642, -642, -642, -642, -642, -642, -642, 853, 853, + 853, 853, 853, 853, 853, 853, 853, 853, -642, -642, + -642, -642, -642, -642, -642, 852, 852, 852, 852, 852, + 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, + 852, 852, 852, 852, 852, 852, 852, 852, 852, 852, + 852, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642 + }, + + { + 69, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, 854, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643 + }, + + { + 69, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, 855, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, -644, -644, + -644, -644, -644, -644, -644, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + 855, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644 + }, + + { + 69, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, 846, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, 857, 858, + + 858, 858, 858, 858, 858, 858, 858, 858, -645, -645, + -645, -645, -645, -645, -645, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645 + }, + + { + 69, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, 859, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, 860, 860, + 860, 860, 860, 860, 860, 860, 860, 860, -646, -646, + -646, -646, -646, -646, -646, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646 + }, + + { + 69, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, 855, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, 861, 862, + 862, 862, 862, 862, 862, 862, 862, 862, -647, -647, + -647, -647, -647, -647, -647, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 855, 855, 855, + + 855, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647 + }, + + { + 69, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, 863, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, -648, -648, + + -648, -648, -648, -648, -648, 863, 863, 863, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, + 863, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648 + }, + + { + 69, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + + -649, -649, 865, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649 + + }, + + { + 69, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, 866, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, -650, -650, + -650, -650, -650, -650, -650, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, 866, 866, + 866, -650, -650, -650, -650, -650, -650, -650, -650, -650, + + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650 + }, + + { + 69, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651 + }, + + { + 69, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652 + }, + + { + 69, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653 + }, + + { + 69, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, 867, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654 + }, + + { + 69, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, 868, + + 868, 868, 868, 868, 868, 868, 868, 868, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655 + }, + + { + 69, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, 869, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, 870, 870, + 870, 870, 870, 870, 870, 870, 870, 870, -656, -656, + -656, -656, -656, -656, -656, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, 869, 869, 869, 869, 869, 869, 869, 869, 869, + 869, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656 + }, + + { + 69, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, 871, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657 + }, + + { + 69, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, 872, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, 873, 873, + 873, 873, 873, 873, 873, 873, 873, 873, -658, -658, + + -658, -658, -658, -658, -658, 872, 872, 872, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, + 872, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658 + }, + + { + 69, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, 874, + 874, 874, 874, 874, 874, 874, 874, 874, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659 + + }, + + { + 69, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, 875, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, 876, 876, + 876, 876, 876, 876, 876, 876, 876, 876, -660, -660, + -660, -660, -660, -660, -660, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, + 875, -660, -660, -660, -660, -660, -660, -660, -660, -660, + + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660 + }, + + { + 69, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, 877, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661 + }, + + { + 69, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, 878, -662, -662, -662, -662, -662, -662, -662, + + -662, -662, -662, -662, -662, -662, -662, -662, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, -662, -662, + -662, -662, -662, -662, -662, 878, 878, 878, 878, 878, + 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662 + }, + + { + 69, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, 880, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663 + }, + + { + 69, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, 881, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, 882, 882, + 882, 882, 882, 882, 882, 882, 882, 882, -664, -664, + -664, -664, -664, -664, -664, 881, 881, 881, 881, 881, + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + + 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, + 881, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664 + }, + + { + 69, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, 883, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, 884, 884, + + 884, 884, 884, 884, 884, 884, 884, 884, -665, -665, + -665, -665, -665, -665, -665, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665 + }, + + { + 69, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, 885, 885, + 885, 885, 885, 885, 885, 885, 885, 885, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666 + }, + + { + 69, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, 886, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + + -667, -667, -667, -667, -667, 887, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667 + }, + + { + 69, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, 886, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, 888, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668 + }, + + { + 69, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, 889, 889, + 889, 889, 889, 889, 889, 889, 889, 889, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669 + + }, + + { + 69, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, 886, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, 890, -670, -670, -670, -670, + + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670 + }, + + { + 69, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, 891, 892, + 892, 892, 892, 892, 892, 892, 892, 892, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671 + }, + + { + 69, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, 893, -672, -672, -672, -672, -672, -672, -672, + + -672, -672, -672, -672, -672, -672, -672, -672, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, -672, -672, + -672, -672, -672, -672, -672, 893, 893, 893, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, + 893, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672 + }, + + { + 69, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, 895, 896, + 896, 896, 896, 896, 896, 896, 896, 896, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673 + }, + + { + 69, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, 897, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, 898, 899, + 899, 899, 899, 899, 899, 899, 899, 899, -674, -674, + -674, -674, -674, -674, -674, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674 + }, + + { + 69, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, 897, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, 900, 900, + + 900, 900, 900, 900, 900, 900, 900, 900, -675, -675, + -675, -675, -675, -675, -675, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675 + }, + + { + 69, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, 901, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676 + }, + + { + 69, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, 902, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, 903, 903, + 903, 903, 903, 903, 903, 903, 903, 903, -677, -677, + -677, -677, -677, -677, -677, 902, 902, 902, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, 902, 902, + + 902, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677 + }, + + { + 69, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, 904, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, 905, 906, + 906, 906, 906, 906, 906, 906, 906, 906, -678, -678, + + -678, -678, -678, -678, -678, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678 + }, + + { + 69, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + + -679, -679, 904, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 907, -679, -679, + -679, -679, -679, -679, -679, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679 + + }, + + { + 69, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, 908, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680 + }, + + { + 69, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, 909, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, 910, 911, + 911, 911, 911, 911, 911, 911, 911, 911, -681, -681, + -681, -681, -681, -681, -681, 909, 909, 909, 909, 909, + + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681 + }, + + { + 69, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, 909, -682, -682, -682, -682, -682, -682, -682, + + -682, -682, -682, -682, -682, -682, -682, -682, 912, 912, + 912, 912, 912, 912, 912, 912, 912, 912, -682, -682, + -682, -682, -682, -682, -682, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, 909, 909, 909, 909, 909, 909, 909, 909, 909, + 909, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682 + }, + + { + 69, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, 913, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, 903, 903, + 903, 903, 903, 903, 903, 903, 903, 903, -683, -683, + -683, -683, -683, -683, -683, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683 + }, + + { + 69, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, 914, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684 + }, + + { + 69, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, 915, 916, + + 916, 916, 916, 916, 916, 916, 916, 916, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685 + }, + + { + 69, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, 917, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686 + }, + + { + 69, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, 917, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, 918, 918, + 918, 918, 918, 918, 918, 918, 918, 918, -687, -687, + -687, -687, -687, -687, -687, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, 917, 917, + + 917, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687 + }, + + { + 69, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, 919, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688 + }, + + { + 69, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + + -689, -689, 920, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, -689, -689, + -689, -689, -689, -689, -689, 920, 920, 920, 920, 920, + 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, + 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, + 920, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689 + + }, + + { + 69, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690 + }, + + { + 69, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, 923, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, 923, 923, 923, 923, 923, + + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691 + }, + + { + 69, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, 923, -692, -692, -692, -692, -692, -692, -692, + + -692, -692, -692, -692, -692, -692, -692, -692, 924, 924, + 924, 924, 924, 924, 924, 924, 924, 924, -692, -692, + -692, -692, -692, -692, -692, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692 + }, + + { + 69, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, 925, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693 + }, + + { + 69, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, 926, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, 927, 927, + 927, 927, 927, 927, 927, 927, 927, 927, -694, -694, + -694, -694, -694, -694, -694, 926, 926, 926, 926, 926, + 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, + + 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, + 926, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694 + }, + + { + 69, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, 928, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695 + }, + + { + 69, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, 929, 930, + 930, 930, 930, 930, 930, 930, 930, 930, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696 + }, + + { + 69, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, 931, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + + 931, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697 + }, + + { + 69, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, 931, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, 932, 932, + 932, 932, 932, 932, 932, 932, 932, 932, -698, -698, + + -698, -698, -698, -698, -698, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, 931, 931, 931, 931, 931, 931, 931, 931, 931, + 931, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698 + }, + + { + 69, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + + -699, -699, 933, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699 + + }, + + { + 69, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, 934, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, 935, 935, + 935, 935, 935, 935, 935, 935, 935, 935, -700, -700, + -700, -700, -700, -700, -700, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, + 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, + 934, -700, -700, -700, -700, -700, -700, -700, -700, -700, + + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700 + }, + + { + 69, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, 936, 936, + 936, 936, 936, 936, 936, 936, 936, 936, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701 + }, + + { + 69, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, 937, -702, -702, -702, -702, -702, -702, -702, + + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702 + }, + + { + 69, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, 937, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, 938, 938, + 938, 938, 938, 938, 938, 938, 938, 938, -703, -703, + -703, -703, -703, -703, -703, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, 937, 937, 937, 937, 937, 937, 937, 937, 937, + 937, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703 + }, + + { + 69, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, 939, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704 + }, + + { + 69, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, 940, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, 941, 941, + + 941, 941, 941, 941, 941, 941, 941, 941, -705, -705, + -705, -705, -705, -705, -705, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, 940, 940, 940, 940, 940, 940, 940, 940, 940, + 940, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705 + }, + + { + 69, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706 + }, + + { + 69, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707 + }, + + { + 69, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708 + }, + + { + 69, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709 + + }, + + { + 69, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710 + }, + + { + 69, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711 + }, + + { + 69, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712 + }, + + { + 69, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713 + }, + + { + 69, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 713, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 714, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 715, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716 + }, + + { + 69, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716 + }, + + { + 69, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 717, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + + 716, 716, 718, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 719, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716 + + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721 + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 721, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 722, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 723, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + + 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, + 720, 720, 720, 720, 720, 720, 720, 720 + }, + + { + 69, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724 + }, + + { + 69, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725 + }, + + { + 69, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726 + }, + + { + 69, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727 + }, + + { + 69, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728 + }, + + { + 69, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729 + + }, + + { + 69, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730 + }, + + { + 69, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731 + }, + + { + 69, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732 + }, + + { + 69, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733 + }, + + { + 69, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734 + }, + + { + 69, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, 946, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735 + }, + + { + 69, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, 947, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736 + }, + + { + 69, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, 948, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737 + }, + + { + 69, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, 949, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738, -738, -738, + -738, -738, -738, -738, -738, -738, -738, -738 + }, + + { + 69, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, 950, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739 + + }, + + { + 69, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, 951, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740, -740, -740, + -740, -740, -740, -740, -740, -740, -740, -740 + }, + + { + 69, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741 + }, + + { + 69, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742 + }, + + { + 69, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743 + }, + + { + 69, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744 + }, + + { + 69, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, 952, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745 + }, + + { + 69, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, 953, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746 + }, + + { + 69, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747 + }, + + { + 69, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748 + }, + + { + 69, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749 + + }, + + { + 69, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750 + }, + + { + 69, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751 + }, + + { + 69, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752 + }, + + { + 69, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753 + }, + + { + 69, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, 954, -754, -754, -754, -754, -754, -754, + + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754 + }, + + { + 69, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, 955, 956, -755, -755, 957, + -755, -755, -755, -755, -755, -755, -755, -755, -755, 958, + -755, -755, 959, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755 + }, + + { + 69, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, 960, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756 + }, + + { + 69, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, 961, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, 962, 962, + 962, 962, 962, 962, 962, 962, 962, 962, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757 + }, + + { + 69, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, 963, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758 + }, + + { + 69, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + + -759, -759, 964, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759 + + }, + + { + 69, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, 965, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, 965, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, + 965, -760, -760, -760, -760, -760, -760, -760, -760, -760, + + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760 + }, + + { + 69, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + + -761, -761, -761, -761, -761, -761, -761, -761, -761, 966, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761 + }, + + { + 69, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, 967, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762 + }, + + { + 69, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, 968, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763 + }, + + { + 69, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + 969, -764, -764, -764, -764, -764, -764, -764, -764, -764, + + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764 + }, + + { + 69, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, 970, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + 971, -765, -765, 972, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765 + }, + + { + 69, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, 973, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766 + }, + + { + 69, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, 974, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767 + }, + + { + 69, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, 975, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768 + }, + + { + 69, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, 976, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769 + + }, + + { + 69, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, 977, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770 + }, + + { + 69, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + + -771, -771, -771, -771, -771, -771, -771, -771, 978, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771 + }, + + { + 69, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, 979, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772 + }, + + { + 69, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, 980, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773 + }, + + { + 69, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774 + }, + + { + 69, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + 981, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775 + }, + + { + 69, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, 982, + 982, 982, 982, 982, 982, 982, 982, 982, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776 + }, + + { + 69, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, 983, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777 + }, + + { + 69, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, 984, + 984, 984, 984, 984, 984, 984, 984, 984, -778, -778, + + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778 + }, + + { + 69, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, 985, + 985, 985, 985, 985, 985, 985, 985, 985, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779 + + }, + + { + 69, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780 + }, + + { + 69, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781 + }, + + { + 69, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782 + }, + + { + 69, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, 986, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783 + }, + + { + 69, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, 987, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784 + }, + + { + 69, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785 + }, + + { + 69, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, 988, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786 + }, + + { + 69, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, 989, + + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787 + }, + + { + 69, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, 990, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788 + }, + + { + 69, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, 991, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789 + + }, + + { + 69, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, 992, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790 + }, + + { + 69, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, 993, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791 + }, + + { + 69, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, 994, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792 + }, + + { + 69, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, 995, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793 + }, + + { + 69, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794 + }, + + { + 69, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795 + }, + + { + 69, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796 + }, + + { + 69, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797 + }, + + { + 69, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798 + }, + + { + 69, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799 + + }, + + { + 69, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800 + }, + + { + 69, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801 + }, + + { + 69, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802 + }, + + { + 69, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803 + }, + + { + 69, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804 + }, + + { + 69, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, 996, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805 + }, + + { + 69, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, 997, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806 + }, + + { + 69, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, 998, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807 + }, + + { + 69, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + 999, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808 + }, + + { + 69, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, 1000, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809 + + }, + + { + 69, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, 1001, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810 + }, + + { + 69, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + + -811, -811, -811, -811, -811, -811, -811, -811, 1002, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811 + }, + + { + 69, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, 1003, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812 + }, + + { + 69, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, 1004, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813 + }, + + { + 69, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814 + }, + + { + 69, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, 1005, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815 + }, + + { + 69, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, 1006, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816 + }, + + { + 69, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817 + }, + + { + 69, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, 1007, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818 + }, + + { + 69, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + + -819, -819, 1008, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819 + + }, + + { + 69, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, 1009, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820 + }, + + { + 69, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, 1010, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821 + }, + + { + 69, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + 1011, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822 + }, + + { + 69, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, 1012, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, -823, -823, + -823, -823, -823, -823, -823, 1012, 1012, 1012, 1012, 1012, + 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, + 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, + 1012, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823 + }, + + { + 69, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, 1014, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824 + }, + + { + 69, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, 1015, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, 1016, 1016, + + 1016, 1016, 1016, 1016, 1016, 1016, 1016, 1016, -825, -825, + -825, -825, -825, -825, -825, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, + 1015, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825 + }, + + { + 69, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, 1017, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826 + }, + + { + 69, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, 1018, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827 + }, + + { + 69, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, 1019, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, 1020, 1020, + 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, -828, -828, + + -828, -828, -828, -828, -828, 1019, 1019, 1019, 1019, 1019, + 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, + 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, 1019, + 1019, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828 + }, + + { + 69, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + + -829, -829, 1021, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, 1022, 1022, + 1022, 1022, 1022, 1022, 1022, 1022, 1022, 1022, -829, -829, + -829, -829, -829, -829, -829, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, 1021, + 1021, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829 + + }, + + { + 69, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, 1023, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830 + }, + + { + 69, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, 1024, -831, -831, + + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831 + }, + + { + 69, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, 1025, -832, -832, -832, -832, -832, -832, -832, + + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832 + }, + + { + 69, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, 1026, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833 + }, + + { + 69, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, 1027, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, 1028, 1028, + 1028, 1028, 1028, 1028, 1028, 1028, 1028, 1028, -834, -834, + -834, -834, -834, -834, -834, 1027, 1027, 1027, 1027, 1027, + 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + + 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, + 1027, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834 + }, + + { + 69, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, 1029, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835 + }, + + { + 69, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, 1030, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, 1031, 1031, + 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, -836, -836, + -836, -836, -836, -836, -836, 1030, 1030, 1030, 1030, 1030, + 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, + 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, + 1030, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836 + }, + + { + 69, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, 1032, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, 1033, 1033, + 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, -837, -837, + -837, -837, -837, -837, -837, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, + 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, + + 1032, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837 + }, + + { + 69, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, 1034, 1034, + 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, -838, -838, + + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838 + }, + + { + 69, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, 1035, 1035, + 1035, 1035, 1035, 1035, 1035, 1035, 1035, 1035, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839 + + }, + + { + 69, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, 1036, 1036, + 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840 + }, + + { + 69, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, 1036, 1037, + 1037, 1037, 1037, 1037, 1037, 1037, 1037, 1037, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841 + }, + + { + 69, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, 1038, -842, -842, -842, -842, -842, -842, -842, + + -842, -842, -842, -842, -842, -842, -842, -842, 1039, 1039, + 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, -842, -842, + -842, -842, -842, -842, -842, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842 + }, + + { + 69, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, 1036, 1040, + 1040, 1040, 1040, 1040, 1040, 1040, 1040, 1040, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843 + }, + + { + 69, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, 1038, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, 1039, 1041, + 1041, 1041, 1041, 1041, 1041, 1041, 1041, 1041, -844, -844, + -844, -844, -844, -844, -844, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844 + }, + + { + 69, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, 1042, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, 1043, 1043, + + 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, -845, -845, + -845, -845, -845, -845, -845, 1042, 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, + 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, 1042, + 1042, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845 + }, + + { + 69, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, 1044, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846 + }, + + { + 69, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, 1045, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, -847, -847, + -847, -847, -847, -847, -847, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + + 1045, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847 + }, + + { + 69, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, 1038, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, 1039, 1047, + 1047, 1047, 1047, 1047, 1047, 1047, 1047, 1047, -848, -848, + + -848, -848, -848, -848, -848, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, + 1038, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848 + }, + + { + 69, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + + -849, -849, 1048, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, 1049, 1049, + 1049, 1049, 1049, 1049, 1049, 1049, 1049, 1049, -849, -849, + -849, -849, -849, -849, -849, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, + 1048, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849 + + }, + + { + 69, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, 1045, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, 1046, 1050, + 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, -850, -850, + -850, -850, -850, -850, -850, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, -850, -850, -850, -850, -850, -850, -850, -850, -850, + + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850 + }, + + { + 69, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, 1051, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, 1052, 1052, + 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, -851, -851, + -851, -851, -851, -851, -851, 1051, 1051, 1051, 1051, 1051, + + 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, + 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, + 1051, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851 + }, + + { + 69, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, 1053, -852, -852, -852, -852, -852, -852, -852, + + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852 + }, + + { + 69, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, 1054, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, -853, -853, + -853, -853, -853, -853, -853, 1054, 1054, 1054, 1054, 1054, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, 1054, + 1054, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853 + }, + + { + 69, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, 1055, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854 + }, + + { + 69, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, 1056, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855 + }, + + { + 69, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, 1057, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, -856, -856, + -856, -856, -856, -856, -856, 1057, 1057, 1057, 1057, 1057, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856 + }, + + { + 69, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, 1045, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, 1046, 1059, + 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, -857, -857, + -857, -857, -857, -857, -857, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, 1045, + + 1045, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857 + }, + + { + 69, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, 1060, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, 1061, 1061, + 1061, 1061, 1061, 1061, 1061, 1061, 1061, 1061, -858, -858, + + -858, -858, -858, -858, -858, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, 1060, + 1060, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858 + }, + + { + 69, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + + -859, -859, 1062, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859 + + }, + + { + 69, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, 1063, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, 1046, 1046, + 1046, 1046, 1046, 1046, 1046, 1046, 1046, 1046, -860, -860, + -860, -860, -860, -860, -860, 1063, 1063, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, + 1063, -860, -860, -860, -860, -860, -860, -860, -860, -860, + + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860 + }, + + { + 69, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, 1057, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, 1058, 1064, + 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, -861, -861, + -861, -861, -861, -861, -861, 1057, 1057, 1057, 1057, 1057, + + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, 1057, + 1057, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861 + }, + + { + 69, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, 1065, -862, -862, -862, -862, -862, -862, -862, + + -862, -862, -862, -862, -862, -862, -862, -862, 1066, 1066, + 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, -862, -862, + -862, -862, -862, -862, -862, 1065, 1065, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, + 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, 1065, + 1065, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862 + }, + + { + 69, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, 1067, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863 + }, + + { + 69, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, 1068, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, 1058, 1058, + 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, -864, -864, + -864, -864, -864, -864, -864, 1068, 1068, 1068, 1068, 1068, + 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, + + 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, 1068, + 1068, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864 + }, + + { + 69, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, 1069, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865 + }, + + { + 69, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, 1070, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866 + }, + + { + 69, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, 1071, + 1071, 1071, 1071, 1071, 1071, 1071, 1071, 1071, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867 + }, + + { + 69, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, 1072, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, 1073, 1073, + 1073, 1073, 1073, 1073, 1073, 1073, 1073, 1073, -868, -868, + + -868, -868, -868, -868, -868, 1072, 1072, 1072, 1072, 1072, + 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, + 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, 1072, + 1072, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868 + }, + + { + 69, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + + -869, -869, 1074, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869 + + }, + + { + 69, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, 1075, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, 1076, 1076, + 1076, 1076, 1076, 1076, 1076, 1076, 1076, 1076, -870, -870, + -870, -870, -870, -870, -870, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, 1075, + 1075, -870, -870, -870, -870, -870, -870, -870, -870, -870, + + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870 + }, + + { + 69, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, 1077, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871 + }, + + { + 69, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, 1078, -872, -872, -872, -872, -872, -872, -872, + + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872 + }, + + { + 69, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, 1079, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, 1080, 1080, + 1080, 1080, 1080, 1080, 1080, 1080, 1080, 1080, -873, -873, + -873, -873, -873, -873, -873, 1079, 1079, 1079, 1079, 1079, + 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, + 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, 1079, + 1079, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873 + }, + + { + 69, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874 + }, + + { + 69, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875 + }, + + { + 69, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876 + }, + + { + 69, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877 + }, + + { + 69, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878 + }, + + { + 69, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879 + + }, + + { + 69, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, 1081, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880 + }, + + { + 69, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, 1082, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881 + }, + + { + 69, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, 1083, -882, -882, -882, -882, -882, -882, -882, + + -882, -882, -882, -882, -882, -882, -882, -882, 1084, 1084, + 1084, 1084, 1084, 1084, 1084, 1084, 1084, 1084, -882, -882, + -882, -882, -882, -882, -882, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, 1083, + 1083, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882 + }, + + { + 69, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, 1085, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883 + }, + + { + 69, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, 1086, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, 1087, 1087, + 1087, 1087, 1087, 1087, 1087, 1087, 1087, 1087, -884, -884, + -884, -884, -884, -884, -884, 1086, 1086, 1086, 1086, 1086, + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + + 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, 1086, + 1086, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884 + }, + + { + 69, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, 1088, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, 1089, 1089, + + 1089, 1089, 1089, 1089, 1089, 1089, 1089, 1089, -885, -885, + -885, -885, -885, -885, -885, 1088, 1088, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, + 1088, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885 + }, + + { + 69, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, 1090, 1090, + 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886 + }, + + { + 69, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, 1091, 1091, + 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887 + }, + + { + 69, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, 1092, 1092, + 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, -888, -888, + + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888 + }, + + { + 69, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + + -889, -889, 1093, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, 1094, 1094, + 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, -889, -889, + -889, -889, -889, -889, -889, 1093, 1093, 1093, 1093, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, + 1093, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889 + + }, + + { + 69, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, 1095, 1095, + 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890 + }, + + { + 69, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, 1096, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, 1097, 1097, + 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, -891, -891, + -891, -891, -891, -891, -891, 1096, 1096, 1096, 1096, 1096, + + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891 + }, + + { + 69, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, 1096, -892, -892, -892, -892, -892, -892, -892, + + -892, -892, -892, -892, -892, -892, -892, -892, 1098, 1098, + 1098, 1098, 1098, 1098, 1098, 1098, 1098, 1098, -892, -892, + -892, -892, -892, -892, -892, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, + 1096, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892 + }, + + { + 69, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, 1099, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893 + }, + + { + 69, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, 1100, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, -894, -894, + -894, -894, -894, -894, -894, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894 + }, + + { + 69, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, 1102, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, 1103, 1103, + + 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, -895, -895, + -895, -895, -895, -895, -895, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895 + }, + + { + 69, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, 1102, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, 1104, 1104, + 1104, 1104, 1104, 1104, 1104, 1104, 1104, 1104, -896, -896, + -896, -896, -896, -896, -896, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896 + }, + + { + 69, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, 1105, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897 + }, + + { + 69, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, 1106, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, 1107, 1107, + 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, -898, -898, + + -898, -898, -898, -898, -898, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898 + }, + + { + 69, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + + -899, -899, 1106, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, 1108, 1108, + 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, -899, -899, + -899, -899, -899, -899, -899, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, 1106, + 1106, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899 + + }, + + { + 69, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, 1109, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, -900, -900, + -900, -900, -900, -900, -900, 1109, 1109, 1109, 1109, 1109, + 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, + 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, 1109, + 1109, -900, -900, -900, -900, -900, -900, -900, -900, -900, + + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900 + }, + + { + 69, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, 1110, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901 + }, + + { + 69, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, 1111, -902, -902, -902, -902, -902, -902, -902, + + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902 + }, + + { + 69, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, 1112, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, -903, -903, + -903, -903, -903, -903, -903, 1112, 1112, 1112, 1112, 1112, + 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, + 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, 1112, + 1112, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903 + }, + + { + 69, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, 1114, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904 + }, + + { + 69, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, 1115, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, 1116, 1116, + + 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, -905, -905, + -905, -905, -905, -905, -905, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905 + }, + + { + 69, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, 1115, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, 1117, 1117, + 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, -906, -906, + -906, -906, -906, -906, -906, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115, + 1115, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906 + }, + + { + 69, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, 1118, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, 1101, 1101, + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101, -907, -907, + -907, -907, -907, -907, -907, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118, + + 1118, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907 + }, + + { + 69, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, 1119, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908 + }, + + { + 69, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + + -909, -909, 1120, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909 + + }, + + { + 69, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, 1121, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, 1122, 1122, + 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, -910, -910, + -910, -910, -910, -910, -910, 1121, 1121, 1121, 1121, 1121, + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, -910, -910, -910, -910, -910, -910, -910, -910, -910, + + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910 + }, + + { + 69, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, 1121, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, -911, -911, + -911, -911, -911, -911, -911, 1121, 1121, 1121, 1121, 1121, + + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, + 1121, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911 + }, + + { + 69, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, 1124, -912, -912, -912, -912, -912, -912, -912, + + -912, -912, -912, -912, -912, -912, -912, -912, 1113, 1113, + 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, -912, -912, + -912, -912, -912, -912, -912, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, + 1124, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912 + }, + + { + 69, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, 1125, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913 + }, + + { + 69, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, 1126, 1126, + 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914 + }, + + { + 69, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, 1127, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915 + }, + + { + 69, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, 1127, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, 1128, 1128, + 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, -916, -916, + -916, -916, -916, -916, -916, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1127, + 1127, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916 + }, + + { + 69, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, 1129, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917 + }, + + { + 69, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, 1130, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, 1131, 1131, + 1131, 1131, 1131, 1131, 1131, 1131, 1131, 1131, -918, -918, + + -918, -918, -918, -918, -918, 1130, 1130, 1130, 1130, 1130, + 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130, + 1130, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918 + }, + + { + 69, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + + -919, -919, 1132, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919 + + }, + + { + 69, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, 1133, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920 + }, + + { + 69, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, 1134, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, 1135, 1135, + 1135, 1135, 1135, 1135, 1135, 1135, 1135, 1135, -921, -921, + -921, -921, -921, -921, -921, 1134, 1134, 1134, 1134, 1134, + + 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, + 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, 1134, + 1134, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921 + }, + + { + 69, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922 + }, + + { + 69, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923 + }, + + { + 69, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924 + }, + + { + 69, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925 + }, + + { + 69, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926 + }, + + { + 69, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927 + }, + + { + 69, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, 1136, 1136, + 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, -928, -928, + + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928 + }, + + { + 69, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + + -929, -929, 1137, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929 + + }, + + { + 69, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, 1137, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, 1138, 1138, + 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, -930, -930, + -930, -930, -930, -930, -930, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, + 1137, -930, -930, -930, -930, -930, -930, -930, -930, -930, + + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930 + }, + + { + 69, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, 1139, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931 + }, + + { + 69, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, 1140, -932, -932, -932, -932, -932, -932, -932, + + -932, -932, -932, -932, -932, -932, -932, -932, 1141, 1141, + 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, -932, -932, + -932, -932, -932, -932, -932, 1140, 1140, 1140, 1140, 1140, + 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, + 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, + 1140, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932 + }, + + { + 69, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, 1142, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933 + }, + + { + 69, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, 1143, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934 + }, + + { + 69, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, 1144, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, 1145, 1145, + + 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, -935, -935, + -935, -935, -935, -935, -935, 1144, 1144, 1144, 1144, 1144, + 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, + 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, + 1144, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935 + }, + + { + 69, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936 + }, + + { + 69, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937 + }, + + { + 69, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938 + }, + + { + 69, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939 + + }, + + { + 69, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940 + }, + + { + 69, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 943, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 945, 942, 942, + + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942 + }, + + { + 69, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, 1146, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946 + }, + + { + 69, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, 1147, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947 + }, + + { + 69, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, 1148, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948 + }, + + { + 69, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, 1149, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949 + + }, + + { + 69, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, 1150, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950 + }, + + { + 69, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, 1151, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951 + }, + + { + 69, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, 1152, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952 + }, + + { + 69, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, 1153, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953 + }, + + { + 69, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + + -954, -954, -954, -954, -954, 1154, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954 + }, + + { + 69, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, 1155, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955 + }, + + { + 69, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, 1156, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956 + }, + + { + 69, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, 1157, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957 + }, + + { + 69, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + + -958, -958, -958, -958, -958, -958, 1158, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958 + }, + + { + 69, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, 1159, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959 + + }, + + { + 69, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + 1160, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960 + }, + + { + 69, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, 1161, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961 + }, + + { + 69, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, 1162, -962, -962, -962, -962, -962, -962, -962, + + -962, -962, -962, -962, -962, -962, -962, -962, 1163, 1163, + 1163, 1163, 1163, 1163, 1163, 1163, 1163, 1163, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962 + }, + + { + 69, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, 1164, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963 + }, + + { + 69, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, 1165, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964 + }, + + { + 69, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, 1166, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965 + }, + + { + 69, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, 1167, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966 + }, + + { + 69, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, 1168, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967 + }, + + { + 69, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + + -968, -968, -968, -968, -968, -968, 1169, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968 + }, + + { + 69, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + + -969, -969, 1170, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + 1171, -969, -969, 1172, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969 + + }, + + { + 69, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, 1173, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970 + }, + + { + 69, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, 1174, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971 + }, + + { + 69, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, 1175, -972, -972, -972, -972, -972, -972, -972, + + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972 + }, + + { + 69, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, 1176, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973 + }, + + { + 69, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, 1177, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974 + }, + + { + 69, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, 1178, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975 + }, + + { + 69, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, 1179, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976 + }, + + { + 69, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, 1180, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977 + }, + + { + 69, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + + -978, -978, -978, -978, -978, -978, -978, -978, 1181, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978 + }, + + { + 69, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, 1182, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979 + + }, + + { + 69, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + 1183, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980 + }, + + { + 69, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, 1184, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + + 1185, -981, -981, 1186, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981 + }, + + { + 69, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, 1187, -982, -982, -982, -982, -982, -982, -982, + + -982, -982, -982, -982, -982, -982, -982, -982, 1188, 1188, + 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982 + }, + + { + 69, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, 1189, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983 + }, + + { + 69, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, 1190, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 1191, 1191, + 1191, 1191, 1191, 1191, 1191, 1191, 1191, 1191, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984 + }, + + { + 69, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, 1192, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, 1193, 1193, + + 1193, 1193, 1193, 1193, 1193, 1193, 1193, 1193, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985 + }, + + { + 69, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, 1194, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986 + }, + + { + 69, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, 1195, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987 + }, + + { + 69, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, 1196, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988 + }, + + { + 69, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, 1197, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989 + + }, + + { + 69, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, 1198, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, 1199, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990 + }, + + { + 69, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, 1200, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991 + }, + + { + 69, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, 1201, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992 + }, + + { + 69, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, 1202, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993 + }, + + { + 69, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + + -994, -994, -994, 1203, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994 + }, + + { + 69, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, 1204, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995 + }, + + { + 69, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, 1205, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996 + }, + + { + 69, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, 1206, -997, -997, -997, -997, -997, -997, + + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997 + }, + + { + 69, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, 1207, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998 + }, + + { + 69, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + 1208, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999 + + }, + + { + 69,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 1209,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000 + }, + + { + 69,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001, 1210,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001 + }, + + { + 69,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002, 1211,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002 + }, + + { + 69,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003, 1212,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003 + }, + + { + 69,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + + -1004,-1004, 1213,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004 + }, + + { + 69,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005, 1214,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005 + }, + + { + 69,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006, 1215,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006 + }, + + { + 69,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007, 1216,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007 + }, + + { + 69,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008, 1217,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008 + }, + + { + 69,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009, 1218,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009 + + }, + + { + 69,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010, 1219,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010 + }, + + { + 69,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011, 1220,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011, 1220, 1220, 1220, 1220, 1220, + + 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, + 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, 1220, + 1220,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011 + }, + + { + 69,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012, 1221,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012 + }, + + { + 69,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013, 1222,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, 1223, 1223, + 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,-1013,-1013, + -1013,-1013,-1013,-1013,-1013, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, 1222, + 1222,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013 + }, + + { + 69,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, 1224, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014 + }, + + { + 69,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015, 1225,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015 + }, + + { + 69,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016, 1226,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, 1227, 1227, + 1227, 1227, 1227, 1227, 1227, 1227, 1227, 1227,-1016,-1016, + -1016,-1016,-1016,-1016,-1016, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, 1226, + 1226,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016 + }, + + { + 69,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017, 1228,-1017,-1017,-1017,-1017,-1017,-1017, + + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017 + }, + + { + 69,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, 1229, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018 + }, + + { + 69,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + + -1019,-1019, 1230,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019 + + }, + + { + 69,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020, 1231,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, 1232, 1232, + 1232, 1232, 1232, 1232, 1232, 1232, 1232, 1232,-1020,-1020, + -1020,-1020,-1020,-1020,-1020, 1231, 1231, 1231, 1231, 1231, + 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, + 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, + 1231,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020 + }, + + { + 69,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021, 1233,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021 + }, + + { + 69,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022, 1234,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, 1235, 1235, + 1235, 1235, 1235, 1235, 1235, 1235, 1235, 1235,-1022,-1022, + -1022,-1022,-1022,-1022,-1022, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, 1234, + 1234,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022 + }, + + { + 69,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, 1236, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023 + }, + + { + 69,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, 1237, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024 + }, + + { + 69,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025 + }, + + { + 69,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026 + }, + + { + 69,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027 + }, + + { + 69,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028 + }, + + { + 69,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029 + + }, + + { + 69,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030 + }, + + { + 69,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031 + }, + + { + 69,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032 + }, + + { + 69,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033 + }, + + { + 69,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034 + }, + + { + 69,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035 + }, + + { + 69,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036 + }, + + { + 69,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037 + }, + + { + 69,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038 + }, + + { + 69,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039 + + }, + + { + 69,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040 + }, + + { + 69,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041 + }, + + { + 69,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042 + }, + + { + 69,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043 + }, + + { + 69,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044 + }, + + { + 69,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045 + }, + + { + 69,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046 + }, + + { + 69,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047 + }, + + { + 69,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048 + }, + + { + 69,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049 + + }, + + { + 69,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050 + }, + + { + 69,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051 + }, + + { + 69,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052 + }, + + { + 69,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053 + }, + + { + 69,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054 + }, + + { + 69,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055 + }, + + { + 69,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056 + }, + + { + 69,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057 + }, + + { + 69,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058 + }, + + { + 69,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059 + + }, + + { + 69,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060 + }, + + { + 69,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061 + }, + + { + 69,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062 + }, + + { + 69,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063 + }, + + { + 69,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064 + }, + + { + 69,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065 + }, + + { + 69,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066 + }, + + { + 69,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067 + }, + + { + 69,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068 + }, + + { + 69,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069 + + }, + + { + 69,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070 + }, + + { + 69,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071 + }, + + { + 69,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072 + }, + + { + 69,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073 + }, + + { + 69,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074 + }, + + { + 69,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075 + }, + + { + 69,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076 + }, + + { + 69,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077 + }, + + { + 69,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078 + }, + + { + 69,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079 + + }, + + { + 69,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080 + }, + + { + 69,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081 + }, + + { + 69,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082 + }, + + { + 69,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083 + }, + + { + 69,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084 + }, + + { + 69,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085 + }, + + { + 69,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086 + }, + + { + 69,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087 + }, + + { + 69,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088 + }, + + { + 69,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089 + + }, + + { + 69,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090 + }, + + { + 69,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091 + }, + + { + 69,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092 + }, + + { + 69,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093 + }, + + { + 69,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094 + }, + + { + 69,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095 + }, + + { + 69,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096 + }, + + { + 69,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097 + }, + + { + 69,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098 + }, + + { + 69,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099 + + }, + + { + 69,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100 + }, + + { + 69,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101 + }, + + { + 69,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102 + }, + + { + 69,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103 + }, + + { + 69,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104 + }, + + { + 69,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105 + }, + + { + 69,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106 + }, + + { + 69,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107 + }, + + { + 69,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108 + }, + + { + 69,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109 + + }, + + { + 69,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110 + }, + + { + 69,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111 + }, + + { + 69,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112 + }, + + { + 69,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113 + }, + + { + 69,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114 + }, + + { + 69,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115 + }, + + { + 69,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116 + }, + + { + 69,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117 + }, + + { + 69,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118 + }, + + { + 69,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119 + + }, + + { + 69,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120 + }, + + { + 69,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121, + -1121,-1121,-1121,-1121,-1121,-1121,-1121,-1121 + }, + + { + 69,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122 + }, + + { + 69,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123, + -1123,-1123,-1123,-1123,-1123,-1123,-1123,-1123 + }, + + { + 69,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124 + }, + + { + 69,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125 + }, + + { + 69,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126 + }, + + { + 69,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127 + }, + + { + 69,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128 + }, + + { + 69,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129 + + }, + + { + 69,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130 + }, + + { + 69,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131 + }, + + { + 69,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132 + }, + + { + 69,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133 + }, + + { + 69,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134 + }, + + { + 69,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135 + }, + + { + 69,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136 + }, + + { + 69,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137 + }, + + { + 69,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138 + }, + + { + 69,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139 + + }, + + { + 69,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140 + }, + + { + 69,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141 + }, + + { + 69,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142 + }, + + { + 69,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143 + }, + + { + 69,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144 + }, + + { + 69,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145 + }, + + { + 69,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146, 1238,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146 + }, + + { + 69,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147, 1239,-1147,-1147,-1147,-1147,-1147,-1147, + + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147 + }, + + { + 69,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148, 1240,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148 + }, + + { + 69,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149, 1241,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149 + + }, + + { + 69,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150, 1242,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150 + }, + + { + 69,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151, 1243,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151 + }, + + { + 69,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152, 1244,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152 + }, + + { + 69,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153, 1245,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153 + }, + + { + 69,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + + -1154,-1154,-1154, 1246,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154 + }, + + { + 69,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155, 1247,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155 + }, + + { + 69,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156, 1248,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156 + }, + + { + 69,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, 1249,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157 + }, + + { + 69,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158, 1250,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158 + }, + + { + 69,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + 1251,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159 + + }, + + { + 69,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160, 1252,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160 + }, + + { + 69,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161, 1253,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161 + }, + + { + 69,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162, 1254,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162 + }, + + { + 69,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163, 1255,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163 + }, + + { + 69,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + + -1164,-1164,-1164, 1256,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164 + }, + + { + 69,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165, 1257,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165 + }, + + { + 69,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166, 1258,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166 + }, + + { + 69,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167 + }, + + { + 69,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168, 1259,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168 + }, + + { + 69,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169, 1260,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169 + + }, + + { + 69,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170, 1261,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170 + }, + + { + 69,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171 + }, + + { + 69,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172 + }, + + { + 69,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173, 1262,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173 + }, + + { + 69,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174, 1263,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174 + }, + + { + 69,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175, 1264,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175 + }, + + { + 69,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176, 1265,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176 + }, + + { + 69,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177 + }, + + { + 69,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178 + }, + + { + 69,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + + -1179,-1179, 1266,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179 + + }, + + { + 69,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180, 1267,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180 + }, + + { + 69,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181, 1268,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181 + }, + + { + 69,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182, 1269,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182 + }, + + { + 69,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183, 1270,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + 1271,-1183,-1183, 1272,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183 + }, + + { + 69,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184, 1273,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184 + }, + + { + 69,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185, 1274,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185 + }, + + { + 69,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186, 1275,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186 + }, + + { + 69,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187, 1276,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187 + }, + + { + 69,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188, 1277,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, 1278, 1278, + 1278, 1278, 1278, 1278, 1278, 1278, 1278, 1278,-1188,-1188, + + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188 + }, + + { + 69,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189, 1279,-1189,-1189,-1189, + -1189,-1189, 1280,-1189,-1189,-1189, 1281,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, 1282, 1283, + 1284,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189 + + }, + + { + 69,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190, 1285,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190 + }, + + { + 69,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191, 1286,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, 1287, 1287, + 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191, + -1191,-1191,-1191,-1191,-1191,-1191,-1191,-1191 + }, + + { + 69,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192, 1288,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192, + -1192,-1192,-1192,-1192,-1192,-1192,-1192,-1192 + }, + + { + 69,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193, 1289,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, 1290, 1290, + 1290, 1290, 1290, 1290, 1290, 1290, 1290, 1290,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193, + -1193,-1193,-1193,-1193,-1193,-1193,-1193,-1193 + }, + + { + 69,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + + -1194,-1194,-1194,-1194, 1291,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194, + -1194,-1194,-1194,-1194,-1194,-1194,-1194,-1194 + }, + + { + 69,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195, 1292,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195, + -1195,-1195,-1195,-1195,-1195,-1195,-1195,-1195 + }, + + { + 69,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196, 1293,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196, + + -1196,-1196,-1196,-1196,-1196,-1196,-1196,-1196 + }, + + { + 69,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197, + -1197,-1197,-1197,-1197,-1197,-1197,-1197,-1197 + }, + + { + 69,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198, 1294,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198, + -1198,-1198,-1198,-1198,-1198,-1198,-1198,-1198 + }, + + { + 69,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199, + -1199,-1199,-1199,-1199,-1199,-1199,-1199,-1199 + + }, + + { + 69,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200, + -1200,-1200,-1200,-1200,-1200,-1200,-1200,-1200 + }, + + { + 69,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + + 1295,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201, + -1201,-1201,-1201,-1201,-1201,-1201,-1201,-1201 + }, + + { + 69,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202, + -1202,-1202,-1202,-1202,-1202,-1202,-1202,-1202 + }, + + { + 69,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203, + -1203,-1203,-1203,-1203,-1203,-1203,-1203,-1203 + }, + + { + 69,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204, + -1204,-1204,-1204,-1204,-1204,-1204,-1204,-1204 + }, + + { + 69,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205, 1296,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205, + -1205,-1205,-1205,-1205,-1205,-1205,-1205,-1205 + }, + + { + 69,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206, 1297,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206, + + -1206,-1206,-1206,-1206,-1206,-1206,-1206,-1206 + }, + + { + 69,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207, 1298,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207, + -1207,-1207,-1207,-1207,-1207,-1207,-1207,-1207 + }, + + { + 69,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208, 1299,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208, + -1208,-1208,-1208,-1208,-1208,-1208,-1208,-1208 + }, + + { + 69,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209, 1300,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209, + -1209,-1209,-1209,-1209,-1209,-1209,-1209,-1209 + + }, + + { + 69,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210, 1301,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210, + -1210,-1210,-1210,-1210,-1210,-1210,-1210,-1210 + }, + + { + 69,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211, 1302,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211, + -1211,-1211,-1211,-1211,-1211,-1211,-1211,-1211 + }, + + { + 69,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212, 1303,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212, + -1212,-1212,-1212,-1212,-1212,-1212,-1212,-1212 + }, + + { + 69,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213, 1304,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213, + -1213,-1213,-1213,-1213,-1213,-1213,-1213,-1213 + }, + + { + 69,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214, 1305,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214, + -1214,-1214,-1214,-1214,-1214,-1214,-1214,-1214 + }, + + { + 69,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215, 1306,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215, + -1215,-1215,-1215,-1215,-1215,-1215,-1215,-1215 + }, + + { + 69,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216, 1307,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216, + + -1216,-1216,-1216,-1216,-1216,-1216,-1216,-1216 + }, + + { + 69,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217, 1308,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217, + -1217,-1217,-1217,-1217,-1217,-1217,-1217,-1217 + }, + + { + 69,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218, + -1218,-1218,-1218,-1218,-1218,-1218,-1218,-1218 + }, + + { + 69,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219, + -1219,-1219,-1219,-1219,-1219,-1219,-1219,-1219 + + }, + + { + 69,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220, 1309,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220, + -1220,-1220,-1220,-1220,-1220,-1220,-1220,-1220 + }, + + { + 69,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221, 1310,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221, + -1221,-1221,-1221,-1221,-1221,-1221,-1221,-1221 + }, + + { + 69,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222, 1311,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222, + -1222,-1222,-1222,-1222,-1222,-1222,-1222,-1222 + }, + + { + 69,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223, 1312,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223, 1312, 1312, 1312, 1312, 1312, + 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, + 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, + 1312,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223, + -1223,-1223,-1223,-1223,-1223,-1223,-1223,-1223 + }, + + { + 69,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224, 1313,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224, 1313, 1313, 1313, 1313, 1313, + 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, + + 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, 1313, + 1313,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224, + -1224,-1224,-1224,-1224,-1224,-1224,-1224,-1224 + }, + + { + 69,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225, 1314,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225, + -1225,-1225,-1225,-1225,-1225,-1225,-1225,-1225 + }, + + { + 69,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226, 1315,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226, + + -1226,-1226,-1226,-1226,-1226,-1226,-1226,-1226 + }, + + { + 69,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227, 1316,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227, 1316, 1316, 1316, 1316, 1316, + 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, + 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, + + 1316,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227, + -1227,-1227,-1227,-1227,-1227,-1227,-1227,-1227 + }, + + { + 69,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228, 1317,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + + -1228,-1228,-1228,-1228,-1228, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, 1317, + 1317,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228, + -1228,-1228,-1228,-1228,-1228,-1228,-1228,-1228 + }, + + { + 69,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229, + -1229,-1229,-1229,-1229,-1229,-1229,-1229,-1229 + + }, + + { + 69,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230, 1318,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230, + -1230,-1230,-1230,-1230,-1230,-1230,-1230,-1230 + }, + + { + 69,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231, 1319,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231, + -1231,-1231,-1231,-1231,-1231,-1231,-1231,-1231 + }, + + { + 69,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232, 1320,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232, 1320, 1320, 1320, 1320, 1320, + 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, + 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, 1320, + 1320,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232, + -1232,-1232,-1232,-1232,-1232,-1232,-1232,-1232 + }, + + { + 69,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233, 1321,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233, + -1233,-1233,-1233,-1233,-1233,-1233,-1233,-1233 + }, + + { + 69,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234, 1322,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234, + -1234,-1234,-1234,-1234,-1234,-1234,-1234,-1234 + }, + + { + 69,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235, 1323,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235, 1323, 1323, 1323, 1323, 1323, + 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, + 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, 1323, + 1323,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235, + -1235,-1235,-1235,-1235,-1235,-1235,-1235,-1235 + }, + + { + 69,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236, 1324,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236, + + -1236,-1236,-1236,-1236,-1236,-1236,-1236,-1236 + }, + + { + 69,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237, + -1237,-1237,-1237,-1237,-1237,-1237,-1237,-1237 + }, + + { + 69,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238, + -1238,-1238,-1238,-1238,-1238,-1238,-1238,-1238 + }, + + { + 69,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239, + -1239,-1239,-1239,-1239,-1239,-1239,-1239,-1239 + + }, + + { + 69,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240, + -1240,-1240,-1240,-1240,-1240,-1240,-1240,-1240 + }, + + { + 69,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241, + -1241,-1241,-1241,-1241,-1241,-1241,-1241,-1241 + }, + + { + 69,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242, + -1242,-1242,-1242,-1242,-1242,-1242,-1242,-1242 + }, + + { + 69,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243, + -1243,-1243,-1243,-1243,-1243,-1243,-1243,-1243 + }, + + { + 69,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244, + -1244,-1244,-1244,-1244,-1244,-1244,-1244,-1244 + }, + + { + 69,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245, + -1245,-1245,-1245,-1245,-1245,-1245,-1245,-1245 + }, + + { + 69,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246, + + -1246,-1246,-1246,-1246,-1246,-1246,-1246,-1246 + }, + + { + 69,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247, + -1247,-1247,-1247,-1247,-1247,-1247,-1247,-1247 + }, + + { + 69,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248, + -1248,-1248,-1248,-1248,-1248,-1248,-1248,-1248 + }, + + { + 69,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249, + -1249,-1249,-1249,-1249,-1249,-1249,-1249,-1249 + + }, + + { + 69,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250, + -1250,-1250,-1250,-1250,-1250,-1250,-1250,-1250 + }, + + { + 69,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251, + -1251,-1251,-1251,-1251,-1251,-1251,-1251,-1251 + }, + + { + 69,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252, + -1252,-1252,-1252,-1252,-1252,-1252,-1252,-1252 + }, + + { + 69,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253, + -1253,-1253,-1253,-1253,-1253,-1253,-1253,-1253 + }, + + { + 69,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254, + -1254,-1254,-1254,-1254,-1254,-1254,-1254,-1254 + }, + + { + 69,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255, + -1255,-1255,-1255,-1255,-1255,-1255,-1255,-1255 + }, + + { + 69,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256, + + -1256,-1256,-1256,-1256,-1256,-1256,-1256,-1256 + }, + + { + 69,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257, 1325,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257, + -1257,-1257,-1257,-1257,-1257,-1257,-1257,-1257 + }, + + { + 69,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258, + -1258,-1258,-1258,-1258,-1258,-1258,-1258,-1258 + }, + + { + 69,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259, + -1259,-1259,-1259,-1259,-1259,-1259,-1259,-1259 + + }, + + { + 69,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260, + -1260,-1260,-1260,-1260,-1260,-1260,-1260,-1260 + }, + + { + 69,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261, + -1261,-1261,-1261,-1261,-1261,-1261,-1261,-1261 + }, + + { + 69,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262, + -1262,-1262,-1262,-1262,-1262,-1262,-1262,-1262 + }, + + { + 69,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263, + -1263,-1263,-1263,-1263,-1263,-1263,-1263,-1263 + }, + + { + 69,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264, + -1264,-1264,-1264,-1264,-1264,-1264,-1264,-1264 + }, + + { + 69,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265, + -1265,-1265,-1265,-1265,-1265,-1265,-1265,-1265 + }, + + { + 69,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266, + + -1266,-1266,-1266,-1266,-1266,-1266,-1266,-1266 + }, + + { + 69,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267, + -1267,-1267,-1267,-1267,-1267,-1267,-1267,-1267 + }, + + { + 69,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268, + -1268,-1268,-1268,-1268,-1268,-1268,-1268,-1268 + }, + + { + 69,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269, + -1269,-1269,-1269,-1269,-1269,-1269,-1269,-1269 + + }, + + { + 69,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270, + -1270,-1270,-1270,-1270,-1270,-1270,-1270,-1270 + }, + + { + 69,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271, + -1271,-1271,-1271,-1271,-1271,-1271,-1271,-1271 + }, + + { + 69,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272, + -1272,-1272,-1272,-1272,-1272,-1272,-1272,-1272 + }, + + { + 69,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273, + -1273,-1273,-1273,-1273,-1273,-1273,-1273,-1273 + }, + + { + 69,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274, + -1274,-1274,-1274,-1274,-1274,-1274,-1274,-1274 + }, + + { + 69,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275, + -1275,-1275,-1275,-1275,-1275,-1275,-1275,-1275 + }, + + { + 69,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276, + + -1276,-1276,-1276,-1276,-1276,-1276,-1276,-1276 + }, + + { + 69,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277, + -1277,-1277,-1277,-1277,-1277,-1277,-1277,-1277 + }, + + { + 69,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278, + -1278,-1278,-1278,-1278,-1278,-1278,-1278,-1278 + }, + + { + 69,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279, + -1279,-1279,-1279,-1279,-1279,-1279,-1279,-1279 + + }, + + { + 69,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280, + -1280,-1280,-1280,-1280,-1280,-1280,-1280,-1280 + }, + + { + 69,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281, + -1281,-1281,-1281,-1281,-1281,-1281,-1281,-1281 + }, + + { + 69,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282, + -1282,-1282,-1282,-1282,-1282,-1282,-1282,-1282 + }, + + { + 69,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283, + -1283,-1283,-1283,-1283,-1283,-1283,-1283,-1283 + }, + + { + 69,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284, + -1284,-1284,-1284,-1284,-1284,-1284,-1284,-1284 + }, + + { + 69,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285, + -1285,-1285,-1285,-1285,-1285,-1285,-1285,-1285 + }, + + { + 69,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286, + + -1286,-1286,-1286,-1286,-1286,-1286,-1286,-1286 + }, + + { + 69,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287, + -1287,-1287,-1287,-1287,-1287,-1287,-1287,-1287 + }, + + { + 69,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288, + -1288,-1288,-1288,-1288,-1288,-1288,-1288,-1288 + }, + + { + 69,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289, + -1289,-1289,-1289,-1289,-1289,-1289,-1289,-1289 + + }, + + { + 69,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290, + -1290,-1290,-1290,-1290,-1290,-1290,-1290,-1290 + }, + + { + 69,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291, + -1291,-1291,-1291,-1291,-1291,-1291,-1291,-1291 + }, + + { + 69,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292, + -1292,-1292,-1292,-1292,-1292,-1292,-1292,-1292 + }, + + { + 69,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293, + -1293,-1293,-1293,-1293,-1293,-1293,-1293,-1293 + }, + + { + 69,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294, + -1294,-1294,-1294,-1294,-1294,-1294,-1294,-1294 + }, + + { + 69,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295, + -1295,-1295,-1295,-1295,-1295,-1295,-1295,-1295 + }, + + { + 69,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296, + + -1296,-1296,-1296,-1296,-1296,-1296,-1296,-1296 + }, + + { + 69,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297, 1326,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297, + -1297,-1297,-1297,-1297,-1297,-1297,-1297,-1297 + }, + + { + 69,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298, + -1298,-1298,-1298,-1298,-1298,-1298,-1298,-1298 + }, + + { + 69,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299, + -1299,-1299,-1299,-1299,-1299,-1299,-1299,-1299 + + }, + + { + 69,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300, + -1300,-1300,-1300,-1300,-1300,-1300,-1300,-1300 + }, + + { + 69,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301, + -1301,-1301,-1301,-1301,-1301,-1301,-1301,-1301 + }, + + { + 69,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302, + -1302,-1302,-1302,-1302,-1302,-1302,-1302,-1302 + }, + + { + 69,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303, + -1303,-1303,-1303,-1303,-1303,-1303,-1303,-1303 + }, + + { + 69,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304, + -1304,-1304,-1304,-1304,-1304,-1304,-1304,-1304 + }, + + { + 69,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305, + -1305,-1305,-1305,-1305,-1305,-1305,-1305,-1305 + }, + + { + 69,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306, + + -1306,-1306,-1306,-1306,-1306,-1306,-1306,-1306 + }, + + { + 69,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307, + -1307,-1307,-1307,-1307,-1307,-1307,-1307,-1307 + }, + + { + 69,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308, + -1308,-1308,-1308,-1308,-1308,-1308,-1308,-1308 + }, + + { + 69,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309, + -1309,-1309,-1309,-1309,-1309,-1309,-1309,-1309 + + }, + + { + 69,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310, + -1310,-1310,-1310,-1310,-1310,-1310,-1310,-1310 + }, + + { + 69,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311, + -1311,-1311,-1311,-1311,-1311,-1311,-1311,-1311 + }, + + { + 69,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312, + -1312,-1312,-1312,-1312,-1312,-1312,-1312,-1312 + }, + + { + 69,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313, + -1313,-1313,-1313,-1313,-1313,-1313,-1313,-1313 + }, + + { + 69,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314, 1327,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314, + -1314,-1314,-1314,-1314,-1314,-1314,-1314,-1314 + }, + + { + 69,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315, 1328,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315, + -1315,-1315,-1315,-1315,-1315,-1315,-1315,-1315 + }, + + { + 69,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316, 1329,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316, + + -1316,-1316,-1316,-1316,-1316,-1316,-1316,-1316 + }, + + { + 69,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317, 1330,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317, + -1317,-1317,-1317,-1317,-1317,-1317,-1317,-1317 + }, + + { + 69,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + + -1318, 1331,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318, + -1318,-1318,-1318,-1318,-1318,-1318,-1318,-1318 + }, + + { + 69,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319, 1332,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319, + -1319,-1319,-1319,-1319,-1319,-1319,-1319,-1319 + + }, + + { + 69,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320, 1333,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320, + -1320,-1320,-1320,-1320,-1320,-1320,-1320,-1320 + }, + + { + 69,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321, 1334,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321, + -1321,-1321,-1321,-1321,-1321,-1321,-1321,-1321 + }, + + { + 69,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322, 1335,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322, + -1322,-1322,-1322,-1322,-1322,-1322,-1322,-1322 + }, + + { + 69,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323, 1336,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323, + -1323,-1323,-1323,-1323,-1323,-1323,-1323,-1323 + }, + + { + 69,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324, + -1324,-1324,-1324,-1324,-1324,-1324,-1324,-1324 + }, + + { + 69,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325, 1337,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325, + -1325,-1325,-1325,-1325,-1325,-1325,-1325,-1325 + }, + + { + 69,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326, 1338,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326, + + -1326,-1326,-1326,-1326,-1326,-1326,-1326,-1326 + }, + + { + 69,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327, 1339,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327, + -1327,-1327,-1327,-1327,-1327,-1327,-1327,-1327 + }, + + { + 69,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328, 1340,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328, + -1328,-1328,-1328,-1328,-1328,-1328,-1328,-1328 + }, + + { + 69,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + + -1329,-1329, 1341,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329, + -1329,-1329,-1329,-1329,-1329,-1329,-1329,-1329 + + }, + + { + 69,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330, 1342,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330, + -1330,-1330,-1330,-1330,-1330,-1330,-1330,-1330 + }, + + { + 69,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331, 1343,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331, + -1331,-1331,-1331,-1331,-1331,-1331,-1331,-1331 + }, + + { + 69,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332, 1344,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332, + -1332,-1332,-1332,-1332,-1332,-1332,-1332,-1332 + }, + + { + 69,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333, 1345,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333, + -1333,-1333,-1333,-1333,-1333,-1333,-1333,-1333 + }, + + { + 69,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334, 1346,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334, + -1334,-1334,-1334,-1334,-1334,-1334,-1334,-1334 + }, + + { + 69,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335, 1347,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335, + -1335,-1335,-1335,-1335,-1335,-1335,-1335,-1335 + }, + + { + 69,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336, 1348,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336, + + -1336,-1336,-1336,-1336,-1336,-1336,-1336,-1336 + }, + + { + 69,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337, 1349,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337, + -1337,-1337,-1337,-1337,-1337,-1337,-1337,-1337 + }, + + { + 69,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338, 1350,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338, 1351,-1338, 1351,-1338,-1338, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1338,-1338, + + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338, + -1338,-1338,-1338,-1338,-1338,-1338,-1338,-1338 + }, + + { + 69,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + + -1339,-1339, 1353,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339, 1354,-1339, 1354,-1339,-1339, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339, + -1339,-1339,-1339,-1339,-1339,-1339,-1339,-1339 + + }, + + { + 69,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340, 1356,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340, 1357,-1340, 1357,-1340,-1340, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340, + -1340,-1340,-1340,-1340,-1340,-1340,-1340,-1340 + }, + + { + 69,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341, 1359,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341, 1360,-1341, 1360,-1341,-1341, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341, + -1341,-1341,-1341,-1341,-1341,-1341,-1341,-1341 + }, + + { + 69,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342, 1362,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + + -1342,-1342,-1342, 1363,-1342, 1363,-1342,-1342, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342, + -1342,-1342,-1342,-1342,-1342,-1342,-1342,-1342 + }, + + { + 69,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343, 1365,-1343,-1343,-1343,-1343,-1343,-1343, 1366, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343, + -1343,-1343,-1343,-1343,-1343,-1343,-1343,-1343 + }, + + { + 69,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344, 1367,-1344,-1344,-1344,-1344,-1344,-1344, 1368, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344, + -1344,-1344,-1344,-1344,-1344,-1344,-1344,-1344 + }, + + { + 69,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345, 1369,-1345,-1345,-1345,-1345,-1345,-1345, 1370, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345, + -1345,-1345,-1345,-1345,-1345,-1345,-1345,-1345 + }, + + { + 69,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346, 1371,-1346,-1346,-1346,-1346,-1346,-1346, 1372, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346, + + -1346,-1346,-1346,-1346,-1346,-1346,-1346,-1346 + }, + + { + 69,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347, 1373,-1347,-1347,-1347,-1347,-1347,-1347, 1374, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347, + -1347,-1347,-1347,-1347,-1347,-1347,-1347,-1347 + }, + + { + 69,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348, 1375,-1348,-1348,-1348,-1348,-1348,-1348, 1376, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348, + -1348,-1348,-1348,-1348,-1348,-1348,-1348,-1348 + }, + + { + 69,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + + -1349,-1349, 1377,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349, + -1349,-1349,-1349,-1349,-1349,-1349,-1349,-1349 + + }, + + { + 69,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350, 1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350, 1351,-1350, 1351,-1350,-1350, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350, + -1350,-1350,-1350,-1350,-1350,-1350,-1350,-1350 + }, + + { + 69,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351, + -1351,-1351,-1351,-1351,-1351,-1351,-1351,-1351 + }, + + { + 69,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, 1352, 1352, + 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352, + -1352,-1352,-1352,-1352,-1352,-1352,-1352,-1352 + }, + + { + 69,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353, 1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353, 1354,-1353, 1354,-1353,-1353, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353, + -1353,-1353,-1353,-1353,-1353,-1353,-1353,-1353 + }, + + { + 69,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, 1355, 1355, + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354, + -1354,-1354,-1354,-1354,-1354,-1354,-1354,-1354 + }, + + { + 69,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, 1355, 1355, + + 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355, + -1355,-1355,-1355,-1355,-1355,-1355,-1355,-1355 + }, + + { + 69,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356, 1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356, 1357,-1356, 1357,-1356,-1356, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356, + + -1356,-1356,-1356,-1356,-1356,-1356,-1356,-1356 + }, + + { + 69,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357, + -1357,-1357,-1357,-1357,-1357,-1357,-1357,-1357 + }, + + { + 69,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, 1358, 1358, + 1358, 1358, 1358, 1358, 1358, 1358, 1358, 1358,-1358,-1358, + + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358, + -1358,-1358,-1358,-1358,-1358,-1358,-1358,-1358 + }, + + { + 69,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + + -1359,-1359, 1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359, 1360,-1359, 1360,-1359,-1359, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359, + -1359,-1359,-1359,-1359,-1359,-1359,-1359,-1359 + + }, + + { + 69,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360, + -1360,-1360,-1360,-1360,-1360,-1360,-1360,-1360 + }, + + { + 69,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, 1361, 1361, + 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361, + -1361,-1361,-1361,-1361,-1361,-1361,-1361,-1361 + }, + + { + 69,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362, 1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + + -1362,-1362,-1362, 1363,-1362, 1363,-1362,-1362, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362, + -1362,-1362,-1362,-1362,-1362,-1362,-1362,-1362 + }, + + { + 69,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363, + -1363,-1363,-1363,-1363,-1363,-1363,-1363,-1363 + }, + + { + 69,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, 1364, 1364, + 1364, 1364, 1364, 1364, 1364, 1364, 1364, 1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364, + -1364,-1364,-1364,-1364,-1364,-1364,-1364,-1364 + }, + + { + 69,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365, 1365,-1365,-1365,-1365,-1365,-1365,-1365, 1366, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365, + -1365,-1365,-1365,-1365,-1365,-1365,-1365,-1365 + }, + + { + 69, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1379, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378 + }, + + { + 69,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367, 1367,-1367,-1367,-1367,-1367,-1367,-1367, 1368, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367, + -1367,-1367,-1367,-1367,-1367,-1367,-1367,-1367 + }, + + { + 69, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1381, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380 + }, + + { + 69,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + + -1369,-1369, 1369,-1369,-1369,-1369,-1369,-1369,-1369, 1370, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369, + -1369,-1369,-1369,-1369,-1369,-1369,-1369,-1369 + + }, + + { + 69, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1383, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382 + }, + + { + 69,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371, 1371,-1371,-1371,-1371,-1371,-1371,-1371, 1372, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371, + -1371,-1371,-1371,-1371,-1371,-1371,-1371,-1371 + }, + + { + 69, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1385, + + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384 + }, + + { + 69,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373, 1373,-1373,-1373,-1373,-1373,-1373,-1373, 1374, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373, + -1373,-1373,-1373,-1373,-1373,-1373,-1373,-1373 + }, + + { + 69, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1387, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386 + }, + + { + 69,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375, 1375,-1375,-1375,-1375,-1375,-1375,-1375, 1376, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375, + -1375,-1375,-1375,-1375,-1375,-1375,-1375,-1375 + }, + + { + 69, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1389, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388 + }, + + { + 69,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377, 1390,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377, + -1377,-1377,-1377,-1377,-1377,-1377,-1377,-1377 + }, + + { + 69, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1379, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378, + 1378, 1378, 1378, 1378, 1378, 1378, 1378, 1378 + }, + + { + 69,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, 1378, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379, + -1379,-1379,-1379,-1379,-1379,-1379,-1379,-1379 + + }, + + { + 69, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1381, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380 + }, + + { + 69,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, 1380, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381, + -1381,-1381,-1381,-1381,-1381,-1381,-1381,-1381 + }, + + { + 69, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1383, + + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, + 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382 + }, + + { + 69,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, 1382, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383, + -1383,-1383,-1383,-1383,-1383,-1383,-1383,-1383 + }, + + { + 69, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1385, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384, + 1384, 1384, 1384, 1384, 1384, 1384, 1384, 1384 + }, + + { + 69,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, 1384, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385, + -1385,-1385,-1385,-1385,-1385,-1385,-1385,-1385 + }, + + { + 69, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1387, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386, + + 1386, 1386, 1386, 1386, 1386, 1386, 1386, 1386 + }, + + { + 69,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, 1386, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387, + -1387,-1387,-1387,-1387,-1387,-1387,-1387,-1387 + }, + + { + 69, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1389, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388, + 1388, 1388, 1388, 1388, 1388, 1388, 1388, 1388 + }, + + { + 69,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, 1388, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389, + -1389,-1389,-1389,-1389,-1389,-1389,-1389,-1389 + + }, + + { + 69,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390, 1391,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390, + -1390,-1390,-1390,-1390,-1390,-1390,-1390,-1390 + }, + + { + 69,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391, 1392,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391, + -1391,-1391,-1391,-1391,-1391,-1391,-1391,-1391 + }, + + { + 69,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392, 1393,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392, + -1392,-1392,-1392,-1392,-1392,-1392,-1392,-1392 + }, + + { + 69,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393, 1394,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393, + -1393,-1393,-1393,-1393,-1393,-1393,-1393,-1393 + }, + + { + 69,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394, 1395,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394, + -1394,-1394,-1394,-1394,-1394,-1394,-1394,-1394 + }, + + { + 69,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395, 1396,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395, + -1395,-1395,-1395,-1395,-1395,-1395,-1395,-1395 + }, + + { + 69,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396, 1397,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396, + + -1396,-1396,-1396,-1396,-1396,-1396,-1396,-1396 + }, + + { + 69,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397, 1398,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397, + -1397,-1397,-1397,-1397,-1397,-1397,-1397,-1397 + }, + + { + 69,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398, 1399,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398, + -1398,-1398,-1398,-1398,-1398,-1398,-1398,-1398 + }, + + { + 69,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + + -1399,-1399, 1400,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399, + -1399,-1399,-1399,-1399,-1399,-1399,-1399,-1399 + + }, + + { + 69,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400, 1401,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400, + -1400,-1400,-1400,-1400,-1400,-1400,-1400,-1400 + }, + + { + 69,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401, 1402,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401, + -1401,-1401,-1401,-1401,-1401,-1401,-1401,-1401 + }, + + { + 69,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402, 1403,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402, + -1402,-1402,-1402,-1402,-1402,-1402,-1402,-1402 + }, + + { + 69,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403, 1404,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403, + -1403,-1403,-1403,-1403,-1403,-1403,-1403,-1403 + }, + + { + 69,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404, 1405,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404, + -1404,-1404,-1404,-1404,-1404,-1404,-1404,-1404 + }, + + { + 69,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405, 1406,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405, + -1405,-1405,-1405,-1405,-1405,-1405,-1405,-1405 + }, + + { + 69,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406, 1407,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406, + + -1406,-1406,-1406,-1406,-1406,-1406,-1406,-1406 + }, + + { + 69,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407, 1408,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407, + -1407,-1407,-1407,-1407,-1407,-1407,-1407,-1407 + }, + + { + 69,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408, 1409,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408, + -1408,-1408,-1408,-1408,-1408,-1408,-1408,-1408 + }, + + { + 69,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + + -1409,-1409, 1410,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409, + -1409,-1409,-1409,-1409,-1409,-1409,-1409,-1409 + + }, + + { + 69,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410, 1411,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410, + -1410,-1410,-1410,-1410,-1410,-1410,-1410,-1410 + }, + + { + 69,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411, 1412,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411, + -1411,-1411,-1411,-1411,-1411,-1411,-1411,-1411 + }, + + { + 69,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412, 1413,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412, + -1412,-1412,-1412,-1412,-1412,-1412,-1412,-1412 + }, + + { + 69,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413, 1414,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413, + -1413,-1413,-1413,-1413,-1413,-1413,-1413,-1413 + }, + + { + 69,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414, 1415,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414, + -1414,-1414,-1414,-1414,-1414,-1414,-1414,-1414 + }, + + { + 69,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415, 1416,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415, + -1415,-1415,-1415,-1415,-1415,-1415,-1415,-1415 + }, + + { + 69,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416, 1417,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416, + + -1416,-1416,-1416,-1416,-1416,-1416,-1416,-1416 + }, + + { + 69,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417, 1418,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417, + -1417,-1417,-1417,-1417,-1417,-1417,-1417,-1417 + }, + + { + 69,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418, 1419,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418, + -1418,-1418,-1418,-1418,-1418,-1418,-1418,-1418 + }, + + { + 69,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + + -1419,-1419, 1420,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419, + -1419,-1419,-1419,-1419,-1419,-1419,-1419,-1419 + + }, + + { + 69,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420, 1421,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420, + -1420,-1420,-1420,-1420,-1420,-1420,-1420,-1420 + }, + + { + 69,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421, 1422,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421, + -1421,-1421,-1421,-1421,-1421,-1421,-1421,-1421 + }, + + { + 69,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422, 1423,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422, + -1422,-1422,-1422,-1422,-1422,-1422,-1422,-1422 + }, + + { + 69,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423, 1424,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423, + -1423,-1423,-1423,-1423,-1423,-1423,-1423,-1423 + }, + + { + 69,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424, 1425,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424, + -1424,-1424,-1424,-1424,-1424,-1424,-1424,-1424 + }, + + { + 69,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425, 1426,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425, + -1425,-1425,-1425,-1425,-1425,-1425,-1425,-1425 + }, + + { + 69,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426, 1427,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426, + + -1426,-1426,-1426,-1426,-1426,-1426,-1426,-1426 + }, + + { + 69,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427, 1428,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427, + -1427,-1427,-1427,-1427,-1427,-1427,-1427,-1427 + }, + + { + 69,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428, 1429,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428, + -1428,-1428,-1428,-1428,-1428,-1428,-1428,-1428 + }, + + { + 69,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + + -1429,-1429, 1430,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429, + -1429,-1429,-1429,-1429,-1429,-1429,-1429,-1429 + + }, + + { + 69,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430, 1431,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430, + -1430,-1430,-1430,-1430,-1430,-1430,-1430,-1430 + }, + + { + 69,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431, 1432,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431, + -1431,-1431,-1431,-1431,-1431,-1431,-1431,-1431 + }, + + { + 69,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432, 1433,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432, + -1432,-1432,-1432,-1432,-1432,-1432,-1432,-1432 + }, + + { + 69,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433, 1434,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433, + -1433,-1433,-1433,-1433,-1433,-1433,-1433,-1433 + }, + + { + 69,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434, 1435,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434, + -1434,-1434,-1434,-1434,-1434,-1434,-1434,-1434 + }, + + { + 69,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435, 1436,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435, + -1435,-1435,-1435,-1435,-1435,-1435,-1435,-1435 + }, + + { + 69,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436, 1437,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436, + + -1436,-1436,-1436,-1436,-1436,-1436,-1436,-1436 + }, + + { + 69,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437, 1438,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437, + -1437,-1437,-1437,-1437,-1437,-1437,-1437,-1437 + }, + + { + 69,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438, 1439,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438, + -1438,-1438,-1438,-1438,-1438,-1438,-1438,-1438 + }, + + { + 69,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + + -1439,-1439, 1440,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439, + -1439,-1439,-1439,-1439,-1439,-1439,-1439,-1439 + + }, + + { + 69,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440, 1441,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440, + -1440,-1440,-1440,-1440,-1440,-1440,-1440,-1440 + }, + + { + 69,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441, 1442,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441, + -1441,-1441,-1441,-1441,-1441,-1441,-1441,-1441 + }, + + { + 69,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442, 1443,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442, + -1442,-1442,-1442,-1442,-1442,-1442,-1442,-1442 + }, + + { + 69,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443, 1444,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443, + -1443,-1443,-1443,-1443,-1443,-1443,-1443,-1443 + }, + + { + 69,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444, 1445,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444, + -1444,-1444,-1444,-1444,-1444,-1444,-1444,-1444 + }, + + { + 69,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445, 1446,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445, + -1445,-1445,-1445,-1445,-1445,-1445,-1445,-1445 + }, + + { + 69,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446, 1447,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446, + + -1446,-1446,-1446,-1446,-1446,-1446,-1446,-1446 + }, + + { + 69,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447, 1448,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447, + -1447,-1447,-1447,-1447,-1447,-1447,-1447,-1447 + }, + + { + 69,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448, 1449,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448, + -1448,-1448,-1448,-1448,-1448,-1448,-1448,-1448 + }, + + { + 69,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + + -1449,-1449, 1450,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449, + -1449,-1449,-1449,-1449,-1449,-1449,-1449,-1449 + + }, + + { + 69,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450, 1451,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450, + -1450,-1450,-1450,-1450,-1450,-1450,-1450,-1450 + }, + + { + 69,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451, 1452,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451, + -1451,-1451,-1451,-1451,-1451,-1451,-1451,-1451 + }, + + { + 69,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452, 1453,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452, + -1452,-1452,-1452,-1452,-1452,-1452,-1452,-1452 + }, + + { + 69,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453, 1454,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453, + -1453,-1453,-1453,-1453,-1453,-1453,-1453,-1453 + }, + + { + 69,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454, 1455,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454, + -1454,-1454,-1454,-1454,-1454,-1454,-1454,-1454 + }, + + { + 69,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455, 1456,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455, + -1455,-1455,-1455,-1455,-1455,-1455,-1455,-1455 + }, + + { + 69,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456, 1457,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456, + + -1456,-1456,-1456,-1456,-1456,-1456,-1456,-1456 + }, + + { + 69,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457, + -1457,-1457,-1457,-1457,-1457,-1457,-1457,-1457 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 434 +#define YY_END_OF_BUFFER 435 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[1458] = + { 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, 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, 0, 0, 0, 0, 0, 435, 434, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 205, 205, 205, 224, 224, 216, 216, 225, 225, 217, + + 217, 272, 272, 272, 434, 293, 293, 282, 282, 297, + 297, 308, 308, 309, 309, 375, 375, 375, 410, 410, + 388, 388, 411, 411, 389, 389, 415, 415, 311, 312, + 310, 319, 319, 320, 320, 328, 328, 329, 329, 417, + 417, 419, 419, 418, 421, 421, 421, 420, 423, 423, + 423, 422, 425, 425, 434, 426, 434, 434, 434, 431, + 434, 432, 434, 433, 0, 0, 0, 64, 58, 0, + 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 0, 0, 63, + + 57, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 0, 0, 0, 19, 0, 66, 60, 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, 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, 0, 0, 416, 418, 0, 420, 420, 420, 420, + 0, 0, 422, 422, 422, 422, 0, 0, 424, 0, + + 428, 0, 0, 0, 426, 0, 0, 0, 426, 0, + 0, 0, 431, 0, 432, 0, 433, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 65, 59, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 67, 61, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 202, 203, 204, 201, 200, 198, 199, 0, 0, + 0, 206, 207, 208, 213, 212, 0, 0, 0, 209, + 210, 211, 215, 214, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 294, 295, 296, 298, 299, + 300, 305, 304, 301, 302, 303, 307, 306, 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, 412, 413, 414, 0, + 0, 0, 316, 317, 318, 0, 0, 0, 325, 326, + + 327, 420, 0, 420, 422, 0, 422, 0, 0, 427, + 0, 0, 0, 429, 0, 0, 0, 426, 0, 0, + 22, 18, 26, 0, 70, 0, 90, 75, 0, 13, + 44, 80, 39, 34, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 125, 0, 0, 0, + 0, 167, 0, 0, 0, 0, 0, 51, 49, 0, + 131, 0, 0, 0, 0, 0, 0, 163, 0, 54, + 0, 56, 171, 169, 181, 0, 28, 0, 72, 0, + 92, 77, 0, 15, 46, 82, 41, 36, 87, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 183, 0, 0, 0, 0, 173, 0, 0, 95, 0, + 0, 0, 179, 218, 219, 220, 221, 222, 223, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 273, 274, 275, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 313, 314, 315, 321, 322, + 323, 324, 430, 0, 0, 0, 427, 0, 0, 0, + 426, 0, 0, 27, 71, 91, 76, 31, 14, 45, + 81, 40, 35, 86, 0, 0, 0, 0, 0, 0, + 25, 69, 89, 74, 0, 0, 30, 12, 43, 79, + 38, 33, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 0, 0, 0, 0, 0, 144, + 146, 148, 0, 0, 62, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 73, 93, 78, 32, 16, 47, + + 83, 42, 37, 88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 101, 0, 0, 99, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 281, 278, 280, 276, 277, 279, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 381, 379, 380, 376, 377, 378, 0, 0, 0, + 0, 0, 0, 0, 0, 387, 385, 386, 382, 383, + 384, 0, 427, 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, 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, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 261, 263, 266, 270, 262, 265, + 269, 264, 268, 267, 271, 257, 235, 254, 258, 246, + 236, 232, 241, 252, 255, 259, 247, 244, 249, 237, + 233, 242, 230, 239, 251, 253, 256, 260, 248, 245, + 250, 228, 229, 238, 234, 243, 231, 240, 226, 227, + 292, 288, 291, 285, 287, 290, 283, 284, 286, 289, + 365, 367, 370, 374, 366, 369, 373, 368, 372, 371, + 361, 339, 358, 362, 350, 336, 340, 345, 356, 359, + + 363, 348, 351, 353, 334, 337, 341, 346, 343, 355, + 357, 360, 364, 332, 349, 352, 354, 333, 330, 335, + 338, 342, 347, 344, 331, 405, 395, 404, 393, 394, + 403, 390, 391, 392, 402, 409, 401, 408, 399, 400, + 407, 396, 397, 398, 406, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 166, 0, 0, 0, + 117, 115, 0, 0, 0, 0, 50, 48, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 162, 0, 53, 55, + + 0, 168, 170, 180, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 182, 172, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, + 0, 0, 0, 0, 0, 0, 178, 190, 195, 134, + 194, 193, 191, 186, 188, 192, 124, 123, 126, 119, + 105, 104, 120, 121, 122, 185, 0, 165, 187, 189, + 113, 112, 116, 114, 133, 130, 129, 132, 127, 107, + 111, 109, 106, 110, 108, 154, 155, 156, 153, 157, + 149, 143, 145, 147, 158, 159, 160, 150, 151, 152, + 161, 102, 164, 52, 184, 138, 0, 141, 118, 142, + + 97, 103, 140, 139, 100, 98, 135, 136, 68, 175, + 176, 177, 174, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 137, 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, 1, 0, 0, 3, 0, 0, 4, 0, 0, + 5, 0, 0, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 7, 0, 8, 0, 9, 0, 10, 0, 11, 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, 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, 0, 0, 0, 196 + } ; + +static const yy_state_type yy_NUL_trans[1458] = + { 0, + 70, 71, 91, 91, 94, 94, 96, 96, 98, 98, + 100, 100, 102, 102, 70, 70, 106, 106, 108, 108, + 110, 110, 112, 112, 114, 114, 116, 116, 119, 119, + 121, 121, 123, 123, 125, 125, 127, 127, 129, 129, + 130, 130, 132, 132, 134, 134, 136, 136, 138, 138, + 140, 140, 142, 142, 145, 145, 149, 149, 153, 153, + 155, 155, 159, 159, 161, 161, 163, 163, 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, + + 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 298, 300, 0, 304, 308, 312, 0, + 314, 0, 316, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 298, 0, 300, + + 0, 508, 509, 513, 0, 517, 308, 308, 0, 308, + 308, 312, 0, 314, 0, 316, 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, 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, + 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, 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, 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, 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, 508, 509, 0, + 509, 509, 513, 0, 513, 716, 513, 0, 517, 720, + 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, 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, 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, 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, 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, + 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, 0, 508, 942, 716, 0, 716, 716, 720, + 0, 720, 720, 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, 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, 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, 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, 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, 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, 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, 942, 0, 942, 942, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 1378, 0, 1380, 0, 1382, + 0, 1384, 0, 1386, 0, 1388, 0, 1378, 0, 1380, + 0, 1382, 0, 1384, 0, 1386, 0, 1388, 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, + 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, 0, 0, 0, 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsbth.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* wcsbth.l is a Flex description file containing the definition of a lexical +* scanner for parsing the WCS keyrecords for one or more image arrays and/or +* pixel lists in a FITS binary table header. It can also handle primary image +* and image extension headers. +* +* wcsbth.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description +* of the user interface and operating notes. +* +* Implementation notes +* -------------------- +* wcsbth() may be invoked with an option that causes it to recognize the +* image-header form of WCS keywords as defaults for each alternate coordinate +* representation (up to 27). By design, with this option enabled wcsbth() can +* also handle primary image and image extension headers, effectively treating +* them as a single-column binary table though with WCS keywords of a different +* form. +* +* NAXIS is always 2 for binary tables, it refers to the two-dimensional nature +* of the table. Thus NAXIS does not count the number of image axes in either +* image arrays or pixels lists and for the latter there is not even a formal +* equivalent of WCSAXESa. Hence NAXIS is always ignored and a first pass +* through the header is required to determine the number of images, the number +* of alternate coordinate representations for each image (up to 27), and the +* number of coordinate axes in each representation; this pass also counts the +* number of iPVn_ma and iPSn_ma or TVk_ma and TSk_ma keywords in each +* representation. +* +* On completion of the first pass, the association between column number and +* axis number is defined for each representation of a pixel list. Memory is +* allocated for an array of the required number of wcsprm structs and each of +* these is initialized appropriately. These structs are filled in the second +* pass. +* +* It is permissible for a scalar table column to contain degenerate (single- +* point) image arrays and simultaneously form one axis of a pixel list. +* +* The parser does not check for duplicated keywords, for most keywords it +* accepts the last encountered. +* +* wcsbth() does not currently handle the Green Bank convention. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Indices for parameterized keywords. */ +/* Alternate coordinate system identifier. */ +/* Keyvalue data types. */ +/* Inline comment syntax. */ +/* Exclusive start states. */ + + + + + + + + + + +#line 113 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +#include +#include +#include +#include +#include +#include + +#include "wcs.h" +#include "wcshdr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcsutil.h" + + // Codes used for keyvalue data types. +#define INTEGER 0 +#define FLOAT 1 +#define FLOAT2 2 +#define STRING 3 + + // Bit masks used for keyword types: +#define IMGAUX 0x1 // Auxiliary image header, e.g. LONPOLEa or + // DATE-OBS. +#define IMGAXIS 0x2 // Image header with axis number, e.g. + // CTYPEia. +#define IMGHEAD 0x3 // IMGAUX | IMGAXIS, i.e. image header of + // either type. +#define BIMGARR 0x4 // Binary table image array, e.g. iCTYna. +#define PIXLIST 0x8 // Pixel list, e.g. TCTYna. +#define BINTAB 0xC // BIMGARR | PIXLIST, i.e. binary table + // image array (without axis number) or + // pixel list, e.g. LONPna or OBSGXn. + +// User data associated with yyscanner. +struct wcsbth_extra { + // Values passed to YY_INPUT. + char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsbth_scanner(char *header, int nkeyrec, int relax, \ + int ctrl, int keysel, int *colsel, int *nreject, int *nwcs, \ + struct wcsprm **wcs, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// A convenience macro to get around incompatibilities between unput() and +// yyless(): put yytext followed by a blank back onto the input stream. +#define WCSBTH_PUTBACK \ + sprintf(strtmp, "%s ", yytext); \ + size_t iz = strlen(strtmp); \ + while (iz) unput(strtmp[--iz]); + +// Struct used internally for header bookkeeping. +struct wcsbth_alts { + int ncol, ialt, icol, imgherit; + short int (*arridx)[27]; + short int pixidx[27]; + short int pad1; + unsigned int *pixlist; + + unsigned char (*npv)[27]; + unsigned char (*nps)[27]; + unsigned char pixnpv[27]; + unsigned char pixnps[27]; + unsigned char pad2[2]; +}; + +// Internal helper functions. +static YY_DECL; +static int wcsbth_colax(struct wcsprm *wcs, struct wcsbth_alts *alts, int k, + char a); +static int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, + struct wcsprm **wcs); +static struct wcsprm *wcsbth_idx(struct wcsprm *wcs, struct wcsbth_alts *alts, + int keytype, int n, char a); +static int wcsbth_init1(struct wcsbth_alts *alts, int auxprm, int *nwcs, + struct wcsprm **wcs); +static int wcsbth_pass1(int keytype, int i, int j, int n, int k, char a, + char ptype, struct wcsbth_alts *alts); + +// Helper functions for keywords that require special handling. +static int wcsbth_jdref(double *wptr, const double *jdref); +static int wcsbth_jdrefi(double *wptr, const double *jdrefi); +static int wcsbth_jdreff(double *wptr, const double *jdreff); +static int wcsbth_epoch(double *wptr, const double *epoch); +static int wcsbth_vsource(double *wptr, const double *vsource); + +// Helper functions for keyvalue validity checking. +static int wcsbth_timepixr(double timepixr); + +#line 26316 "wcsbth.c" +#line 26317 "wcsbth.c" + +#define INITIAL 0 +#define CCCCCia 1 +#define iCCCna 2 +#define iCCCCn 3 +#define TCCCna 4 +#define TCCCCn 5 +#define CCi_ja 6 +#define ijCCna 7 +#define TCn_ka 8 +#define TCCn_ka 9 +#define CROTAi 10 +#define iCROTn 11 +#define TCROTn 12 +#define CCi_ma 13 +#define iCn_ma 14 +#define iCCn_ma 15 +#define TCn_ma 16 +#define TCCn_ma 17 +#define PROJPm 18 +#define CCCCCCCC 19 +#define CCCCCCCa 20 +#define CCCCna 21 +#define CCCCCna 22 +#define CCCCn 23 +#define CCCCCn 24 +#define VALUE 25 +#define INTEGER_VAL 26 +#define FLOAT_VAL 27 +#define FLOAT2_VAL 28 +#define STRING_VAL 29 +#define COMMENT 30 +#define DISCARD 31 +#define ERROR 32 +#define FLUSH 33 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct wcsbth_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + yy_size_t yy_n_chars; + yy_size_t yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + yy_size_t yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 222 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" + +#line 224 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" + char *errmsg, errtxt[80], *keyname, strtmp[80]; + int inttmp; + double dbltmp, dbl2tmp[2]; + struct auxprm auxtem; + struct wcsprm wcstem; + + // Initialize returned values. + *nreject = 0; + *nwcs = 0; + *wcs = 0x0; + + // Our handle on the input stream. + char *keyrec = header; + char *hptr = header; + char *keep = 0x0; + + // For keeping tallies of keywords found. + int nvalid = 0; + int nother = 0; + + // Used to flag image header keywords that are always inherited. + int imherit = 1; + + // If strict, then also reject. + if (relax & WCSHDR_strict) relax |= WCSHDR_reject; + + // Keyword indices, as used in the WCS papers, e.g. iVn_ma, TPn_ka. + int i = 0; + int j = 0; + int k = 0; + int n = 0; + int m = 0; + char a = ' '; + + // Header bookkeeping. + struct wcsbth_alts alts; + alts.ncol = 0; + alts.arridx = 0x0; + alts.pixlist = 0x0; + alts.npv = 0x0; + alts.nps = 0x0; + + for (int ialt = 0; ialt < 27; ialt++) { + alts.pixidx[ialt] = 0; + alts.pixnpv[ialt] = 0; + alts.pixnps[ialt] = 0; + } + + // For decoding the keyvalue. + int keytype = 0; + int valtype = -1; + void *vptr = 0x0; + + // For keywords that require special handling. + int altlin = 0; + char ptype = ' '; + int (*chekval)(double) = 0x0; + int (*special)(double *, const double *) = 0x0; + struct auxprm *auxp = 0x0; + int auxprm = 0; + int naux = 0; + + // Selection by column number. + int nsel = colsel ? colsel[0] : 0; + int incl = (nsel > 0); + char exclude[1000]; + for (int icol = 0; icol < 1000; icol++) { + exclude[icol] = incl; + } + for (int icol = 1; icol <= abs(nsel); icol++) { + int itmp = colsel[icol]; + if (0 < itmp && itmp < 1000) { + exclude[itmp] = !incl; + } + } + exclude[0] = 0; + + // Selection by keyword type. + if (keysel) { + int itmp = keysel; + keysel = 0; + if (itmp & WCSHDR_IMGHEAD) keysel |= IMGHEAD; + if (itmp & WCSHDR_BIMGARR) keysel |= BIMGARR; + if (itmp & WCSHDR_PIXLIST) keysel |= PIXLIST; + } + if (keysel == 0) { + keysel = IMGHEAD | BINTAB; + } + + // Control variables. + int ipass = 1; + int npass = 2; + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return WCSHDRERR_PARSER; + } + + BEGIN(INITIAL); + + +#line 26703 "wcsbth.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 329 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == 1) { + if (alts.ncol == 0) { + sscanf(yytext, "TFIELDS = %d", &(alts.ncol)); + BEGIN(FLUSH); + } else { + errmsg = "duplicate or out-of-sequence TFIELDS keyword"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 344 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (!(keysel & IMGAXIS)) { + // Ignore this key type. + BEGIN(DISCARD); + + } else { + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "WCSAXES%c= %d", &a, &i); + + if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCSAXESa"; + keytype = IMGAXIS; + BEGIN(COMMENT); + } + + } else if (relax & WCSHDR_reject) { + errmsg = "image-header keyword WCSAXESa in binary table"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + } + YY_BREAK +case 3: +#line 378 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 4: +#line 379 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 5: +YY_RULE_SETUP +#line 379 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + keyname = "WCAXna"; + + // Note that a blank in the sscanf() format string matches zero or + // more of them in the input. + sscanf(yytext, "WCAX%d%c = %d", &n, &a, &i); + + if (!(keysel & BIMGARR) || exclude[n]) { + // Ignore this key type or column. + BEGIN(DISCARD); + + } else if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCAXna"; + keytype = IMGAXIS; + BEGIN(COMMENT); + } + } + YY_BREAK +case 6: +/* rule 6 can match eol */ +#line 405 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 7: +/* rule 7 can match eol */ +#line 406 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 8: +/* rule 8 can match eol */ +YY_RULE_SETUP +#line 406 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Cross-reference supplier. + keyname = "WCSTna"; + errmsg = "cross-references are not implemented"; + BEGIN(ERROR); + } + YY_BREAK +case 9: +/* rule 9 can match eol */ +#line 414 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 10: +/* rule 10 can match eol */ +#line 415 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 11: +/* rule 11 can match eol */ +YY_RULE_SETUP +#line 415 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Cross-reference consumer. + keyname = "WCSXna"; + errmsg = "cross-references are not implemented"; + BEGIN(ERROR); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 422 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + keyname = "CRPIXja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 13: +#line 431 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 14: +YY_RULE_SETUP +#line 431 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "jCRPna"; + BEGIN(iCCCna); + } else { + keyname = "jCRPXn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 15: +#line 447 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 16: +YY_RULE_SETUP +#line 447 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + if (yyleng == 4) { + keyname = "TCRPna"; + BEGIN(TCCCna); + } else { + keyname = "TCRPXn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 460 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + keyname = "PCi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 469 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + sscanf(yytext, "%1d%1d", &i, &j); + + keyname = "ijPCna"; + BEGIN(ijCCna); + } + YY_BREAK +case 19: +#line 481 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 20: +YY_RULE_SETUP +#line 481 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + if (yyleng == 2) { + keyname = "TPn_ka"; + BEGIN(TCn_ka); + } else { + keyname = "TPCn_ka"; + BEGIN(TCCn_ka); + } + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 495 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + keyname = "CDi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 504 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + sscanf(yytext, "%1d%1d", &i, &j); + + keyname = "ijCDna"; + BEGIN(ijCCna); + } + YY_BREAK +case 23: +#line 516 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 24: +YY_RULE_SETUP +#line 516 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + if (yyleng == 2) { + keyname = "TCn_ka"; + BEGIN(TCn_ka); + } else { + keyname = "TCDn_ka"; + BEGIN(TCCn_ka); + } + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 530 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + keyname = "CDELTia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 26: +#line 539 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 27: +YY_RULE_SETUP +#line 539 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCDEna"; + BEGIN(iCCCna); + } else { + keyname = "iCDLTn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 28: +#line 555 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 29: +YY_RULE_SETUP +#line 555 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + if (yyleng == 4) { + keyname = "TCDEna"; + BEGIN(TCCCna); + } else { + keyname = "TCDLTn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 568 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "CROTAi"; + BEGIN(CROTAi); + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 577 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + sscanf(yytext, "%d", &i); + + keyname = "iCROTn"; + BEGIN(iCROTn); + } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 588 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "TCROTn"; + BEGIN(TCROTn); + } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 597 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + keyname = "CUNITia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 34: +#line 606 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 35: +YY_RULE_SETUP +#line 606 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCUNna"; + BEGIN(iCCCna); + } else { + keyname = "iCUNIn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 36: +#line 622 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 37: +YY_RULE_SETUP +#line 622 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + if (yyleng == 4) { + keyname = "TCUNna"; + BEGIN(TCCCna); + } else { + keyname = "TCUNIn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 635 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + keyname = "CTYPEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 39: +#line 644 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 40: +YY_RULE_SETUP +#line 644 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCTYna"; + BEGIN(iCCCna); + } else { + keyname = "iCTYPn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 41: +#line 660 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 42: +YY_RULE_SETUP +#line 660 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + if (yyleng == 4) { + keyname = "TCTYna"; + BEGIN(TCCCna); + } else { + keyname = "TCTYPn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 43: +YY_RULE_SETUP +#line 673 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + keyname = "CRVALia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 44: +#line 682 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 45: +YY_RULE_SETUP +#line 682 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCRVna"; + BEGIN(iCCCna); + } else { + keyname = "iCRVLn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 46: +#line 698 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 47: +YY_RULE_SETUP +#line 698 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + if (yyleng == 4) { + keyname = "TCRVna"; + BEGIN(TCCCna); + } else { + keyname = "TCRVLn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 48: +#line 712 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 49: +YY_RULE_SETUP +#line 712 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.lonpole); + + if (yyleng == 7) { + keyname = "LONPOLEa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "LONPna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 50: +#line 727 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 51: +YY_RULE_SETUP +#line 727 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.latpole); + + if (yyleng == 7) { + keyname = "LATPOLEa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "LATPna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 52: +#line 742 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 53: +#line 743 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 54: +YY_RULE_SETUP +#line 743 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + if (yyleng == 8) { + if (relax & WCSHDR_strict) { + errmsg = "the RESTFREQ keyword is deprecated, use RESTFRQa"; + BEGIN(ERROR); + + } else { + unput(' '); + + keyname = "RESTFREQ"; + BEGIN(CCCCCCCa); + } + + } else if (yyleng == 7) { + keyname = "RESTFRQa"; + BEGIN(CCCCCCCa); + + } else { + keyname = "RFRQna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 55: +#line 770 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 56: +YY_RULE_SETUP +#line 770 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restwav); + + if (yyleng == 7) { + keyname = "RESTWAVa"; + BEGIN(CCCCCCCa); + } else { + keyname = "RWAVna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 783 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + keyname = "PVi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 58: +#line 793 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 59: +YY_RULE_SETUP +#line 793 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + sscanf(yytext, "%d", &i); + + if (yyleng == 2) { + keyname = "iVn_ma"; + BEGIN(iCn_ma); + } else { + keyname = "iPVn_ma"; + BEGIN(iCCn_ma); + } + } + YY_BREAK +case 60: +#line 810 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 61: +YY_RULE_SETUP +#line 810 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + if (yyleng == 2) { + keyname = "TVn_ma"; + BEGIN(TCn_ma); + } else { + keyname = "TPVn_ma"; + BEGIN(TCCn_ma); + } + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 824 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + keyname = "PROJPm"; + BEGIN(PROJPm); + } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 833 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + keyname = "PSi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 64: +#line 843 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 65: +YY_RULE_SETUP +#line 843 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + sscanf(yytext, "%d", &i); + + if (yyleng == 2) { + keyname = "iSn_ma"; + BEGIN(iCn_ma); + } else { + keyname = "iPSn_ma"; + BEGIN(iCCn_ma); + } + } + YY_BREAK +case 66: +#line 860 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 67: +YY_RULE_SETUP +#line 860 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + if (yyleng == 2) { + keyname = "TSn_ma"; + BEGIN(TCn_ma); + } else { + keyname = "TPSn_ma"; + BEGIN(TCCn_ma); + } + } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 874 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "VELREF%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the VELREF keyword is deprecated, use SPECSYSa"; + BEGIN(ERROR); + + } else if (a == ' ' || (relax & WCSHDR_VELREFa)) { + valtype = INTEGER; + vptr = &(wcstem.velref); + + unput(a); + + keyname = "VELREF"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "VELREF keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 69: +YY_RULE_SETUP +#line 900 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + keyname = "CNAMEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 70: +#line 909 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 71: +YY_RULE_SETUP +#line 909 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCNAna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCNAMn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 72: +#line 926 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 73: +YY_RULE_SETUP +#line 926 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + if (yyleng == 4) { + keyname = "TCNAna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCNAMn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 940 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + keyname = "CRDERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 75: +#line 949 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 76: +YY_RULE_SETUP +#line 949 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCRDna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCRDEn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 77: +#line 966 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 78: +YY_RULE_SETUP +#line 966 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + if (yyleng == 4) { + keyname = "TCRDna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCRDEn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 980 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + keyname = "CSYERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 80: +#line 989 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 81: +YY_RULE_SETUP +#line 989 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCSYna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCSYEn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 82: +#line 1006 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 83: +YY_RULE_SETUP +#line 1006 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + if (yyleng == 4) { + keyname = "TCSYna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCSYEn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 1020 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + keyname = "CZPHSia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 85: +#line 1029 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 86: +YY_RULE_SETUP +#line 1029 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCZPna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCZPHn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 87: +#line 1046 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 88: +YY_RULE_SETUP +#line 1046 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + if (yyleng == 4) { + keyname = "TCZPna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCZPHn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 89: +YY_RULE_SETUP +#line 1060 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + keyname = "CPERIia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 90: +#line 1069 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 91: +YY_RULE_SETUP +#line 1069 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCPRna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCPERn"; + BEGIN(iCCCCn); + } + } + YY_BREAK +case 92: +#line 1086 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 93: +YY_RULE_SETUP +#line 1086 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + if (yyleng == 4) { + keyname = "TCPRna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCPERn"; + BEGIN(TCCCCn); + } + } + YY_BREAK +case 94: +#line 1101 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 95: +#line 1102 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 96: +YY_RULE_SETUP +#line 1102 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.wcsname; + + if (yyleng == 7) { + keyname = "WCSNAMEa"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else { + if (*yytext == 'W') { + keyname = "WCSNna"; + } else { + keyname = "TWCSna"; + } + BEGIN(CCCCna); + } + } + YY_BREAK +case 97: +YY_RULE_SETUP +#line 1121 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.timesys; + + keyname = "TIMESYS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 98: +#line 1130 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 99: +YY_RULE_SETUP +#line 1130 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.trefpos; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "TREFPOS"; + BEGIN(CCCCCCCC); + } else { + keyname = "TRPOSn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 100: +#line 1145 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 101: +YY_RULE_SETUP +#line 1145 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.trefdir; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "TREFDIR"; + BEGIN(CCCCCCCC); + } else { + keyname = "TRDIRn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 102: +YY_RULE_SETUP +#line 1159 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.plephem; + + keyname = "PLEPHEM"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 103: +YY_RULE_SETUP +#line 1167 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.timeunit; + + keyname = "TIMEUNIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 104: +#line 1176 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 105: +YY_RULE_SETUP +#line 1176 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if ((yytext[4] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = STRING; + vptr = wcstem.dateref; + + keyname = "DATEREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the DATE-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 106: +#line 1194 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 107: +YY_RULE_SETUP +#line 1194 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + + keyname = "MJDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 108: +#line 1212 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 109: +YY_RULE_SETUP +#line 1212 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + + keyname = "MJDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 110: +#line 1231 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 111: +YY_RULE_SETUP +#line 1231 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref + 1; + + keyname = "MJDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 112: +#line 1249 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 113: +YY_RULE_SETUP +#line 1249 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + special = wcsbth_jdref; + + keyname = "JDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 114: +#line 1268 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 115: +YY_RULE_SETUP +#line 1268 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcsbth_jdrefi; + + keyname = "JDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 116: +#line 1288 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 117: +YY_RULE_SETUP +#line 1288 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcsbth_jdreff; + + keyname = "JDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 118: +YY_RULE_SETUP +#line 1306 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timeoffs); + + keyname = "TIMEOFFS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 119: +YY_RULE_SETUP +#line 1314 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateobs; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-OBS"; + imherit = 0; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 120: +#line 1325 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 121: +#line 1326 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 122: +YY_RULE_SETUP +#line 1326 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateobs; + + if (relax & WCSHDR_DOBSn) { + yyless(4); + + keyname = "DOBSn"; + BEGIN(CCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "DOBSn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 123: +YY_RULE_SETUP +#line 1345 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.datebeg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 124: +#line 1355 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 125: +YY_RULE_SETUP +#line 1355 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateavg; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "DATE-AVG"; + BEGIN(CCCCCCCC); + } else { + keyname = "DAVGn"; + BEGIN(CCCCn); + } + } + YY_BREAK +case 126: +YY_RULE_SETUP +#line 1369 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.dateend; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 127: +#line 1379 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 128: +YY_RULE_SETUP +#line 1379 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdobs); + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "MJD-OBS"; + imherit = 0; + BEGIN(CCCCCCCC); + } else { + keyname = "MJDOBn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 129: +YY_RULE_SETUP +#line 1394 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdbeg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 130: +#line 1404 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 131: +YY_RULE_SETUP +#line 1404 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdavg); + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "MJD-AVG"; + BEGIN(CCCCCCCC); + } else { + keyname = "MJDAn"; + BEGIN(CCCCn); + } + } + YY_BREAK +case 132: +YY_RULE_SETUP +#line 1418 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdend); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 133: +YY_RULE_SETUP +#line 1427 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.jepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "JEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 134: +YY_RULE_SETUP +#line 1436 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.bepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "BEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 135: +YY_RULE_SETUP +#line 1445 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstart); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTART"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 136: +YY_RULE_SETUP +#line 1454 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstop); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTOP"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 137: +YY_RULE_SETUP +#line 1463 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.xposure); + if (ctrl < -10) keep = keyrec; + + keyname = "XPOSURE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 138: +YY_RULE_SETUP +#line 1472 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.telapse); + if (ctrl < -10) keep = keyrec; + + keyname = "TELAPSE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 139: +YY_RULE_SETUP +#line 1481 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timsyer); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMSYER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 140: +YY_RULE_SETUP +#line 1490 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timrder); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMRDER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 141: +YY_RULE_SETUP +#line 1499 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timedel); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEDEL"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 142: +YY_RULE_SETUP +#line 1508 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timepixr); + chekval = wcsbth_timepixr; + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEPIXR"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 143: +#line 1519 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 144: +YY_RULE_SETUP +#line 1519 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-X"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGXn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 145: +#line 1534 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 146: +YY_RULE_SETUP +#line 1534 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 1; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-Y"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGYn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 147: +#line 1549 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 148: +YY_RULE_SETUP +#line 1549 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 2; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-Z"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGZn"; + BEGIN(CCCCCn); + } + } + YY_BREAK +case 149: +YY_RULE_SETUP +#line 1563 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 3; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-L"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 150: +#line 1573 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 151: +#line 1574 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 152: +YY_RULE_SETUP +#line 1574 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGLn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGLn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 153: +YY_RULE_SETUP +#line 1593 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 4; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-B"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 154: +#line 1603 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 155: +#line 1604 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 156: +YY_RULE_SETUP +#line 1604 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGBn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGBn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 157: +YY_RULE_SETUP +#line 1623 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 5; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-H"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 158: +#line 1633 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 159: +#line 1634 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 160: +YY_RULE_SETUP +#line 1634 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGHn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGHn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 161: +YY_RULE_SETUP +#line 1653 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.obsorbit; + + keyname = "OBSORBIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 162: +#line 1662 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 163: +YY_RULE_SETUP +#line 1662 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.radesys; + + if (yyleng == 7) { + keyname = "RADESYSa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "RADEna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 164: +YY_RULE_SETUP +#line 1676 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_RADECSYS) { + valtype = STRING; + vptr = wcstem.radesys; + + unput(' '); + + keyname = "RADECSYS"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the RADECSYS keyword is deprecated, use RADESYSa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 165: +YY_RULE_SETUP +#line 1696 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "EPOCH%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the EPOCH keyword is deprecated, use EQUINOXa"; + BEGIN(ERROR); + + } else if (a == ' ' || (relax & WCSHDR_EPOCHa)) { + valtype = FLOAT; + vptr = &(wcstem.equinox); + special = wcsbth_epoch; + + unput(a); + + keyname = "EPOCH"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "EPOCH keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 166: +#line 1724 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 167: +YY_RULE_SETUP +#line 1724 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.equinox); + + if (yyleng == 7) { + keyname = "EQUINOXa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "EQUIna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 168: +#line 1739 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 169: +YY_RULE_SETUP +#line 1739 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.specsys; + + if (yyleng == 7) { + keyname = "SPECSYSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SPECna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 170: +#line 1753 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 171: +YY_RULE_SETUP +#line 1753 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.ssysobs; + + if (yyleng == 7) { + keyname = "SSYSOBSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SOBSna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 172: +#line 1767 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 173: +YY_RULE_SETUP +#line 1767 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velosys); + + if (yyleng == 7) { + keyname = "VELOSYSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "VSYSna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 174: +YY_RULE_SETUP +#line 1780 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcsbth_vsource; + + yyless(7); + + keyname = "VSOURCEa"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the VSOURCEa keyword is deprecated, use ZSOURCEa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 175: +#line 1801 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 176: +#line 1802 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 177: +YY_RULE_SETUP +#line 1802 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcsbth_vsource; + + yyless(4); + keyname = "VSOUna"; + BEGIN(CCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = "VSOUna keyword is deprecated, use ZSOUna"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 178: +#line 1823 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 179: +YY_RULE_SETUP +#line 1823 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.zsource); + + if (yyleng == 7) { + keyname = "ZSOURCEa"; + BEGIN(CCCCCCCa); + } else { + keyname = "ZSOUna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 180: +#line 1837 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 181: +YY_RULE_SETUP +#line 1837 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = STRING; + vptr = wcstem.ssyssrc; + + if (yyleng == 7) { + keyname = "SSYSSRCa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SSRCna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 182: +#line 1851 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 183: +YY_RULE_SETUP +#line 1851 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velangl); + + if (yyleng == 7) { + keyname = "VELANGLa"; + BEGIN(CCCCCCCa); + } else { + keyname = "VANGna"; + BEGIN(CCCCna); + } + } + YY_BREAK +case 184: +YY_RULE_SETUP +#line 1864 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.rsun_ref); + + keyname = "RSUN_REF"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 185: +YY_RULE_SETUP +#line 1873 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.dsun_obs); + + keyname = "DSUN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 186: +YY_RULE_SETUP +#line 1882 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.crln_obs); + + keyname = "CRLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 187: +YY_RULE_SETUP +#line 1891 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hgln_obs); + + keyname = "HGLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 188: +#line 1901 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 189: +YY_RULE_SETUP +#line 1901 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hglt_obs); + + keyname = "HGLT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 190: +YY_RULE_SETUP +#line 1910 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.a_radius); + + keyname = "A_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 191: +YY_RULE_SETUP +#line 1919 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.b_radius); + + keyname = "B_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 192: +YY_RULE_SETUP +#line 1928 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.c_radius); + + keyname = "C_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 193: +YY_RULE_SETUP +#line 1937 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blon_obs); + + keyname = "BLON_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 194: +YY_RULE_SETUP +#line 1946 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blat_obs); + + keyname = "BLAT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 195: +YY_RULE_SETUP +#line 1955 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.bdis_obs); + + keyname = "BDIS_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 196: +YY_RULE_SETUP +#line 1964 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (yyextra->nkeyrec) { + yyextra->nkeyrec = 0; + errmsg = "keyrecords following the END keyrecord were ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 197: +YY_RULE_SETUP +#line 1974 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 198: +#line 1979 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 199: +YY_RULE_SETUP +#line 1979 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d%c", &i, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 200: +#line 1998 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 201: +YY_RULE_SETUP +#line 1998 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + if (relax & WCSHDR_reject) { + // Violates the basic FITS standard. + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 202: +#line 2024 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 203: +#line 2025 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 204: +YY_RULE_SETUP +#line 2025 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + if (relax & WCSHDR_ALLIMG) { + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 205: +YY_RULE_SETUP +#line 2044 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "keyword looks very much like %s but isn't", + keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 206: +#line 2059 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 207: +#line 2060 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 208: +#line 2061 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 209: +#line 2062 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 210: +#line 2063 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 211: +YY_RULE_SETUP +#line 2063 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (vptr) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 212: +#line 2079 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 213: +#line 2080 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 214: +#line 2081 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 215: +YY_RULE_SETUP +#line 2081 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (vptr && (relax & WCSHDR_LONGKEY)) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + if (!vptr) { + sprintf(errmsg, "%s keyword is non-standard", keyname); + } else { + sprintf(errmsg, + "%s keyword may not have an alternate version code", keyname); + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 216: +#line 2103 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 217: +YY_RULE_SETUP +#line 2103 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 218: +#line 2108 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 219: +#line 2109 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 220: +#line 2110 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 221: +#line 2111 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 222: +#line 2112 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 223: +YY_RULE_SETUP +#line 2112 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d%c", &n, &a); + if (YY_START == TCCCna) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCCCna) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 224: +#line 2120 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 225: +YY_RULE_SETUP +#line 2120 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 226: +#line 2125 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 227: +#line 2126 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 228: +#line 2127 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 229: +YY_RULE_SETUP +#line 2127 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 230: +#line 2146 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 231: +#line 2147 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 232: +#line 2148 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 233: +#line 2149 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 234: +#line 2150 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 235: +#line 2151 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 236: +#line 2152 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 237: +#line 2153 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 238: +#line 2154 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 239: +#line 2155 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 240: +#line 2156 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 241: +#line 2157 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 242: +#line 2158 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 243: +#line 2159 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 244: +#line 2160 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 245: +#line 2161 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 246: +#line 2162 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 247: +#line 2163 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 248: +#line 2164 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 249: +#line 2165 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 250: +YY_RULE_SETUP +#line 2165 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + if (((altlin == 1) && (relax & WCSHDR_PC0i_0ja)) || + ((altlin == 2) && (relax & WCSHDR_CD0i_0ja))) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 251: +#line 2196 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 252: +#line 2197 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 253: +#line 2198 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 254: +#line 2199 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 255: +#line 2200 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 256: +#line 2201 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 257: +#line 2202 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 258: +#line 2203 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 259: +#line 2204 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 260: +YY_RULE_SETUP +#line 2204 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + if (relax & WCSHDR_ALLIMG) { + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 261: +#line 2224 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 262: +#line 2225 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 263: +#line 2226 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 264: +#line 2227 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 265: +#line 2228 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 266: +#line 2229 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 267: +#line 2230 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 268: +#line 2231 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 269: +#line 2232 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 270: +YY_RULE_SETUP +#line 2232 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 271: +YY_RULE_SETUP +#line 2251 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // This covers the defunct forms CD00i00j and PC00i00j. + if (relax & WCSHDR_ALLIMG) { + if (((altlin == 1) && (relax & WCSHDR_PC00i00j)) || + ((altlin == 2) && (relax & WCSHDR_CD00i00j))) { + sscanf(yytext, "%3d%3d", &i, &j); + a = ' '; + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "this form of the %s keyword is deprecated, use %s", + keyname, keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "deprecated image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 272: +YY_RULE_SETUP +#line 2285 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 273: +#line 2290 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 274: +#line 2291 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 275: +YY_RULE_SETUP +#line 2291 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d%c", &n, &a); + keytype = BIMGARR; + BEGIN(VALUE); + } + YY_BREAK +case 276: +#line 2298 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 277: +#line 2299 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 278: +#line 2300 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 279: +#line 2301 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 280: +#line 2302 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 281: +YY_RULE_SETUP +#line 2302 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_LONGKEY) { + WCSBTH_PUTBACK; + BEGIN(TCn_ka); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 282: +YY_RULE_SETUP +#line 2318 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 283: +#line 2323 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 284: +#line 2324 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 285: +#line 2325 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 286: +#line 2326 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 287: +#line 2327 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 288: +YY_RULE_SETUP +#line 2327 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d_%d%c", &n, &k, &a); + i = wcsbth_colax(*wcs, &alts, n, a); + j = wcsbth_colax(*wcs, &alts, k, a); + keytype = PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 289: +#line 2336 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 290: +#line 2337 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 291: +#line 2338 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 292: +YY_RULE_SETUP +#line 2338 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d_%d", &n, &k); + a = ' '; + i = wcsbth_colax(*wcs, &alts, n, a); + j = wcsbth_colax(*wcs, &alts, k, a); + keytype = PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 293: +YY_RULE_SETUP +#line 2347 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 294: +#line 2352 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 295: +#line 2353 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 296: +YY_RULE_SETUP +#line 2353 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + a = ' '; + sscanf(yytext, "%d%c", &i, &a); + + if (relax & WCSHDR_strict) { + errmsg = "the CROTAn keyword is deprecated, use PCi_ja"; + BEGIN(ERROR); + + } else if (a == ' ' || relax & WCSHDR_CROTAia) { + yyless(0); + BEGIN(CCCCCia); + + } else if (relax & WCSHDR_reject) { + errmsg = "CROTAn keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "deprecated image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 297: +YY_RULE_SETUP +#line 2387 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + yyless(0); + BEGIN(CCCCCia); + } else { + // Let it go. + BEGIN(DISCARD); + } + } + YY_BREAK +case 298: +#line 2398 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 299: +#line 2399 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 300: +#line 2400 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 301: +#line 2401 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 302: +#line 2402 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 303: +YY_RULE_SETUP +#line 2402 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + WCSBTH_PUTBACK; + BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); + } + YY_BREAK +case 304: +#line 2408 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 305: +#line 2409 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 306: +#line 2410 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 307: +YY_RULE_SETUP +#line 2410 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_CROTAia) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "%s keyword may not have an alternate version code", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 308: +#line 2428 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 309: +YY_RULE_SETUP +#line 2428 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 310: +#line 2433 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 311: +YY_RULE_SETUP +#line 2433 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Image-header keyword. + if (imherit || (relax & (WCSHDR_AUXIMG | WCSHDR_ALLIMG))) { + if (YY_START == CCCCCCCa) { + sscanf(yytext, "%c", &a); + } else { + a = 0; + unput(yytext[0]); + } + keytype = IMGAUX; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 312: +YY_RULE_SETUP +#line 2457 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "invalid alternate code, keyword resembles %s " + "but isn't", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 313: +#line 2472 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 314: +#line 2473 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 315: +#line 2474 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 316: +#line 2475 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 317: +YY_RULE_SETUP +#line 2475 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d%c", &n, &a); + keytype = BINTAB; + BEGIN(VALUE); + } + YY_BREAK +case 318: +YY_RULE_SETUP +#line 2481 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d", &n); + a = ' '; + keytype = BINTAB; + BEGIN(VALUE); + } + YY_BREAK +case 319: +#line 2489 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 320: +YY_RULE_SETUP +#line 2489 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 321: +#line 2494 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 322: +#line 2495 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 323: +#line 2496 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 324: +#line 2497 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 325: +#line 2498 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 326: +#line 2499 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 327: +YY_RULE_SETUP +#line 2499 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d", &n); + a = 0; + keytype = BINTAB; + BEGIN(VALUE); + } + YY_BREAK +case 328: +#line 2507 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 329: +YY_RULE_SETUP +#line 2507 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 330: +#line 2512 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 331: +#line 2513 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 332: +#line 2514 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 333: +YY_RULE_SETUP +#line 2514 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Image-header keyword. + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 334: +#line 2534 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 335: +#line 2535 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 336: +#line 2536 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 337: +#line 2537 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 338: +#line 2538 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 339: +#line 2539 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 340: +#line 2540 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 341: +#line 2541 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 342: +#line 2542 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 343: +#line 2543 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 344: +#line 2544 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 345: +#line 2545 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 346: +#line 2546 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 347: +#line 2547 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 348: +#line 2548 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 349: +#line 2549 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 350: +#line 2550 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 351: +#line 2551 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 352: +#line 2552 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 353: +#line 2553 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 354: +YY_RULE_SETUP +#line 2553 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + if (((valtype == FLOAT) && (relax & WCSHDR_PV0i_0ma)) || + ((valtype == STRING) && (relax & WCSHDR_PS0i_0ma))) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 355: +#line 2584 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 356: +#line 2585 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 357: +#line 2586 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 358: +#line 2587 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 359: +#line 2588 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 360: +#line 2589 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 361: +#line 2590 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 362: +#line 2591 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 363: +#line 2592 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 364: +YY_RULE_SETUP +#line 2592 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_ALLIMG) { + // Anything that has fallen through to this point must contain + // an invalid parameter. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 365: +#line 2612 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 366: +#line 2613 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 367: +#line 2614 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 368: +#line 2615 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 369: +#line 2616 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 370: +#line 2617 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 371: +#line 2618 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 372: +#line 2619 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 373: +#line 2620 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 374: +YY_RULE_SETUP +#line 2620 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + YY_BREAK +case 375: +YY_RULE_SETUP +#line 2627 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 376: +#line 2632 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 377: +#line 2633 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 378: +#line 2634 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 379: +#line 2635 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 380: +#line 2636 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 381: +#line 2637 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 382: +#line 2638 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 383: +#line 2639 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 384: +#line 2640 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 385: +#line 2641 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 386: +#line 2642 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 387: +YY_RULE_SETUP +#line 2642 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_LONGKEY) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCn_ma) ? iCn_ma : TCn_ma); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "the %s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 388: +#line 2659 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 389: +YY_RULE_SETUP +#line 2659 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 390: +#line 2664 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 391: +#line 2665 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 392: +#line 2666 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 393: +#line 2667 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 394: +#line 2668 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 395: +#line 2669 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 396: +#line 2670 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 397: +#line 2671 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 398: +#line 2672 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 399: +#line 2673 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 400: +#line 2674 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 401: +YY_RULE_SETUP +#line 2674 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + sscanf(yytext, "%d_%d%c", &n, &m, &a); + if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 402: +#line 2682 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 403: +#line 2683 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 404: +#line 2684 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 405: +#line 2685 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 406: +#line 2686 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 407: +#line 2687 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 408: +#line 2688 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 409: +YY_RULE_SETUP +#line 2688 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Invalid combinations will be flagged by . + sscanf(yytext, "%d_%d", &n, &m); + a = ' '; + if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + YY_BREAK +case 410: +#line 2698 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 411: +YY_RULE_SETUP +#line 2698 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 412: +YY_RULE_SETUP +#line 2702 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & WCSHDR_PROJPn) { + sscanf(yytext, "%d", &m); + i = 0; + a = ' '; + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "the PROJPn keyword is deprecated, use PVi_ma"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 413: +#line 2721 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +case 414: +YY_RULE_SETUP +#line 2721 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (relax & (WCSHDR_PROJPn | WCSHDR_reject)) { + errmsg = "invalid PROJPn keyword"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 415: +YY_RULE_SETUP +#line 2731 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 416: +YY_RULE_SETUP +#line 2735 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // Do checks on i, j, m, n, k. + if (!(keytype & keysel)) { + // Selection by keyword type. + BEGIN(DISCARD); + + } else if (exclude[n] || exclude[k]) { + // One or other column is not selected. + if (k && (exclude[n] != exclude[k])) { + // For keywords such as TCn_ka, both columns must be excluded. + // User error, so return immediately. + return WCSHDRERR_BAD_COLUMN; + + } else { + BEGIN(DISCARD); + } + + } else if (i > 99 || j > 99 || m > 99 || n > 999 || k > 999) { + if (relax & WCSHDR_reject) { + errmsg = errtxt; + if (i > 99 || j > 99) { + sprintf(errmsg, "axis number exceeds 99"); + } else if (m > 99) { + sprintf(errmsg, "parameter number exceeds 99"); + } else if (n > 999 || k > 999) { + sprintf(errmsg, "column number exceeds 999"); + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (ipass == 2 && npass == 3 && (keytype & BINTAB)) { + // Skip keyvalues that won't be inherited. + BEGIN(FLUSH); + + } else { + if (ipass == 3 && (keytype & IMGHEAD)) { + // IMGHEAD keytypes are always dealt with on the second pass. + // However, they must be re-parsed in order to report errors. + vptr = 0x0; + } + + if (valtype == INTEGER) { + BEGIN(INTEGER_VAL); + } else if (valtype == FLOAT) { + BEGIN(FLOAT_VAL); + } else if (valtype == FLOAT2) { + BEGIN(FLOAT2_VAL); + } else if (valtype == STRING) { + BEGIN(STRING_VAL); + } else { + errmsg = errtxt; + sprintf(errmsg, "internal parser ERROR, bad data type: %d", + valtype); + BEGIN(ERROR); + } + } + } + YY_BREAK +case 417: +YY_RULE_SETUP +#line 2797 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "invalid KEYWORD = VALUE syntax"; + BEGIN(ERROR); + } + YY_BREAK +case 418: +YY_RULE_SETUP +#line 2802 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + sscanf(yytext, "%d", &inttmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 419: +YY_RULE_SETUP +#line 2814 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "an integer value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 420: +YY_RULE_SETUP +#line 2819 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + wcsutil_str2double(yytext, &dbltmp); + + if (chekval && chekval(dbltmp)) { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } else { + BEGIN(COMMENT); + } + } + } + YY_BREAK +case 421: +YY_RULE_SETUP +#line 2836 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 422: +YY_RULE_SETUP +#line 2841 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue as integer and fractional parts. + wcsutil_str2double2(yytext, dbl2tmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 423: +YY_RULE_SETUP +#line 2853 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 424: +/* rule 424 can match eol */ +YY_RULE_SETUP +#line 2858 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Copy the keyvalue minus the quotes. + strncpy(strtmp, yytext+1, yyleng-2); + strtmp[yyleng-2] = '\0'; + + // Strip off trailing blanks. + for (int jx = yyleng-3; jx >= 0; jx--) { + if (strtmp[jx] != ' ') { + break; + } + strtmp[jx] = '\0'; + } + + // Squeeze out repeated quotes. + int ix = 0; + for (int jx = 0; jx < 72; jx++) { + if (ix < jx) { + strtmp[ix] = strtmp[jx]; + } + + if (strtmp[jx] == '\0') { + break; + } else if (strtmp[jx] == '\'' && strtmp[jx+1] == '\'') { + jx++; + } + + ix++; + } + + BEGIN(COMMENT); + } + } + YY_BREAK +case 425: +YY_RULE_SETUP +#line 2895 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "a string value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 426: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2900 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == 1) { + // Do first-pass bookkeeping. + wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); + BEGIN(FLUSH); + + } else if (*wcs) { + // Store the value now that the keyrecord has been validated. + alts.icol = 0; + alts.ialt = 0; + + // Update each coordinate representation. + int gotone = 0; + struct wcsprm *wcsp; + while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { + gotone = 1; + + if (vptr) { + void *wptr; + if (auxprm) { + // Additional auxiliary parameter. + auxp = wcsp->aux; + ptrdiff_t voff = (char *)vptr - (char *)(&auxtem); + wptr = (void *)((char *)auxp + voff); + } else { + // A parameter that lives directly in wcsprm. + ptrdiff_t voff = (char *)vptr - (char *)(&wcstem); + wptr = (void *)((char *)wcsp + voff); + } + + if (valtype == INTEGER) { + *((int *)wptr) = inttmp; + + } else if (valtype == FLOAT) { + // Apply keyword parameterization. + if (ptype == 'v') { + int ipx = (wcsp->npv)++; + wcsp->pv[ipx].i = i; + wcsp->pv[ipx].m = m; + wptr = &(wcsp->pv[ipx].value); + + } else if (j) { + wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + + (j - 1); + + } else if (i) { + wptr = *((double **)wptr) + (i - 1); + } + + if (special) { + special(wptr, &dbltmp); + } else { + *((double *)wptr) = dbltmp; + } + + // Flag the presence of PCi_ja, or CDi_ja and/or CROTAia. + if (altlin) { + wcsp->altlin |= altlin; + altlin = 0; + } + + } else if (valtype == FLOAT2) { + // Split MJDREF and JDREF into integer and fraction. + if (special) { + special(wptr, dbl2tmp); + } else { + *((double *)wptr) = dbl2tmp[0]; + *((double *)wptr + 1) = dbl2tmp[1]; + } + + } else if (valtype == STRING) { + // Apply keyword parameterization. + if (ptype == 's') { + int ipx = wcsp->nps++; + wcsp->ps[ipx].i = i; + wcsp->ps[ipx].m = m; + wptr = wcsp->ps[ipx].value; + + } else if (j) { + wptr = *((char (**)[72])wptr) + + (i - 1)*(wcsp->naxis) + (j - 1); + + } else if (i) { + wptr = *((char (**)[72])wptr) + (i - 1); + } + + char *cptr = (char *)wptr; + strcpy(cptr, strtmp); + } + } + } + + if (ipass == npass) { + if (gotone) { + nvalid++; + if (ctrl == 4) { + wcsfprintf(stderr, + "%.80s\n Accepted (%d) as a valid WCS keyrecord.\n", + keyrec, nvalid); + } + + BEGIN(FLUSH); + + } else { + errmsg = "syntactically valid WCS keyrecord has no effect"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + + } else { + BEGIN(FLUSH); + } + } + YY_BREAK +case 427: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3017 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 428: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3022 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 429: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3027 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "invalid keyvalue or malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 430: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3032 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + errmsg = "malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 431: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3037 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == npass) { + if (ctrl < 0) { + // Preserve discards. + keep = keyrec; + + } else if (2 < ctrl) { + nother++; + wcsfprintf(stderr, "%.80s\n Not a recognized WCS keyword.\n", + keyrec); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 432: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 3052 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == npass) { + (*nreject)++; + + if (ctrl%10 == -1) { + keep = keyrec; + } + + if (1 < abs(ctrl%10)) { + wcsfprintf(stderr, "%.80s\n Rejected (%d), %s.\n", + keyrec, *nreject, errmsg); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 433: +/* rule 433 can match eol */ +YY_RULE_SETUP +#line 3068 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + if (ipass == npass && keep) { + if (hptr < keep) { + strncpy(hptr, keep, 80); + } + hptr += 80; + } + + naux += auxprm; + auxprm = 0; + + // Throw away the rest of the line and reset for the next one. + i = j = 0; + n = k = 0; + m = 0; + a = ' '; + + keyrec += 80; + + keytype = 0; + valtype = -1; + vptr = 0x0; + keep = 0x0; + + altlin = 0; + ptype = ' '; + chekval = 0x0; + special = 0x0; + + BEGIN(INITIAL); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(CCCCCia): +case YY_STATE_EOF(iCCCna): +case YY_STATE_EOF(iCCCCn): +case YY_STATE_EOF(TCCCna): +case YY_STATE_EOF(TCCCCn): +case YY_STATE_EOF(CCi_ja): +case YY_STATE_EOF(ijCCna): +case YY_STATE_EOF(TCn_ka): +case YY_STATE_EOF(TCCn_ka): +case YY_STATE_EOF(CROTAi): +case YY_STATE_EOF(iCROTn): +case YY_STATE_EOF(TCROTn): +case YY_STATE_EOF(CCi_ma): +case YY_STATE_EOF(iCn_ma): +case YY_STATE_EOF(iCCn_ma): +case YY_STATE_EOF(TCn_ma): +case YY_STATE_EOF(TCCn_ma): +case YY_STATE_EOF(PROJPm): +case YY_STATE_EOF(CCCCCCCC): +case YY_STATE_EOF(CCCCCCCa): +case YY_STATE_EOF(CCCCna): +case YY_STATE_EOF(CCCCCna): +case YY_STATE_EOF(CCCCn): +case YY_STATE_EOF(CCCCCn): +case YY_STATE_EOF(VALUE): +case YY_STATE_EOF(INTEGER_VAL): +case YY_STATE_EOF(FLOAT_VAL): +case YY_STATE_EOF(FLOAT2_VAL): +case YY_STATE_EOF(STRING_VAL): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(DISCARD): +case YY_STATE_EOF(ERROR): +case YY_STATE_EOF(FLUSH): +#line 3100 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +{ + // End-of-input. + if (ipass == 1) { + int status; + if ((status = wcsbth_init1(&alts, naux, nwcs, wcs)) || + (*nwcs == 0 && ctrl == 0)) { + return status; + } + + if (2 < abs(ctrl%10)) { + if (*nwcs == 1) { + if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) { + wcsfprintf(stderr, "Found one coordinate representation.\n"); + } + } else { + wcsfprintf(stderr, "Found %d coordinate representations.\n", + *nwcs); + } + } + + if (alts.imgherit) npass = 3; + } + + if (ipass++ < npass) { + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + keyrec = header; + *nreject = 0; + + imherit = 1; + + i = j = 0; + k = n = 0; + m = 0; + a = ' '; + + keytype = 0; + valtype = -1; + vptr = 0x0; + + altlin = 0; + ptype = ' '; + chekval = 0x0; + special = 0x0; + + yyrestart(yyin, yyscanner); + + } else { + + if (ctrl < 0) { + *hptr = '\0'; + } else if (ctrl == 1) { + wcsfprintf(stderr, "%d WCS keyrecord%s rejected.\n", + *nreject, (*nreject==1)?" was":"s were"); + } else if (ctrl == 4) { + wcsfprintf(stderr, "\n"); + wcsfprintf(stderr, "%5d keyrecord%s rejected for syntax or " + "other errors,\n", *nreject, (*nreject==1)?" was":"s were"); + wcsfprintf(stderr, "%5d %s recognized as syntactically valid, " + "and\n", nvalid, (nvalid==1)?"was":"were"); + wcsfprintf(stderr, "%5d other%s were not recognized as WCS " + "keyrecords.\n", nother, (nother==1)?"":"s"); + } + + return wcsbth_final(&alts, nwcs, wcs); + } + } + YY_BREAK +case 434: +YY_RULE_SETUP +#line 3168 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" +ECHO; + YY_BREAK +#line 30466 "wcsbth.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + yy_size_t number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + yy_size_t i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + yy_size_t yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +yy_size_t yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 3168 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsbth.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsbth( + char *header, + int nkeyrec, + int relax, + int ctrl, + int keysel, + int *colsel, + int *nreject, + int *nwcs, + struct wcsprm **wcs) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsbth_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsbth_scanner(header, nkeyrec, relax, ctrl, keysel, colsel, + nreject, nwcs, wcs, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + +/*---------------------------------------------------------------------------- +* Perform first-pass tasks: +* +* 1) Count the number of coordinate axes in each of the 27 possible alternate +* image-header coordinate representations. Also count the number of PVi_ma +* and PSi_ma keywords in each representation. +* +* 2) Determine the number of binary table columns that have an image array +* with a coordinate representation (up to 999), and count the number of +* coordinate axes in each of the 27 possible alternates. Also count the +* number of iVn_ma and iSn_ma keywords in each representation. +* +* 3) Determine the number of alternate pixel list coordinate representations +* (up to 27) and the table columns associated with each. Also count the +* number of TVn_ma and TSn_ma keywords in each representation. +* +* In the first pass alts->arridx[icol][27] is used to determine the number of +* axes in each of 27 possible image-header coordinate descriptions (icol == 0) +* and each of the 27 possible coordinate representations for an image array in +* each column. +* +* The elements of alts->pixlist[icol] are used as bit arrays to flag which of +* the 27 possible pixel list coordinate representations are associated with +* each table column. +*---------------------------------------------------------------------------*/ + +int wcsbth_pass1( + int keytype, + int i, + int j, + int n, + int k, + char a, + char ptype, + struct wcsbth_alts *alts) + +{ + if (a == 0) { + // Keywords such as DATE-OBS go along for the ride. + return 0; + } + + int ncol = alts->ncol; + + // Do we need to allocate memory for alts? + if (alts->arridx == 0x0) { + if (ncol == 0) { + // Can only happen if TFIELDS is missing or out-of-sequence. If n and + // k are both zero then we may be processing an image header so leave + // ncol alone - the array will be realloc'd later if required. + if (n || k) { + // The header is mangled, assume the worst. + ncol = 999; + } + } + + if (!(alts->arridx = calloc((1 + ncol)*27, sizeof(short int))) || + !(alts->npv = calloc((1 + ncol)*27, sizeof(unsigned char))) || + !(alts->nps = calloc((1 + ncol)*27, sizeof(unsigned char))) || + !(alts->pixlist = calloc((1 + ncol), sizeof(unsigned int)))) { + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + return WCSHDRERR_MEMORY; + } + + alts->ncol = ncol; + + } else if (n > ncol || k > ncol) { + // Can only happen if TFIELDS or the WCS keyword is wrong; carry on. + ncol = 999; + if (!(alts->arridx = realloc(alts->arridx, + 27*(1 + ncol)*sizeof(short int))) || + !(alts->npv = realloc(alts->npv, + 27*(1 + ncol)*sizeof(unsigned char))) || + !(alts->nps = realloc(alts->nps, + 27*(1 + ncol)*sizeof(unsigned char))) || + !(alts->pixlist = realloc(alts->pixlist, + (1 + ncol)*sizeof(unsigned int)))) { + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + return WCSHDRERR_MEMORY; + } + + // Since realloc() doesn't initialize the extra memory. + for (int icol = (1 + alts->ncol); icol < (1 + ncol); icol++) { + for (int ialt = 0; ialt < 27; ialt++) { + alts->arridx[icol][ialt] = 0; + alts->npv[icol][ialt] = 0; + alts->nps[icol][ialt] = 0; + alts->pixlist[icol] = 0; + } + } + + alts->ncol = ncol; + } + + int ialt = 0; + if (a != ' ') { + ialt = a - 'A' + 1; + } + + // A BINTAB keytype such as LONPna, in conjunction with an IMGAXIS keytype + // causes a table column to be recognized as an image array. + if (keytype & IMGHEAD || keytype & BIMGARR) { + // n == 0 is expected for IMGHEAD keywords. + if (i == 0 && j == 0) { + if (alts->arridx[n][ialt] == 0) { + // Flag that an auxiliary keyword was seen. + alts->arridx[n][ialt] = -1; + } + + } else { + // Record the maximum axis number found. + if (alts->arridx[n][ialt] < i) { + alts->arridx[n][ialt] = i; + } + + if (alts->arridx[n][ialt] < j) { + alts->arridx[n][ialt] = j; + } + } + + if (ptype == 'v') { + alts->npv[n][ialt]++; + } else if (ptype == 's') { + alts->nps[n][ialt]++; + } + } + + // BINTAB keytypes, which apply both to pixel lists as well as binary table + // image arrays, never contribute to recognizing a table column as a pixel + // list axis. A PIXLIST keytype is required for that. + if (keytype == PIXLIST) { + int mask = 1 << ialt; + + // n > 0 for PIXLIST keytypes. + alts->pixlist[n] |= mask; + if (k) alts->pixlist[k] |= mask; + + // Used as a flag over all columns. + alts->pixlist[0] |= mask; + + if (ptype == 'v') { + alts->pixnpv[ialt]++; + } else if (ptype == 's') { + alts->pixnps[ialt]++; + } + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Perform initializations at the end of the first pass: +* +* 1) Determine the required number of wcsprm structs, allocate memory for +* an array of them and initialize each one. +*---------------------------------------------------------------------------*/ + +int wcsbth_init1( + struct wcsbth_alts *alts, + int naux, + int *nwcs, + struct wcsprm **wcs) + +{ + int status = 0; + + if (alts->arridx == 0x0) { + *nwcs = 0; + return 0; + } + + // Determine the number of axes in each pixel list representation. + int ialt, mask, ncol = alts->ncol; + for (ialt = 0, mask = 1; ialt < 27; ialt++, mask <<= 1) { + alts->pixidx[ialt] = 0; + + if (alts->pixlist[0] | mask) { + for (int icol = 1; icol <= ncol; icol++) { + if (alts->pixlist[icol] & mask) { + alts->pixidx[ialt]++; + } + } + } + } + + // Find the total number of coordinate representations. + *nwcs = 0; + alts->imgherit = 0; + int inherit[27]; + for (int ialt = 0; ialt < 27; ialt++) { + inherit[ialt] = 0; + + for (int icol = 1; icol <= ncol; icol++) { + if (alts->arridx[icol][ialt] < 0) { + // No BIMGARR keytype but there's at least one BINTAB. + if (alts->arridx[0][ialt] > 0) { + // There is an IMGAXIS keytype that we will inherit, so count this + // representation. + alts->arridx[icol][ialt] = alts->arridx[0][ialt]; + } else { + alts->arridx[icol][ialt] = 0; + } + } + + if (alts->arridx[icol][ialt]) { + if (alts->arridx[0][ialt]) { + // All IMGHEAD keywords are inherited for this ialt. + inherit[ialt] = 1; + + if (alts->arridx[icol][ialt] < alts->arridx[0][ialt]) { + // The extra axes are also inherited. + alts->arridx[icol][ialt] = alts->arridx[0][ialt]; + } + } + + (*nwcs)++; + } + } + + // Count every "a" found in any IMGHEAD keyword... + if (alts->arridx[0][ialt]) { + if (inherit[ialt]) { + // ...but not if the IMGHEAD keywords will be inherited. + alts->arridx[0][ialt] = 0; + alts->imgherit = 1; + } else if (alts->arridx[0][ialt] > 0) { + (*nwcs)++; + } + } + + // We need a struct for every "a" found in a PIXLIST keyword. + if (alts->pixidx[ialt]) { + (*nwcs)++; + } + } + + + if (*nwcs) { + // Allocate memory for the required number of wcsprm structs. + if (!(*wcs = calloc(*nwcs, sizeof(struct wcsprm)))) { + return WCSHDRERR_MEMORY; + } + + // Initialize each wcsprm struct. + struct wcsprm *wcsp = *wcs; + *nwcs = 0; + for (int icol = 0; icol <= ncol; icol++) { + for (int ialt = 0; ialt < 27; ialt++) { + if (alts->arridx[icol][ialt] > 0) { + // Image-header representations that are not for inheritance + // (icol == 0) or binary table image array representations. + wcsp->flag = -1; + int npvmax = alts->npv[icol][ialt]; + int npsmax = alts->nps[icol][ialt]; + if ((status = wcsinit(1, (int)(alts->arridx[icol][ialt]), wcsp, + npvmax, npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Record the table column number. + wcsp->colnum = icol; + + // On the second pass alts->arridx[icol][27] indexes the array of + // wcsprm structs. + alts->arridx[icol][ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that this column has no WCS for this "a". + alts->arridx[icol][ialt] = -1; + } + } + } + + for (int ialt = 0; ialt < 27; ialt++) { + if (alts->pixidx[ialt]) { + // Pixel lists representations. + wcsp->flag = -1; + int npvmax = alts->pixnpv[ialt]; + int npsmax = alts->pixnps[ialt]; + if ((status = wcsinit(1, (int)(alts->pixidx[ialt]), wcsp, npvmax, + npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Record the pixel list column numbers. + int icol, ix, mask = (1 << ialt); + for (icol = 1, ix = 0; icol <= ncol; icol++) { + if (alts->pixlist[icol] & mask) { + wcsp->colax[ix++] = icol; + } + } + + // alts->pixidx[] indexes the array of wcsprm structs. + alts->pixidx[ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that this column is not a pixel list axis for this "a". + alts->pixidx[ialt] = -1; + } + } + } + + return status; +} + + +/*---------------------------------------------------------------------------- +* Return a pointer to the next wcsprm struct for a particular column number +* and alternate. +*---------------------------------------------------------------------------*/ + +struct wcsprm *wcsbth_idx( + struct wcsprm *wcs, + struct wcsbth_alts *alts, + int keytype, + int n, + char a) + +{ + const char as[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + if (!wcs) return 0x0; + + int iwcs = -1; + for (; iwcs < 0 && alts->ialt < 27; alts->ialt++) { + // Note that a == 0 applies to every alternate, otherwise this + // loop simply determines the appropriate value of alts->ialt. + if (a && a != as[alts->ialt]) continue; + + if (keytype & (IMGHEAD | BIMGARR)) { + for (; iwcs < 0 && alts->icol <= alts->ncol; alts->icol++) { + // Image header keywords, n == 0, apply to all columns, otherwise this + // loop simply determines the appropriate value of alts->icol. + if (n && n != alts->icol) continue; + iwcs = alts->arridx[alts->icol][alts->ialt]; + } + + // Break out of the loop to stop alts->ialt from being incremented. + if (iwcs >= 0) break; + + // Start from scratch for the next alts->ialt. + alts->icol = 0; + } + + if (keytype & (IMGAUX | PIXLIST)) { + iwcs = alts->pixidx[alts->ialt]; + } + } + + return (iwcs >= 0) ? (wcs + iwcs) : 0x0; +} + + +/*---------------------------------------------------------------------------- +* Return the axis number associated with the specified column number in a +* particular pixel list coordinate representation. +*---------------------------------------------------------------------------*/ + +int wcsbth_colax( + struct wcsprm *wcs, + struct wcsbth_alts *alts, + int n, + char a) + +{ + if (!wcs) return 0; + + struct wcsprm *wcsp = wcs; + if (a != ' ') { + wcsp += alts->pixidx[a-'A'+1]; + } + + for (int ix = 0; ix < wcsp->naxis; ix++) { + if (wcsp->colax[ix] == n) { + return ++ix; + } + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret the JDREF, JDREFI, and JDREFF keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_jdref(double *mjdref, const double *jdref) + +{ + // Set MJDREF from JDREF. + if (undefined(mjdref[0] && undefined(mjdref[1]))) { + mjdref[0] = jdref[0] - 2400000.0; + mjdref[1] = jdref[1] - 0.5; + + if (mjdref[1] < 0.0) { + mjdref[0] -= 1.0; + mjdref[1] += 1.0; + } + } + + return 0; +} + +int wcsbth_jdrefi(double *mjdref, const double *jdrefi) + +{ + // Set the integer part of MJDREF from JDREFI. + if (undefined(mjdref[0])) { + mjdref[0] = *jdrefi - 2400000.5; + } + + return 0; +} + + +int wcsbth_jdreff(double *mjdref, const double *jdreff) + +{ + // Set the fractional part of MJDREF from JDREFF. + if (undefined(mjdref[1])) { + mjdref[1] = *jdreff; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret EPOCHa keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_epoch(double *equinox, const double *epoch) + +{ + // If EQUINOXa is currently undefined then set it from EPOCHa. + if (undefined(*equinox)) { + *equinox = *epoch; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret VSOURCEa keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_vsource(double *zsource, const double *vsource) + +{ + const double c = 299792458.0; + + // If ZSOURCEa is currently undefined then set it from VSOURCEa. + if (undefined(*zsource)) { + // Convert relativistic Doppler velocity to redshift. + double beta = *vsource/c; + *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Check validity of a TIMEPIXR keyvalue. +*---------------------------------------------------------------------------*/ + +int wcsbth_timepixr(double timepixr) + +{ + return (timepixr < 0.0 || 1.0 < timepixr); +} + + +/*---------------------------------------------------------------------------- +* Tie up loose ends. +*---------------------------------------------------------------------------*/ + +int wcsbth_final( + struct wcsbth_alts *alts, + int *nwcs, + struct wcsprm **wcs) + +{ + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + + for (int ialt = 0; ialt < *nwcs; ialt++) { + // Interpret -TAB header keywords. + int status; + if ((status = wcstab(*wcs+ialt))) { + wcsvfree(nwcs, wcs); + return status; + } + } + + return 0; +} + diff --git a/deps/wcslib/C/wcsbth.l b/deps/wcslib/C/wcsbth.l new file mode 100644 index 0000000..6c9d412 --- /dev/null +++ b/deps/wcslib/C/wcsbth.l @@ -0,0 +1,3735 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsbth.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* wcsbth.l is a Flex description file containing the definition of a lexical +* scanner for parsing the WCS keyrecords for one or more image arrays and/or +* pixel lists in a FITS binary table header. It can also handle primary image +* and image extension headers. +* +* wcsbth.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description +* of the user interface and operating notes. +* +* Implementation notes +* -------------------- +* wcsbth() may be invoked with an option that causes it to recognize the +* image-header form of WCS keywords as defaults for each alternate coordinate +* representation (up to 27). By design, with this option enabled wcsbth() can +* also handle primary image and image extension headers, effectively treating +* them as a single-column binary table though with WCS keywords of a different +* form. +* +* NAXIS is always 2 for binary tables, it refers to the two-dimensional nature +* of the table. Thus NAXIS does not count the number of image axes in either +* image arrays or pixels lists and for the latter there is not even a formal +* equivalent of WCSAXESa. Hence NAXIS is always ignored and a first pass +* through the header is required to determine the number of images, the number +* of alternate coordinate representations for each image (up to 27), and the +* number of coordinate axes in each representation; this pass also counts the +* number of iPVn_ma and iPSn_ma or TVk_ma and TSk_ma keywords in each +* representation. +* +* On completion of the first pass, the association between column number and +* axis number is defined for each representation of a pixel list. Memory is +* allocated for an array of the required number of wcsprm structs and each of +* these is initialized appropriately. These structs are filled in the second +* pass. +* +* It is permissible for a scalar table column to contain degenerate (single- +* point) image arrays and simultaneously form one axis of a pixel list. +* +* The parser does not check for duplicated keywords, for most keywords it +* accepts the last encountered. +* +* wcsbth() does not currently handle the Green Bank convention. +* +*===========================================================================*/ + +/* Options. */ +%option full +%option never-interactive +%option noinput +%option noyywrap +%option outfile="wcsbth.c" +%option prefix="wcsbth" +%option reentrant +%option extra-type="struct wcsbth_extra *" + +/* Indices for parameterized keywords. */ +Z1 [0-9] +Z2 [0-9]{2} +Z3 [0-9]{3} +Z4 [0-9]{4} + +I1 [1-9] +I2 [1-9][0-9] +I3 [1-9][0-9]{2} +I4 [1-9][0-9]{3} + +/* Alternate coordinate system identifier. */ +ALT [ A-Z] + +/* Keyvalue data types. */ +INTEGER [+-]?[0-9]+ +FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eEdD][+-]?[0-9]+)? +STRING '([^']|'')*' + +/* Inline comment syntax. */ +INLINE " "*(\/.*)? + +/* Exclusive start states. */ +%x CCCCCia iCCCna iCCCCn TCCCna TCCCCn +%x CCi_ja ijCCna TCn_ka TCCn_ka +%x CROTAi iCROTn TCROTn +%x CCi_ma iCn_ma iCCn_ma TCn_ma TCCn_ma +%x PROJPm +%x CCCCCCCC CCCCCCCa +%x CCCCna CCCCCna +%x CCCCn CCCCCn +%x VALUE INTEGER_VAL FLOAT_VAL FLOAT2_VAL STRING_VAL +%x COMMENT DISCARD ERROR FLUSH + +%{ +#include +#include +#include +#include +#include +#include + +#include "wcs.h" +#include "wcshdr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcsutil.h" + + // Codes used for keyvalue data types. +#define INTEGER 0 +#define FLOAT 1 +#define FLOAT2 2 +#define STRING 3 + + // Bit masks used for keyword types: +#define IMGAUX 0x1 // Auxiliary image header, e.g. LONPOLEa or + // DATE-OBS. +#define IMGAXIS 0x2 // Image header with axis number, e.g. + // CTYPEia. +#define IMGHEAD 0x3 // IMGAUX | IMGAXIS, i.e. image header of + // either type. +#define BIMGARR 0x4 // Binary table image array, e.g. iCTYna. +#define PIXLIST 0x8 // Pixel list, e.g. TCTYna. +#define BINTAB 0xC // BIMGARR | PIXLIST, i.e. binary table + // image array (without axis number) or + // pixel list, e.g. LONPna or OBSGXn. + +// User data associated with yyscanner. +struct wcsbth_extra { + // Values passed to YY_INPUT. + char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsbth_scanner(char *header, int nkeyrec, int relax, \ + int ctrl, int keysel, int *colsel, int *nreject, int *nwcs, \ + struct wcsprm **wcs, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// A convenience macro to get around incompatibilities between unput() and +// yyless(): put yytext followed by a blank back onto the input stream. +#define WCSBTH_PUTBACK \ + sprintf(strtmp, "%s ", yytext); \ + size_t iz = strlen(strtmp); \ + while (iz) unput(strtmp[--iz]); + +// Struct used internally for header bookkeeping. +struct wcsbth_alts { + int ncol, ialt, icol, imgherit; + short int (*arridx)[27]; + short int pixidx[27]; + short int pad1; + unsigned int *pixlist; + + unsigned char (*npv)[27]; + unsigned char (*nps)[27]; + unsigned char pixnpv[27]; + unsigned char pixnps[27]; + unsigned char pad2[2]; +}; + +// Internal helper functions. +static YY_DECL; +static int wcsbth_colax(struct wcsprm *wcs, struct wcsbth_alts *alts, int k, + char a); +static int wcsbth_final(struct wcsbth_alts *alts, int *nwcs, + struct wcsprm **wcs); +static struct wcsprm *wcsbth_idx(struct wcsprm *wcs, struct wcsbth_alts *alts, + int keytype, int n, char a); +static int wcsbth_init1(struct wcsbth_alts *alts, int auxprm, int *nwcs, + struct wcsprm **wcs); +static int wcsbth_pass1(int keytype, int i, int j, int n, int k, char a, + char ptype, struct wcsbth_alts *alts); + +// Helper functions for keywords that require special handling. +static int wcsbth_jdref(double *wptr, const double *jdref); +static int wcsbth_jdrefi(double *wptr, const double *jdrefi); +static int wcsbth_jdreff(double *wptr, const double *jdreff); +static int wcsbth_epoch(double *wptr, const double *epoch); +static int wcsbth_vsource(double *wptr, const double *vsource); + +// Helper functions for keyvalue validity checking. +static int wcsbth_timepixr(double timepixr); + +%} + +%% + char *errmsg, errtxt[80], *keyname, strtmp[80]; + int inttmp; + double dbltmp, dbl2tmp[2]; + struct auxprm auxtem; + struct wcsprm wcstem; + + // Initialize returned values. + *nreject = 0; + *nwcs = 0; + *wcs = 0x0; + + // Our handle on the input stream. + char *keyrec = header; + char *hptr = header; + char *keep = 0x0; + + // For keeping tallies of keywords found. + int nvalid = 0; + int nother = 0; + + // Used to flag image header keywords that are always inherited. + int imherit = 1; + + // If strict, then also reject. + if (relax & WCSHDR_strict) relax |= WCSHDR_reject; + + // Keyword indices, as used in the WCS papers, e.g. iVn_ma, TPn_ka. + int i = 0; + int j = 0; + int k = 0; + int n = 0; + int m = 0; + char a = ' '; + + // Header bookkeeping. + struct wcsbth_alts alts; + alts.ncol = 0; + alts.arridx = 0x0; + alts.pixlist = 0x0; + alts.npv = 0x0; + alts.nps = 0x0; + + for (int ialt = 0; ialt < 27; ialt++) { + alts.pixidx[ialt] = 0; + alts.pixnpv[ialt] = 0; + alts.pixnps[ialt] = 0; + } + + // For decoding the keyvalue. + int keytype = 0; + int valtype = -1; + void *vptr = 0x0; + + // For keywords that require special handling. + int altlin = 0; + char ptype = ' '; + int (*chekval)(double) = 0x0; + int (*special)(double *, const double *) = 0x0; + struct auxprm *auxp = 0x0; + int auxprm = 0; + int naux = 0; + + // Selection by column number. + int nsel = colsel ? colsel[0] : 0; + int incl = (nsel > 0); + char exclude[1000]; + for (int icol = 0; icol < 1000; icol++) { + exclude[icol] = incl; + } + for (int icol = 1; icol <= abs(nsel); icol++) { + int itmp = colsel[icol]; + if (0 < itmp && itmp < 1000) { + exclude[itmp] = !incl; + } + } + exclude[0] = 0; + + // Selection by keyword type. + if (keysel) { + int itmp = keysel; + keysel = 0; + if (itmp & WCSHDR_IMGHEAD) keysel |= IMGHEAD; + if (itmp & WCSHDR_BIMGARR) keysel |= BIMGARR; + if (itmp & WCSHDR_PIXLIST) keysel |= PIXLIST; + } + if (keysel == 0) { + keysel = IMGHEAD | BINTAB; + } + + // Control variables. + int ipass = 1; + int npass = 2; + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return WCSHDRERR_PARSER; + } + + BEGIN(INITIAL); + + +^TFIELDS" = "" "*{INTEGER} { + if (ipass == 1) { + if (alts.ncol == 0) { + sscanf(yytext, "TFIELDS = %d", &(alts.ncol)); + BEGIN(FLUSH); + } else { + errmsg = "duplicate or out-of-sequence TFIELDS keyword"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + } + +^WCSAXES{ALT}=" "" "*{INTEGER} { + if (!(keysel & IMGAXIS)) { + // Ignore this key type. + BEGIN(DISCARD); + + } else { + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "WCSAXES%c= %d", &a, &i); + + if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCSAXESa"; + keytype = IMGAXIS; + BEGIN(COMMENT); + } + + } else if (relax & WCSHDR_reject) { + errmsg = "image-header keyword WCSAXESa in binary table"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + } + +^WCAX{I1}{ALT}" = "" "*{INTEGER} | +^WCAX{I2}{ALT}" = "" "*{INTEGER} | +^WCAX{I3}{ALT}"= "" "*{INTEGER} { + keyname = "WCAXna"; + + // Note that a blank in the sscanf() format string matches zero or + // more of them in the input. + sscanf(yytext, "WCAX%d%c = %d", &n, &a, &i); + + if (!(keysel & BIMGARR) || exclude[n]) { + // Ignore this key type or column. + BEGIN(DISCARD); + + } else if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCAXna"; + keytype = IMGAXIS; + BEGIN(COMMENT); + } + } + +^WCST{I1}{ALT}" = "" "*{STRING} | +^WCST{I2}{ALT}" = "" "*{STRING} | +^WCST{I3}{ALT}"= "" "*{STRING} { + // Cross-reference supplier. + keyname = "WCSTna"; + errmsg = "cross-references are not implemented"; + BEGIN(ERROR); + } + +^WCSX{I1}{ALT}" = "" "*{STRING} | +^WCSX{I2}{ALT}" = "" "*{STRING} | +^WCSX{I3}{ALT}"= "" "*{STRING} { + // Cross-reference consumer. + keyname = "WCSXna"; + errmsg = "cross-references are not implemented"; + BEGIN(ERROR); + } + +^CRPIX { + valtype = FLOAT; + vptr = &(wcstem.crpix); + + keyname = "CRPIXja"; + BEGIN(CCCCCia); + } + +^{I1}CRP | +^{I1}CRPX { + valtype = FLOAT; + vptr = &(wcstem.crpix); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "jCRPna"; + BEGIN(iCCCna); + } else { + keyname = "jCRPXn"; + BEGIN(iCCCCn); + } + } + +^TCRP | +^TCRPX { + valtype = FLOAT; + vptr = &(wcstem.crpix); + + if (yyleng == 4) { + keyname = "TCRPna"; + BEGIN(TCCCna); + } else { + keyname = "TCRPXn"; + BEGIN(TCCCCn); + } + } + +^PC { + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + keyname = "PCi_ja"; + BEGIN(CCi_ja); + } + +^{I2}PC { + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + sscanf(yytext, "%1d%1d", &i, &j); + + keyname = "ijPCna"; + BEGIN(ijCCna); + } + +^TP | +^TPC { + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + if (yyleng == 2) { + keyname = "TPn_ka"; + BEGIN(TCn_ka); + } else { + keyname = "TPCn_ka"; + BEGIN(TCCn_ka); + } + } + +^CD { + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + keyname = "CDi_ja"; + BEGIN(CCi_ja); + } + +^{I2}CD { + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + sscanf(yytext, "%1d%1d", &i, &j); + + keyname = "ijCDna"; + BEGIN(ijCCna); + } + +^TC | +^TCD { + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + if (yyleng == 2) { + keyname = "TCn_ka"; + BEGIN(TCn_ka); + } else { + keyname = "TCDn_ka"; + BEGIN(TCCn_ka); + } + } + +^CDELT { + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + keyname = "CDELTia"; + BEGIN(CCCCCia); + } + +^{I1}CDE | +^{I1}CDLT { + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCDEna"; + BEGIN(iCCCna); + } else { + keyname = "iCDLTn"; + BEGIN(iCCCCn); + } + } + +^TCDE | +^TCDLT { + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + if (yyleng == 4) { + keyname = "TCDEna"; + BEGIN(TCCCna); + } else { + keyname = "TCDLTn"; + BEGIN(TCCCCn); + } + } + +^CROTA { + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "CROTAi"; + BEGIN(CROTAi); + } + +^{I1}CROT { + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + sscanf(yytext, "%d", &i); + + keyname = "iCROTn"; + BEGIN(iCROTn); + } + +^TCROT { + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "TCROTn"; + BEGIN(TCROTn); + } + +^CUNIT { + valtype = STRING; + vptr = &(wcstem.cunit); + + keyname = "CUNITia"; + BEGIN(CCCCCia); + } + +^{I1}CUN | +^{I1}CUNI { + valtype = STRING; + vptr = &(wcstem.cunit); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCUNna"; + BEGIN(iCCCna); + } else { + keyname = "iCUNIn"; + BEGIN(iCCCCn); + } + } + +^TCUN | +^TCUNI { + valtype = STRING; + vptr = &(wcstem.cunit); + + if (yyleng == 4) { + keyname = "TCUNna"; + BEGIN(TCCCna); + } else { + keyname = "TCUNIn"; + BEGIN(TCCCCn); + } + } + +^CTYPE { + valtype = STRING; + vptr = &(wcstem.ctype); + + keyname = "CTYPEia"; + BEGIN(CCCCCia); + } + +^{I1}CTY | +^{I1}CTYP { + valtype = STRING; + vptr = &(wcstem.ctype); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCTYna"; + BEGIN(iCCCna); + } else { + keyname = "iCTYPn"; + BEGIN(iCCCCn); + } + } + +^TCTY | +^TCTYP { + valtype = STRING; + vptr = &(wcstem.ctype); + + if (yyleng == 4) { + keyname = "TCTYna"; + BEGIN(TCCCna); + } else { + keyname = "TCTYPn"; + BEGIN(TCCCCn); + } + } + +^CRVAL { + valtype = FLOAT; + vptr = &(wcstem.crval); + + keyname = "CRVALia"; + BEGIN(CCCCCia); + } + +^{I1}CRV | +^{I1}CRVL { + valtype = FLOAT; + vptr = &(wcstem.crval); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCRVna"; + BEGIN(iCCCna); + } else { + keyname = "iCRVLn"; + BEGIN(iCCCCn); + } + } + +^TCRV | +^TCRVL { + valtype = FLOAT; + vptr = &(wcstem.crval); + + if (yyleng == 4) { + keyname = "TCRVna"; + BEGIN(TCCCna); + } else { + keyname = "TCRVLn"; + BEGIN(TCCCCn); + } + } + +^LONPOLE | +^LONP { + valtype = FLOAT; + vptr = &(wcstem.lonpole); + + if (yyleng == 7) { + keyname = "LONPOLEa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "LONPna"; + BEGIN(CCCCna); + } + } + +^LATPOLE | +^LATP { + valtype = FLOAT; + vptr = &(wcstem.latpole); + + if (yyleng == 7) { + keyname = "LATPOLEa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "LATPna"; + BEGIN(CCCCna); + } + } + +^RESTFREQ | +^RESTFRQ | +^RFRQ { + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + if (yyleng == 8) { + if (relax & WCSHDR_strict) { + errmsg = "the RESTFREQ keyword is deprecated, use RESTFRQa"; + BEGIN(ERROR); + + } else { + unput(' '); + + keyname = "RESTFREQ"; + BEGIN(CCCCCCCa); + } + + } else if (yyleng == 7) { + keyname = "RESTFRQa"; + BEGIN(CCCCCCCa); + + } else { + keyname = "RFRQna"; + BEGIN(CCCCna); + } + } + +^RESTWAV | +^RWAV { + valtype = FLOAT; + vptr = &(wcstem.restwav); + + if (yyleng == 7) { + keyname = "RESTWAVa"; + BEGIN(CCCCCCCa); + } else { + keyname = "RWAVna"; + BEGIN(CCCCna); + } + } + +^PV { + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + keyname = "PVi_ma"; + BEGIN(CCi_ma); + } + +^{I1}V | +^{I1}PV { + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + sscanf(yytext, "%d", &i); + + if (yyleng == 2) { + keyname = "iVn_ma"; + BEGIN(iCn_ma); + } else { + keyname = "iPVn_ma"; + BEGIN(iCCn_ma); + } + } + +^TV | +^TPV { + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + if (yyleng == 2) { + keyname = "TVn_ma"; + BEGIN(TCn_ma); + } else { + keyname = "TPVn_ma"; + BEGIN(TCCn_ma); + } + } + +^PROJP { + valtype = FLOAT; + vptr = &(wcstem.pv); + ptype = 'v'; + + keyname = "PROJPm"; + BEGIN(PROJPm); + } + +^PS { + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + keyname = "PSi_ma"; + BEGIN(CCi_ma); + } + +^{I1}S | +^{I1}PS { + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + sscanf(yytext, "%d", &i); + + if (yyleng == 2) { + keyname = "iSn_ma"; + BEGIN(iCn_ma); + } else { + keyname = "iPSn_ma"; + BEGIN(iCCn_ma); + } + } + +^TS | +^TPS { + valtype = STRING; + vptr = &(wcstem.ps); + ptype = 's'; + + if (yyleng == 2) { + keyname = "TSn_ma"; + BEGIN(TCn_ma); + } else { + keyname = "TPSn_ma"; + BEGIN(TCCn_ma); + } + } + +^VELREF{ALT}" " { + sscanf(yytext, "VELREF%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the VELREF keyword is deprecated, use SPECSYSa"; + BEGIN(ERROR); + + } else if (a == ' ' || (relax & WCSHDR_VELREFa)) { + valtype = INTEGER; + vptr = &(wcstem.velref); + + unput(a); + + keyname = "VELREF"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "VELREF keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^CNAME { + valtype = STRING; + vptr = &(wcstem.cname); + + keyname = "CNAMEia"; + BEGIN(CCCCCia); + } + +^{I1}CNA | +^{I1}CNAM { + valtype = STRING; + vptr = &(wcstem.cname); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCNAna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCNAMn"; + BEGIN(iCCCCn); + } + } + +^TCNA | +^TCNAM { + valtype = STRING; + vptr = &(wcstem.cname); + + if (yyleng == 4) { + keyname = "TCNAna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCNAMn"; + BEGIN(TCCCCn); + } + } + +^CRDER { + valtype = FLOAT; + vptr = &(wcstem.crder); + + keyname = "CRDERia"; + BEGIN(CCCCCia); + } + +^{I1}CRD | +^{I1}CRDE { + valtype = FLOAT; + vptr = &(wcstem.crder); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCRDna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCRDEn"; + BEGIN(iCCCCn); + } + } + +^TCRD | +^TCRDE { + valtype = FLOAT; + vptr = &(wcstem.crder); + + if (yyleng == 4) { + keyname = "TCRDna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCRDEn"; + BEGIN(TCCCCn); + } + } + +^CSYER { + valtype = FLOAT; + vptr = &(wcstem.csyer); + + keyname = "CSYERia"; + BEGIN(CCCCCia); + } + +^{I1}CSY | +^{I1}CSYE { + valtype = FLOAT; + vptr = &(wcstem.csyer); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCSYna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCSYEn"; + BEGIN(iCCCCn); + } + } + +^TCSY | +^TCSYE { + valtype = FLOAT; + vptr = &(wcstem.csyer); + + if (yyleng == 4) { + keyname = "TCSYna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCSYEn"; + BEGIN(TCCCCn); + } + } + +^CZPHS { + valtype = FLOAT; + vptr = &(wcstem.czphs); + + keyname = "CZPHSia"; + BEGIN(CCCCCia); + } + +^{I1}CZP | +^{I1}CZPH { + valtype = FLOAT; + vptr = &(wcstem.czphs); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCZPna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCZPHn"; + BEGIN(iCCCCn); + } + } + +^TCZP | +^TCZPH { + valtype = FLOAT; + vptr = &(wcstem.czphs); + + if (yyleng == 4) { + keyname = "TCZPna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCZPHn"; + BEGIN(TCCCCn); + } + } + +^CPERI { + valtype = FLOAT; + vptr = &(wcstem.cperi); + + keyname = "CPERIia"; + BEGIN(CCCCCia); + } + +^{I1}CPR | +^{I1}CPER { + valtype = FLOAT; + vptr = &(wcstem.cperi); + + sscanf(yytext, "%d", &i); + + if (yyleng == 4) { + keyname = "iCPRna"; + BEGIN(iCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "iCPERn"; + BEGIN(iCCCCn); + } + } + +^TCPR | +^TCPER { + valtype = FLOAT; + vptr = &(wcstem.cperi); + + if (yyleng == 4) { + keyname = "TCPRna"; + BEGIN(TCCCna); + } else { + if (!(relax & WCSHDR_CNAMn)) vptr = 0x0; + keyname = "TCPERn"; + BEGIN(TCCCCn); + } + } + +^WCSNAME | +^WCSN | +^TWCS { + valtype = STRING; + vptr = wcstem.wcsname; + + if (yyleng == 7) { + keyname = "WCSNAMEa"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else { + if (*yytext == 'W') { + keyname = "WCSNna"; + } else { + keyname = "TWCSna"; + } + BEGIN(CCCCna); + } + } + +^TIMESYS" " { + valtype = STRING; + vptr = wcstem.timesys; + + keyname = "TIMESYS"; + BEGIN(CCCCCCCC); + } + +^TREFPOS" " | +^TRPOS { + valtype = STRING; + vptr = wcstem.trefpos; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "TREFPOS"; + BEGIN(CCCCCCCC); + } else { + keyname = "TRPOSn"; + BEGIN(CCCCCn); + } + } + +^TREFDIR" " | +^TRDIR { + valtype = STRING; + vptr = wcstem.trefdir; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "TREFDIR"; + BEGIN(CCCCCCCC); + } else { + keyname = "TRDIRn"; + BEGIN(CCCCCn); + } + } + +^PLEPHEM" " { + valtype = STRING; + vptr = wcstem.plephem; + + keyname = "PLEPHEM"; + BEGIN(CCCCCCCC); + } + +^TIMEUNIT { + valtype = STRING; + vptr = wcstem.timeunit; + + keyname = "TIMEUNIT"; + BEGIN(CCCCCCCC); + } + +^DATEREF" " | +^DATE-REF { + if ((yytext[4] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = STRING; + vptr = wcstem.dateref; + + keyname = "DATEREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the DATE-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^MJDREF" " | +^MJD-REF" " { + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + + keyname = "MJDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^MJDREFI" " | +^MJD-REFI { + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + + keyname = "MJDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^MJDREFF" " | +^MJD-REFF { + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref + 1; + + keyname = "MJDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^JDREF" " | +^JD-REF" " { + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + special = wcsbth_jdref; + + keyname = "JDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^JDREFI" " | +^JD-REFI { + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcsbth_jdrefi; + + keyname = "JDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^JDREFF" " | +^JD-REFF { + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcsbth_jdreff; + + keyname = "JDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^TIMEOFFS { + valtype = FLOAT; + vptr = &(wcstem.timeoffs); + + keyname = "TIMEOFFS"; + BEGIN(CCCCCCCC); + } + +^DATE-OBS { + valtype = STRING; + vptr = wcstem.dateobs; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-OBS"; + imherit = 0; + BEGIN(CCCCCCCC); + } + +^DOBS{I1}" " | +^DOBS{I2}" " | +^DOBS{I3}" " { + valtype = STRING; + vptr = wcstem.dateobs; + + if (relax & WCSHDR_DOBSn) { + yyless(4); + + keyname = "DOBSn"; + BEGIN(CCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "DOBSn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^DATE-BEG { + valtype = STRING; + vptr = wcstem.datebeg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-BEG"; + BEGIN(CCCCCCCC); + } + +^DATE-AVG | +^DAVG { + valtype = STRING; + vptr = wcstem.dateavg; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "DATE-AVG"; + BEGIN(CCCCCCCC); + } else { + keyname = "DAVGn"; + BEGIN(CCCCn); + } + } + +^DATE-END { + valtype = STRING; + vptr = wcstem.dateend; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-END"; + BEGIN(CCCCCCCC); + } + +^MJD-OBS" " | +^MJDOB { + valtype = FLOAT; + vptr = &(wcstem.mjdobs); + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "MJD-OBS"; + imherit = 0; + BEGIN(CCCCCCCC); + } else { + keyname = "MJDOBn"; + BEGIN(CCCCCn); + } + } + +^MJD-BEG" " { + valtype = FLOAT; + vptr = &(wcstem.mjdbeg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-BEG"; + BEGIN(CCCCCCCC); + } + +^MJD-AVG" " | +^MJDA { + valtype = FLOAT; + vptr = &(wcstem.mjdavg); + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "MJD-AVG"; + BEGIN(CCCCCCCC); + } else { + keyname = "MJDAn"; + BEGIN(CCCCn); + } + } + +^MJD-END" " { + valtype = FLOAT; + vptr = &(wcstem.mjdend); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-END"; + BEGIN(CCCCCCCC); + } + +^JEPOCH" " { + valtype = FLOAT; + vptr = &(wcstem.jepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "JEPOCH"; + BEGIN(CCCCCCCC); + } + +^BEPOCH" " { + valtype = FLOAT; + vptr = &(wcstem.bepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "BEPOCH"; + BEGIN(CCCCCCCC); + } + +^TSTART" " { + valtype = FLOAT; + vptr = &(wcstem.tstart); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTART"; + BEGIN(CCCCCCCC); + } + +^TSTOP" " { + valtype = FLOAT; + vptr = &(wcstem.tstop); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTOP"; + BEGIN(CCCCCCCC); + } + +^XPOSURE" " { + valtype = FLOAT; + vptr = &(wcstem.xposure); + if (ctrl < -10) keep = keyrec; + + keyname = "XPOSURE"; + BEGIN(CCCCCCCC); + } + +^TELAPSE" " { + valtype = FLOAT; + vptr = &(wcstem.telapse); + if (ctrl < -10) keep = keyrec; + + keyname = "TELAPSE"; + BEGIN(CCCCCCCC); + } + +^TIMSYER" " { + valtype = FLOAT; + vptr = &(wcstem.timsyer); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMSYER"; + BEGIN(CCCCCCCC); + } + +^TIMRDER" " { + valtype = FLOAT; + vptr = &(wcstem.timrder); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMRDER"; + BEGIN(CCCCCCCC); + } + +^TIMEDEL" " { + valtype = FLOAT; + vptr = &(wcstem.timedel); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEDEL"; + BEGIN(CCCCCCCC); + } + +^TIMEPIXR { + valtype = FLOAT; + vptr = &(wcstem.timepixr); + chekval = wcsbth_timepixr; + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEPIXR"; + BEGIN(CCCCCCCC); + } + +^OBSGEO-X | +^OBSGX { + valtype = FLOAT; + vptr = wcstem.obsgeo; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-X"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGXn"; + BEGIN(CCCCCn); + } + } + +^OBSGEO-Y | +^OBSGY { + valtype = FLOAT; + vptr = wcstem.obsgeo + 1; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-Y"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGYn"; + BEGIN(CCCCCn); + } + } + +^OBSGEO-Z | +^OBSGZ { + valtype = FLOAT; + vptr = wcstem.obsgeo + 2; + + if (yyleng == 8) { + if (ctrl < -10) keep = keyrec; + keyname = "OBSGEO-Z"; + BEGIN(CCCCCCCC); + } else { + keyname = "OBSGZn"; + BEGIN(CCCCCn); + } + } + +^OBSGEO-L { + valtype = FLOAT; + vptr = wcstem.obsgeo + 3; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-L"; + BEGIN(CCCCCCCC); + } + +^OBSGL{I1}" " | +^OBSGL{I2}" " | +^OBSGL{I3} { + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGLn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGLn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^OBSGEO-B { + valtype = FLOAT; + vptr = wcstem.obsgeo + 4; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-B"; + BEGIN(CCCCCCCC); + } + +^OBSGB{I1}" " | +^OBSGB{I2}" " | +^OBSGB{I3} { + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGBn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGBn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^OBSGEO-H { + valtype = FLOAT; + vptr = wcstem.obsgeo + 5; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-H"; + BEGIN(CCCCCCCC); + } + +^OBSGH{I1}" " | +^OBSGH{I2}" " | +^OBSGH{I3} { + valtype = STRING; + vptr = wcstem.obsgeo + 3; + + if (relax & WCSHDR_OBSGLBHn) { + yyless(5); + + keyname = "OBSGHn"; + BEGIN(CCCCCn); + + } else if (relax & WCSHDR_reject) { + errmsg = "OBSGHn keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^OBSORBIT { + valtype = STRING; + vptr = wcstem.obsorbit; + + keyname = "OBSORBIT"; + BEGIN(CCCCCCCC); + } + +^RADESYS | +^RADE { + valtype = STRING; + vptr = wcstem.radesys; + + if (yyleng == 7) { + keyname = "RADESYSa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "RADEna"; + BEGIN(CCCCna); + } + } + +^RADECSYS { + if (relax & WCSHDR_RADECSYS) { + valtype = STRING; + vptr = wcstem.radesys; + + unput(' '); + + keyname = "RADECSYS"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the RADECSYS keyword is deprecated, use RADESYSa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^EPOCH{ALT}" " { + sscanf(yytext, "EPOCH%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the EPOCH keyword is deprecated, use EQUINOXa"; + BEGIN(ERROR); + + } else if (a == ' ' || (relax & WCSHDR_EPOCHa)) { + valtype = FLOAT; + vptr = &(wcstem.equinox); + special = wcsbth_epoch; + + unput(a); + + keyname = "EPOCH"; + imherit = 0; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "EPOCH keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^EQUINOX | +^EQUI { + valtype = FLOAT; + vptr = &(wcstem.equinox); + + if (yyleng == 7) { + keyname = "EQUINOXa"; + imherit = 0; + BEGIN(CCCCCCCa); + } else { + keyname = "EQUIna"; + BEGIN(CCCCna); + } + } + +^SPECSYS | +^SPEC { + valtype = STRING; + vptr = wcstem.specsys; + + if (yyleng == 7) { + keyname = "SPECSYSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SPECna"; + BEGIN(CCCCna); + } + } + +^SSYSOBS | +^SOBS { + valtype = STRING; + vptr = wcstem.ssysobs; + + if (yyleng == 7) { + keyname = "SSYSOBSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SOBSna"; + BEGIN(CCCCna); + } + } + +^VELOSYS | +^VSYS { + valtype = FLOAT; + vptr = &(wcstem.velosys); + + if (yyleng == 7) { + keyname = "VELOSYSa"; + BEGIN(CCCCCCCa); + } else { + keyname = "VSYSna"; + BEGIN(CCCCna); + } + } + +^VSOURCE{ALT} { + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcsbth_vsource; + + yyless(7); + + keyname = "VSOURCEa"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the VSOURCEa keyword is deprecated, use ZSOURCEa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^VSOU{I1}{ALT}" " | +^VSOU{I2}{ALT}" " | +^VSOU{I3}{ALT} { + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcsbth_vsource; + + yyless(4); + keyname = "VSOUna"; + BEGIN(CCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = "VSOUna keyword is deprecated, use ZSOUna"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +^ZSOURCE | +^ZSOU { + valtype = FLOAT; + vptr = &(wcstem.zsource); + + if (yyleng == 7) { + keyname = "ZSOURCEa"; + BEGIN(CCCCCCCa); + } else { + keyname = "ZSOUna"; + BEGIN(CCCCna); + } + } + +^SSYSSRC | +^SSRC { + valtype = STRING; + vptr = wcstem.ssyssrc; + + if (yyleng == 7) { + keyname = "SSYSSRCa"; + BEGIN(CCCCCCCa); + } else { + keyname = "SSRCna"; + BEGIN(CCCCna); + } + } + +^VELANGL | +^VANG { + valtype = FLOAT; + vptr = &(wcstem.velangl); + + if (yyleng == 7) { + keyname = "VELANGLa"; + BEGIN(CCCCCCCa); + } else { + keyname = "VANGna"; + BEGIN(CCCCna); + } + } + +^RSUN_REF { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.rsun_ref); + + keyname = "RSUN_REF"; + BEGIN(CCCCCCCC); + } + +^DSUN_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.dsun_obs); + + keyname = "DSUN_OBS"; + BEGIN(CCCCCCCC); + } + +^CRLN_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.crln_obs); + + keyname = "CRLN_OBS"; + BEGIN(CCCCCCCC); + } + +^HGLN_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hgln_obs); + + keyname = "HGLN_OBS"; + BEGIN(CCCCCCCC); + } + +^CRLT_OBS | +^HGLT_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hglt_obs); + + keyname = "HGLT_OBS"; + BEGIN(CCCCCCCC); + } + +^A_RADIUS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.a_radius); + + keyname = "A_RADIUS"; + BEGIN(CCCCCCCC); + } + +^B_RADIUS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.b_radius); + + keyname = "B_RADIUS"; + BEGIN(CCCCCCCC); + } + +^C_RADIUS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.c_radius); + + keyname = "C_RADIUS"; + BEGIN(CCCCCCCC); + } + +^BLON_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blon_obs); + + keyname = "BLON_OBS"; + BEGIN(CCCCCCCC); + } + +^BLAT_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blat_obs); + + keyname = "BLAT_OBS"; + BEGIN(CCCCCCCC); + } + +^BDIS_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.bdis_obs); + + keyname = "BDIS_OBS"; + BEGIN(CCCCCCCC); + } + +^END" "{77} { + if (yyextra->nkeyrec) { + yyextra->nkeyrec = 0; + errmsg = "keyrecords following the END keyrecord were ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + +^. { + BEGIN(DISCARD); + } + +{I1}{ALT}" " | +{I2}{ALT} { + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d%c", &i, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +0{I1}{ALT} | +00{I1} { + if (relax & WCSHDR_ALLIMG) { + if (relax & WCSHDR_reject) { + // Violates the basic FITS standard. + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +0{ALT}" " | +00{ALT} | +{Z3} { + // Anything that has fallen through to this point must contain + // an invalid axis number. + if (relax & WCSHDR_ALLIMG) { + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. { + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "keyword looks very much like %s but isn't", + keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{I1}" " | +{I2}" " | +{I3} | +{I1}" " | +{I2}" " | +{I3} { + if (vptr) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +{I1}[A-Z]" " | +{I2}[A-Z] | +{I1}[A-Z]" " | +{I2}[A-Z] { + if (vptr && (relax & WCSHDR_LONGKEY)) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCCCn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + if (!vptr) { + sprintf(errmsg, "%s keyword is non-standard", keyname); + } else { + sprintf(errmsg, + "%s keyword may not have an alternate version code", keyname); + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. | +. { + BEGIN(DISCARD); + } + +{I1}{ALT}" " | +{I2}{ALT}" " | +{I3}{ALT} | +{I1}{ALT}" " | +{I2}{ALT}" " | +{I3}{ALT} { + sscanf(yytext, "%d%c", &n, &a); + if (YY_START == TCCCna) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCCCna) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + +. | +. { + BEGIN(DISCARD); + } + +{I1}_{I1}{ALT}" " | +{I1}_{I2}{ALT}" " | +{I2}_{I1}{ALT}" " | +{I2}_{I2}{ALT} { + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +0{I1}_{I1}{ALT}" " | +{I1}_0{I1}{ALT}" " | +00{I1}_{I1}{ALT} | +0{I1}_0{I1}{ALT} | +{I1}_00{I1}{ALT} | +000{I1}_{I1} | +00{I1}_0{I1} | +0{I1}_00{I1} | +{I1}_000{I1} | +0{I1}_{I2}{ALT} | +{I1}_0{I2}{ALT} | +00{I1}_{I2} | +0{I1}_0{I2} | +{I1}_00{I2} | +0{I2}_{I1}{ALT} | +{I2}_0{I1}{ALT} | +00{I2}_{I1} | +0{I2}_0{I1} | +{I2}_00{I1} | +0{I2}_{I2} | +{I2}_0{I2} { + if (relax & WCSHDR_ALLIMG) { + if (((altlin == 1) && (relax & WCSHDR_PC0i_0ja)) || + ((altlin == 2) && (relax & WCSHDR_CD0i_0ja))) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}_{Z1}{ALT}" " | +{Z2}_{Z1}{ALT}" " | +{Z1}_{Z2}{ALT}" " | +{Z3}_{Z1}{ALT} | +{Z2}_{Z2}{ALT} | +{Z1}_{Z3}{ALT} | +{Z4}_{Z1} | +{Z3}_{Z2} | +{Z2}_{Z3} | +{Z1}_{Z4} { + // Anything that has fallen through to this point must contain + // an invalid axis number. + if (relax & WCSHDR_ALLIMG) { + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}-{Z1}{ALT}" " | +{Z2}-{Z1}{ALT}" " | +{Z1}-{Z2}{ALT}" " | +{Z3}-{Z1}{ALT} | +{Z2}-{Z2}{ALT} | +{Z1}-{Z3}{ALT} | +{Z4}-{Z1} | +{Z3}-{Z2} | +{Z2}-{Z3} | +{Z1}-{Z4} { + if (relax & WCSHDR_ALLIMG) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}{6} { + // This covers the defunct forms CD00i00j and PC00i00j. + if (relax & WCSHDR_ALLIMG) { + if (((altlin == 1) && (relax & WCSHDR_PC00i00j)) || + ((altlin == 2) && (relax & WCSHDR_CD00i00j))) { + sscanf(yytext, "%3d%3d", &i, &j); + a = ' '; + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "this form of the %s keyword is deprecated, use %s", + keyname, keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "deprecated image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. { + BEGIN(DISCARD); + } + +{I1}{ALT}" " | +{I2}{ALT}" " | +{I3}{ALT} { + sscanf(yytext, "%d%c", &n, &a); + keytype = BIMGARR; + BEGIN(VALUE); + } + +{I1}_{I1}{ALT}" " | +{I1}_{I2}{ALT} | +{I2}_{I1}{ALT} | +{I1}_{I3} | +{I2}_{I2} | +{I3}_{I1} { + if (relax & WCSHDR_LONGKEY) { + WCSBTH_PUTBACK; + BEGIN(TCn_ka); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "%s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. { + BEGIN(DISCARD); + } + +{I1}_{I1}{ALT}" " | +{I1}_{I2}{ALT}" " | +{I2}_{I1}{ALT}" " | +{I1}_{I3}{ALT} | +{I2}_{I2}{ALT} | +{I3}_{I1}{ALT} { + sscanf(yytext, "%d_%d%c", &n, &k, &a); + i = wcsbth_colax(*wcs, &alts, n, a); + j = wcsbth_colax(*wcs, &alts, k, a); + keytype = PIXLIST; + BEGIN(VALUE); + } + +{I1}_{I4} | +{I2}_{I3} | +{I3}_{I2} | +{I4}_{I1} { + sscanf(yytext, "%d_%d", &n, &k); + a = ' '; + i = wcsbth_colax(*wcs, &alts, n, a); + j = wcsbth_colax(*wcs, &alts, k, a); + keytype = PIXLIST; + BEGIN(VALUE); + } + +. { + BEGIN(DISCARD); + } + +{Z1}{ALT}" " | +{Z2}{ALT} | +{Z3} { + if (relax & WCSHDR_ALLIMG) { + a = ' '; + sscanf(yytext, "%d%c", &i, &a); + + if (relax & WCSHDR_strict) { + errmsg = "the CROTAn keyword is deprecated, use PCi_ja"; + BEGIN(ERROR); + + } else if (a == ' ' || relax & WCSHDR_CROTAia) { + yyless(0); + BEGIN(CCCCCia); + + } else if (relax & WCSHDR_reject) { + errmsg = "CROTAn keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "deprecated image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. { + if (relax & WCSHDR_ALLIMG) { + yyless(0); + BEGIN(CCCCCia); + } else { + // Let it go. + BEGIN(DISCARD); + } + } + +{I1}" " | +{I2}" " | +{I3} | +{I1}" " | +{I2}" " | +{I3} { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); + } + +{I1}[A-Z]" " | +{I2}[A-Z] | +{I1}[A-Z]" " | +{I2}[A-Z] { + if (relax & WCSHDR_CROTAia) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCROTn) ? iCCCna : TCCCna); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "%s keyword may not have an alternate version code", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. | +. { + BEGIN(DISCARD); + } + +{ALT} | +. { + // Image-header keyword. + if (imherit || (relax & (WCSHDR_AUXIMG | WCSHDR_ALLIMG))) { + if (YY_START == CCCCCCCa) { + sscanf(yytext, "%c", &a); + } else { + a = 0; + unput(yytext[0]); + } + keytype = IMGAUX; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. { + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "invalid alternate code, keyword resembles %s " + "but isn't", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{I1}{ALT}" " | +{I2}{ALT}" " | +{I3}{ALT} | +{I1}{ALT}" " | +{I2}{ALT} { + sscanf(yytext, "%d%c", &n, &a); + keytype = BINTAB; + BEGIN(VALUE); + } + +{I3} { + sscanf(yytext, "%d", &n); + a = ' '; + keytype = BINTAB; + BEGIN(VALUE); + } + +. | +. { + BEGIN(DISCARD); + } + +{I1}" " | +{I2}" " | +{I3}" " | +{I4} | +{I1}" " | +{I2}" " | +{I3} { + sscanf(yytext, "%d", &n); + a = 0; + keytype = BINTAB; + BEGIN(VALUE); + } + +. | +. { + BEGIN(DISCARD); + } + +{I1}_{Z1}{ALT}" " | +{I1}_{I2}{ALT}" " | +{I2}_{Z1}{ALT}" " | +{I2}_{I2}{ALT} { + // Image-header keyword. + if (relax & WCSHDR_ALLIMG) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +0{I1}_{Z1}{ALT}" " | +{I1}_0{Z1}{ALT}" " | +00{I1}_{Z1}{ALT} | +0{I1}_0{Z1}{ALT} | +{I1}_00{Z1}{ALT} | +000{I1}_{Z1} | +00{I1}_0{Z1} | +0{I1}_00{Z1} | +{I1}_000{Z1} | +0{I1}_{I2}{ALT} | +{I1}_0{I2}{ALT} | +00{I1}_{I2} | +0{I1}_0{I2} | +{I1}_00{I2} | +0{I2}_{Z1}{ALT} | +{I2}_0{Z1}{ALT} | +00{I2}_{Z1} | +0{I2}_0{Z1} | +{I2}_00{Z1} | +0{I2}_{I2} | +{I2}_0{I2} { + if (relax & WCSHDR_ALLIMG) { + if (((valtype == FLOAT) && (relax & WCSHDR_PV0i_0ma)) || + ((valtype == STRING) && (relax & WCSHDR_PS0i_0ma))) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}_{Z1}{ALT}" " | +{Z2}_{Z1}{ALT}" " | +{Z1}_{Z2}{ALT}" " | +{Z3}_{Z1}{ALT} | +{Z2}_{Z2}{ALT} | +{Z1}_{Z3}{ALT} | +{Z4}_{Z1} | +{Z3}_{Z2} | +{Z2}_{Z3} | +{Z1}_{Z4} { + if (relax & WCSHDR_ALLIMG) { + // Anything that has fallen through to this point must contain + // an invalid parameter. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "invalid image-header keyword %s in binary table", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}-{Z1}{ALT}" " | +{Z2}-{Z1}{ALT}" " | +{Z1}-{Z2}{ALT}" " | +{Z3}-{Z1}{ALT} | +{Z2}-{Z2}{ALT} | +{Z1}-{Z3}{ALT} | +{Z4}-{Z1} | +{Z3}-{Z2} | +{Z2}-{Z3} | +{Z1}-{Z4} { + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + +. { + BEGIN(DISCARD); + } + +{I1}_{Z1}{ALT}" " | +{I1}_{I2}{ALT} | +{I1}_{I3} | +{I2}_{Z1}{ALT} | +{I2}_{I2} | +{I3}_{Z1} | +{I1}_{Z1}{ALT}" " | +{I1}_{I2}{ALT} | +{I1}_{I3} | +{I2}_{Z1}{ALT} | +{I2}_{I2} | +{I3}_{Z1} { + if (relax & WCSHDR_LONGKEY) { + WCSBTH_PUTBACK; + BEGIN((YY_START == iCCn_ma) ? iCn_ma : TCn_ma); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, "the %s keyword is non-standard", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. | +. { + BEGIN(DISCARD); + } + +{I1}_{Z1}{ALT}" " | +{I1}_{I2}{ALT}" " | +{I1}_{I3}{ALT} | +{I2}_{Z1}{ALT}" " | +{I2}_{I2}{ALT} | +{I3}_{Z1}{ALT} | +{I1}_{Z1}{ALT}" " | +{I1}_{I2}{ALT}" " | +{I1}_{I3}{ALT} | +{I2}_{Z1}{ALT}" " | +{I2}_{I2}{ALT} | +{I3}_{Z1}{ALT} { + sscanf(yytext, "%d_%d%c", &n, &m, &a); + if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + +{I1}_{I4} | +{I2}_{I3} | +{I3}_{I2} | +{I4}_{Z1} | +{I1}_{I4} | +{I2}_{I3} | +{I3}_{I2} | +{I4}_{Z1} { + // Invalid combinations will be flagged by . + sscanf(yytext, "%d_%d", &n, &m); + a = ' '; + if (YY_START == TCn_ma) i = wcsbth_colax(*wcs, &alts, n, a); + keytype = (YY_START == iCn_ma) ? BIMGARR : PIXLIST; + BEGIN(VALUE); + } + +. | +. { + BEGIN(DISCARD); + } + +{Z1}" " { + if (relax & WCSHDR_PROJPn) { + sscanf(yytext, "%d", &m); + i = 0; + a = ' '; + keytype = IMGAXIS; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "the PROJPn keyword is deprecated, use PVi_ma"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z2}" " | +{Z3} { + if (relax & (WCSHDR_PROJPn | WCSHDR_reject)) { + errmsg = "invalid PROJPn keyword"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +. { + BEGIN(DISCARD); + } + +=" "+ { + // Do checks on i, j, m, n, k. + if (!(keytype & keysel)) { + // Selection by keyword type. + BEGIN(DISCARD); + + } else if (exclude[n] || exclude[k]) { + // One or other column is not selected. + if (k && (exclude[n] != exclude[k])) { + // For keywords such as TCn_ka, both columns must be excluded. + // User error, so return immediately. + return WCSHDRERR_BAD_COLUMN; + + } else { + BEGIN(DISCARD); + } + + } else if (i > 99 || j > 99 || m > 99 || n > 999 || k > 999) { + if (relax & WCSHDR_reject) { + errmsg = errtxt; + if (i > 99 || j > 99) { + sprintf(errmsg, "axis number exceeds 99"); + } else if (m > 99) { + sprintf(errmsg, "parameter number exceeds 99"); + } else if (n > 999 || k > 999) { + sprintf(errmsg, "column number exceeds 999"); + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else if (ipass == 2 && npass == 3 && (keytype & BINTAB)) { + // Skip keyvalues that won't be inherited. + BEGIN(FLUSH); + + } else { + if (ipass == 3 && (keytype & IMGHEAD)) { + // IMGHEAD keytypes are always dealt with on the second pass. + // However, they must be re-parsed in order to report errors. + vptr = 0x0; + } + + if (valtype == INTEGER) { + BEGIN(INTEGER_VAL); + } else if (valtype == FLOAT) { + BEGIN(FLOAT_VAL); + } else if (valtype == FLOAT2) { + BEGIN(FLOAT2_VAL); + } else if (valtype == STRING) { + BEGIN(STRING_VAL); + } else { + errmsg = errtxt; + sprintf(errmsg, "internal parser ERROR, bad data type: %d", + valtype); + BEGIN(ERROR); + } + } + } + +. { + errmsg = "invalid KEYWORD = VALUE syntax"; + BEGIN(ERROR); + } + +{INTEGER} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + sscanf(yytext, "%d", &inttmp); + + BEGIN(COMMENT); + } + } + +. { + errmsg = "an integer value was expected"; + BEGIN(ERROR); + } + +{FLOAT} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + wcsutil_str2double(yytext, &dbltmp); + + if (chekval && chekval(dbltmp)) { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } else { + BEGIN(COMMENT); + } + } + } + +. { + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + +{FLOAT} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue as integer and fractional parts. + wcsutil_str2double2(yytext, dbl2tmp); + + BEGIN(COMMENT); + } + } + +. { + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + +{STRING} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Copy the keyvalue minus the quotes. + strncpy(strtmp, yytext+1, yyleng-2); + strtmp[yyleng-2] = '\0'; + + // Strip off trailing blanks. + for (int jx = yyleng-3; jx >= 0; jx--) { + if (strtmp[jx] != ' ') { + break; + } + strtmp[jx] = '\0'; + } + + // Squeeze out repeated quotes. + int ix = 0; + for (int jx = 0; jx < 72; jx++) { + if (ix < jx) { + strtmp[ix] = strtmp[jx]; + } + + if (strtmp[jx] == '\0') { + break; + } else if (strtmp[jx] == '\'' && strtmp[jx+1] == '\'') { + jx++; + } + + ix++; + } + + BEGIN(COMMENT); + } + } + +. { + errmsg = "a string value was expected"; + BEGIN(ERROR); + } + +{INLINE}$ { + if (ipass == 1) { + // Do first-pass bookkeeping. + wcsbth_pass1(keytype, i, j, n, k, a, ptype, &alts); + BEGIN(FLUSH); + + } else if (*wcs) { + // Store the value now that the keyrecord has been validated. + alts.icol = 0; + alts.ialt = 0; + + // Update each coordinate representation. + int gotone = 0; + struct wcsprm *wcsp; + while ((wcsp = wcsbth_idx(*wcs, &alts, keytype, n, a))) { + gotone = 1; + + if (vptr) { + void *wptr; + if (auxprm) { + // Additional auxiliary parameter. + auxp = wcsp->aux; + ptrdiff_t voff = (char *)vptr - (char *)(&auxtem); + wptr = (void *)((char *)auxp + voff); + } else { + // A parameter that lives directly in wcsprm. + ptrdiff_t voff = (char *)vptr - (char *)(&wcstem); + wptr = (void *)((char *)wcsp + voff); + } + + if (valtype == INTEGER) { + *((int *)wptr) = inttmp; + + } else if (valtype == FLOAT) { + // Apply keyword parameterization. + if (ptype == 'v') { + int ipx = (wcsp->npv)++; + wcsp->pv[ipx].i = i; + wcsp->pv[ipx].m = m; + wptr = &(wcsp->pv[ipx].value); + + } else if (j) { + wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + + (j - 1); + + } else if (i) { + wptr = *((double **)wptr) + (i - 1); + } + + if (special) { + special(wptr, &dbltmp); + } else { + *((double *)wptr) = dbltmp; + } + + // Flag the presence of PCi_ja, or CDi_ja and/or CROTAia. + if (altlin) { + wcsp->altlin |= altlin; + altlin = 0; + } + + } else if (valtype == FLOAT2) { + // Split MJDREF and JDREF into integer and fraction. + if (special) { + special(wptr, dbl2tmp); + } else { + *((double *)wptr) = dbl2tmp[0]; + *((double *)wptr + 1) = dbl2tmp[1]; + } + + } else if (valtype == STRING) { + // Apply keyword parameterization. + if (ptype == 's') { + int ipx = wcsp->nps++; + wcsp->ps[ipx].i = i; + wcsp->ps[ipx].m = m; + wptr = wcsp->ps[ipx].value; + + } else if (j) { + wptr = *((char (**)[72])wptr) + + (i - 1)*(wcsp->naxis) + (j - 1); + + } else if (i) { + wptr = *((char (**)[72])wptr) + (i - 1); + } + + char *cptr = (char *)wptr; + strcpy(cptr, strtmp); + } + } + } + + if (ipass == npass) { + if (gotone) { + nvalid++; + if (ctrl == 4) { + wcsfprintf(stderr, + "%.80s\n Accepted (%d) as a valid WCS keyrecord.\n", + keyrec, nvalid); + } + + BEGIN(FLUSH); + + } else { + errmsg = "syntactically valid WCS keyrecord has no effect"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + + } else { + BEGIN(FLUSH); + } + } + +.*" "*\/.*$ { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + +[^ \/\n]*{INLINE}$ { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + +" "+[^\/\n].*{INLINE}$ { + errmsg = "invalid keyvalue or malformed keycomment"; + BEGIN(ERROR); + } + +.*$ { + errmsg = "malformed keycomment"; + BEGIN(ERROR); + } + +.*$ { + if (ipass == npass) { + if (ctrl < 0) { + // Preserve discards. + keep = keyrec; + + } else if (2 < ctrl) { + nother++; + wcsfprintf(stderr, "%.80s\n Not a recognized WCS keyword.\n", + keyrec); + } + } + BEGIN(FLUSH); + } + +.*$ { + if (ipass == npass) { + (*nreject)++; + + if (ctrl%10 == -1) { + keep = keyrec; + } + + if (1 < abs(ctrl%10)) { + wcsfprintf(stderr, "%.80s\n Rejected (%d), %s.\n", + keyrec, *nreject, errmsg); + } + } + BEGIN(FLUSH); + } + +.*\n { + if (ipass == npass && keep) { + if (hptr < keep) { + strncpy(hptr, keep, 80); + } + hptr += 80; + } + + naux += auxprm; + auxprm = 0; + + // Throw away the rest of the line and reset for the next one. + i = j = 0; + n = k = 0; + m = 0; + a = ' '; + + keyrec += 80; + + keytype = 0; + valtype = -1; + vptr = 0x0; + keep = 0x0; + + altlin = 0; + ptype = ' '; + chekval = 0x0; + special = 0x0; + + BEGIN(INITIAL); + } + +<> { + // End-of-input. + if (ipass == 1) { + int status; + if ((status = wcsbth_init1(&alts, naux, nwcs, wcs)) || + (*nwcs == 0 && ctrl == 0)) { + return status; + } + + if (2 < abs(ctrl%10)) { + if (*nwcs == 1) { + if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) { + wcsfprintf(stderr, "Found one coordinate representation.\n"); + } + } else { + wcsfprintf(stderr, "Found %d coordinate representations.\n", + *nwcs); + } + } + + if (alts.imgherit) npass = 3; + } + + if (ipass++ < npass) { + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + keyrec = header; + *nreject = 0; + + imherit = 1; + + i = j = 0; + k = n = 0; + m = 0; + a = ' '; + + keytype = 0; + valtype = -1; + vptr = 0x0; + + altlin = 0; + ptype = ' '; + chekval = 0x0; + special = 0x0; + + yyrestart(yyin, yyscanner); + + } else { + + if (ctrl < 0) { + *hptr = '\0'; + } else if (ctrl == 1) { + wcsfprintf(stderr, "%d WCS keyrecord%s rejected.\n", + *nreject, (*nreject==1)?" was":"s were"); + } else if (ctrl == 4) { + wcsfprintf(stderr, "\n"); + wcsfprintf(stderr, "%5d keyrecord%s rejected for syntax or " + "other errors,\n", *nreject, (*nreject==1)?" was":"s were"); + wcsfprintf(stderr, "%5d %s recognized as syntactically valid, " + "and\n", nvalid, (nvalid==1)?"was":"were"); + wcsfprintf(stderr, "%5d other%s were not recognized as WCS " + "keyrecords.\n", nother, (nother==1)?"":"s"); + } + + return wcsbth_final(&alts, nwcs, wcs); + } + } + +%% + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsbth( + char *header, + int nkeyrec, + int relax, + int ctrl, + int keysel, + int *colsel, + int *nreject, + int *nwcs, + struct wcsprm **wcs) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsbth_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsbth_scanner(header, nkeyrec, relax, ctrl, keysel, colsel, + nreject, nwcs, wcs, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + +/*---------------------------------------------------------------------------- +* Perform first-pass tasks: +* +* 1) Count the number of coordinate axes in each of the 27 possible alternate +* image-header coordinate representations. Also count the number of PVi_ma +* and PSi_ma keywords in each representation. +* +* 2) Determine the number of binary table columns that have an image array +* with a coordinate representation (up to 999), and count the number of +* coordinate axes in each of the 27 possible alternates. Also count the +* number of iVn_ma and iSn_ma keywords in each representation. +* +* 3) Determine the number of alternate pixel list coordinate representations +* (up to 27) and the table columns associated with each. Also count the +* number of TVn_ma and TSn_ma keywords in each representation. +* +* In the first pass alts->arridx[icol][27] is used to determine the number of +* axes in each of 27 possible image-header coordinate descriptions (icol == 0) +* and each of the 27 possible coordinate representations for an image array in +* each column. +* +* The elements of alts->pixlist[icol] are used as bit arrays to flag which of +* the 27 possible pixel list coordinate representations are associated with +* each table column. +*---------------------------------------------------------------------------*/ + +int wcsbth_pass1( + int keytype, + int i, + int j, + int n, + int k, + char a, + char ptype, + struct wcsbth_alts *alts) + +{ + if (a == 0) { + // Keywords such as DATE-OBS go along for the ride. + return 0; + } + + int ncol = alts->ncol; + + // Do we need to allocate memory for alts? + if (alts->arridx == 0x0) { + if (ncol == 0) { + // Can only happen if TFIELDS is missing or out-of-sequence. If n and + // k are both zero then we may be processing an image header so leave + // ncol alone - the array will be realloc'd later if required. + if (n || k) { + // The header is mangled, assume the worst. + ncol = 999; + } + } + + if (!(alts->arridx = calloc((1 + ncol)*27, sizeof(short int))) || + !(alts->npv = calloc((1 + ncol)*27, sizeof(unsigned char))) || + !(alts->nps = calloc((1 + ncol)*27, sizeof(unsigned char))) || + !(alts->pixlist = calloc((1 + ncol), sizeof(unsigned int)))) { + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + return WCSHDRERR_MEMORY; + } + + alts->ncol = ncol; + + } else if (n > ncol || k > ncol) { + // Can only happen if TFIELDS or the WCS keyword is wrong; carry on. + ncol = 999; + if (!(alts->arridx = realloc(alts->arridx, + 27*(1 + ncol)*sizeof(short int))) || + !(alts->npv = realloc(alts->npv, + 27*(1 + ncol)*sizeof(unsigned char))) || + !(alts->nps = realloc(alts->nps, + 27*(1 + ncol)*sizeof(unsigned char))) || + !(alts->pixlist = realloc(alts->pixlist, + (1 + ncol)*sizeof(unsigned int)))) { + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + return WCSHDRERR_MEMORY; + } + + // Since realloc() doesn't initialize the extra memory. + for (int icol = (1 + alts->ncol); icol < (1 + ncol); icol++) { + for (int ialt = 0; ialt < 27; ialt++) { + alts->arridx[icol][ialt] = 0; + alts->npv[icol][ialt] = 0; + alts->nps[icol][ialt] = 0; + alts->pixlist[icol] = 0; + } + } + + alts->ncol = ncol; + } + + int ialt = 0; + if (a != ' ') { + ialt = a - 'A' + 1; + } + + // A BINTAB keytype such as LONPna, in conjunction with an IMGAXIS keytype + // causes a table column to be recognized as an image array. + if (keytype & IMGHEAD || keytype & BIMGARR) { + // n == 0 is expected for IMGHEAD keywords. + if (i == 0 && j == 0) { + if (alts->arridx[n][ialt] == 0) { + // Flag that an auxiliary keyword was seen. + alts->arridx[n][ialt] = -1; + } + + } else { + // Record the maximum axis number found. + if (alts->arridx[n][ialt] < i) { + alts->arridx[n][ialt] = i; + } + + if (alts->arridx[n][ialt] < j) { + alts->arridx[n][ialt] = j; + } + } + + if (ptype == 'v') { + alts->npv[n][ialt]++; + } else if (ptype == 's') { + alts->nps[n][ialt]++; + } + } + + // BINTAB keytypes, which apply both to pixel lists as well as binary table + // image arrays, never contribute to recognizing a table column as a pixel + // list axis. A PIXLIST keytype is required for that. + if (keytype == PIXLIST) { + int mask = 1 << ialt; + + // n > 0 for PIXLIST keytypes. + alts->pixlist[n] |= mask; + if (k) alts->pixlist[k] |= mask; + + // Used as a flag over all columns. + alts->pixlist[0] |= mask; + + if (ptype == 'v') { + alts->pixnpv[ialt]++; + } else if (ptype == 's') { + alts->pixnps[ialt]++; + } + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Perform initializations at the end of the first pass: +* +* 1) Determine the required number of wcsprm structs, allocate memory for +* an array of them and initialize each one. +*---------------------------------------------------------------------------*/ + +int wcsbth_init1( + struct wcsbth_alts *alts, + int naux, + int *nwcs, + struct wcsprm **wcs) + +{ + int status = 0; + + if (alts->arridx == 0x0) { + *nwcs = 0; + return 0; + } + + // Determine the number of axes in each pixel list representation. + int ialt, mask, ncol = alts->ncol; + for (ialt = 0, mask = 1; ialt < 27; ialt++, mask <<= 1) { + alts->pixidx[ialt] = 0; + + if (alts->pixlist[0] | mask) { + for (int icol = 1; icol <= ncol; icol++) { + if (alts->pixlist[icol] & mask) { + alts->pixidx[ialt]++; + } + } + } + } + + // Find the total number of coordinate representations. + *nwcs = 0; + alts->imgherit = 0; + int inherit[27]; + for (int ialt = 0; ialt < 27; ialt++) { + inherit[ialt] = 0; + + for (int icol = 1; icol <= ncol; icol++) { + if (alts->arridx[icol][ialt] < 0) { + // No BIMGARR keytype but there's at least one BINTAB. + if (alts->arridx[0][ialt] > 0) { + // There is an IMGAXIS keytype that we will inherit, so count this + // representation. + alts->arridx[icol][ialt] = alts->arridx[0][ialt]; + } else { + alts->arridx[icol][ialt] = 0; + } + } + + if (alts->arridx[icol][ialt]) { + if (alts->arridx[0][ialt]) { + // All IMGHEAD keywords are inherited for this ialt. + inherit[ialt] = 1; + + if (alts->arridx[icol][ialt] < alts->arridx[0][ialt]) { + // The extra axes are also inherited. + alts->arridx[icol][ialt] = alts->arridx[0][ialt]; + } + } + + (*nwcs)++; + } + } + + // Count every "a" found in any IMGHEAD keyword... + if (alts->arridx[0][ialt]) { + if (inherit[ialt]) { + // ...but not if the IMGHEAD keywords will be inherited. + alts->arridx[0][ialt] = 0; + alts->imgherit = 1; + } else if (alts->arridx[0][ialt] > 0) { + (*nwcs)++; + } + } + + // We need a struct for every "a" found in a PIXLIST keyword. + if (alts->pixidx[ialt]) { + (*nwcs)++; + } + } + + + if (*nwcs) { + // Allocate memory for the required number of wcsprm structs. + if (!(*wcs = calloc(*nwcs, sizeof(struct wcsprm)))) { + return WCSHDRERR_MEMORY; + } + + // Initialize each wcsprm struct. + struct wcsprm *wcsp = *wcs; + *nwcs = 0; + for (int icol = 0; icol <= ncol; icol++) { + for (int ialt = 0; ialt < 27; ialt++) { + if (alts->arridx[icol][ialt] > 0) { + // Image-header representations that are not for inheritance + // (icol == 0) or binary table image array representations. + wcsp->flag = -1; + int npvmax = alts->npv[icol][ialt]; + int npsmax = alts->nps[icol][ialt]; + if ((status = wcsinit(1, (int)(alts->arridx[icol][ialt]), wcsp, + npvmax, npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Record the table column number. + wcsp->colnum = icol; + + // On the second pass alts->arridx[icol][27] indexes the array of + // wcsprm structs. + alts->arridx[icol][ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that this column has no WCS for this "a". + alts->arridx[icol][ialt] = -1; + } + } + } + + for (int ialt = 0; ialt < 27; ialt++) { + if (alts->pixidx[ialt]) { + // Pixel lists representations. + wcsp->flag = -1; + int npvmax = alts->pixnpv[ialt]; + int npsmax = alts->pixnps[ialt]; + if ((status = wcsinit(1, (int)(alts->pixidx[ialt]), wcsp, npvmax, + npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Record the pixel list column numbers. + int icol, ix, mask = (1 << ialt); + for (icol = 1, ix = 0; icol <= ncol; icol++) { + if (alts->pixlist[icol] & mask) { + wcsp->colax[ix++] = icol; + } + } + + // alts->pixidx[] indexes the array of wcsprm structs. + alts->pixidx[ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that this column is not a pixel list axis for this "a". + alts->pixidx[ialt] = -1; + } + } + } + + return status; +} + + +/*---------------------------------------------------------------------------- +* Return a pointer to the next wcsprm struct for a particular column number +* and alternate. +*---------------------------------------------------------------------------*/ + +struct wcsprm *wcsbth_idx( + struct wcsprm *wcs, + struct wcsbth_alts *alts, + int keytype, + int n, + char a) + +{ + const char as[] = " ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + if (!wcs) return 0x0; + + int iwcs = -1; + for (; iwcs < 0 && alts->ialt < 27; alts->ialt++) { + // Note that a == 0 applies to every alternate, otherwise this + // loop simply determines the appropriate value of alts->ialt. + if (a && a != as[alts->ialt]) continue; + + if (keytype & (IMGHEAD | BIMGARR)) { + for (; iwcs < 0 && alts->icol <= alts->ncol; alts->icol++) { + // Image header keywords, n == 0, apply to all columns, otherwise this + // loop simply determines the appropriate value of alts->icol. + if (n && n != alts->icol) continue; + iwcs = alts->arridx[alts->icol][alts->ialt]; + } + + // Break out of the loop to stop alts->ialt from being incremented. + if (iwcs >= 0) break; + + // Start from scratch for the next alts->ialt. + alts->icol = 0; + } + + if (keytype & (IMGAUX | PIXLIST)) { + iwcs = alts->pixidx[alts->ialt]; + } + } + + return (iwcs >= 0) ? (wcs + iwcs) : 0x0; +} + + +/*---------------------------------------------------------------------------- +* Return the axis number associated with the specified column number in a +* particular pixel list coordinate representation. +*---------------------------------------------------------------------------*/ + +int wcsbth_colax( + struct wcsprm *wcs, + struct wcsbth_alts *alts, + int n, + char a) + +{ + if (!wcs) return 0; + + struct wcsprm *wcsp = wcs; + if (a != ' ') { + wcsp += alts->pixidx[a-'A'+1]; + } + + for (int ix = 0; ix < wcsp->naxis; ix++) { + if (wcsp->colax[ix] == n) { + return ++ix; + } + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret the JDREF, JDREFI, and JDREFF keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_jdref(double *mjdref, const double *jdref) + +{ + // Set MJDREF from JDREF. + if (undefined(mjdref[0] && undefined(mjdref[1]))) { + mjdref[0] = jdref[0] - 2400000.0; + mjdref[1] = jdref[1] - 0.5; + + if (mjdref[1] < 0.0) { + mjdref[0] -= 1.0; + mjdref[1] += 1.0; + } + } + + return 0; +} + +int wcsbth_jdrefi(double *mjdref, const double *jdrefi) + +{ + // Set the integer part of MJDREF from JDREFI. + if (undefined(mjdref[0])) { + mjdref[0] = *jdrefi - 2400000.5; + } + + return 0; +} + + +int wcsbth_jdreff(double *mjdref, const double *jdreff) + +{ + // Set the fractional part of MJDREF from JDREFF. + if (undefined(mjdref[1])) { + mjdref[1] = *jdreff; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret EPOCHa keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_epoch(double *equinox, const double *epoch) + +{ + // If EQUINOXa is currently undefined then set it from EPOCHa. + if (undefined(*equinox)) { + *equinox = *epoch; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret VSOURCEa keywords. +*---------------------------------------------------------------------------*/ + +int wcsbth_vsource(double *zsource, const double *vsource) + +{ + const double c = 299792458.0; + + // If ZSOURCEa is currently undefined then set it from VSOURCEa. + if (undefined(*zsource)) { + // Convert relativistic Doppler velocity to redshift. + double beta = *vsource/c; + *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Check validity of a TIMEPIXR keyvalue. +*---------------------------------------------------------------------------*/ + +int wcsbth_timepixr(double timepixr) + +{ + return (timepixr < 0.0 || 1.0 < timepixr); +} + + +/*---------------------------------------------------------------------------- +* Tie up loose ends. +*---------------------------------------------------------------------------*/ + +int wcsbth_final( + struct wcsbth_alts *alts, + int *nwcs, + struct wcsprm **wcs) + +{ + if (alts->arridx) free(alts->arridx); + if (alts->npv) free(alts->npv); + if (alts->nps) free(alts->nps); + if (alts->pixlist) free(alts->pixlist); + + for (int ialt = 0; ialt < *nwcs; ialt++) { + // Interpret -TAB header keywords. + int status; + if ((status = wcstab(*wcs+ialt))) { + wcsvfree(nwcs, wcs); + return status; + } + } + + return 0; +} diff --git a/deps/wcslib/C/wcserr.c b/deps/wcslib/C/wcserr.c new file mode 100644 index 0000000..391868f --- /dev/null +++ b/deps/wcslib/C/wcserr.c @@ -0,0 +1,202 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + Module author: Michael Droettboom + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcserr.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsprintf.h" + +static int wcserr_enabled = 0; + +//---------------------------------------------------------------------------- + +int wcserr_enable(int enable) + +{ + return wcserr_enabled = (enable ? 1 : 0); +} + +//---------------------------------------------------------------------------- + +int wcserr_size(const struct wcserr *err, int sizes[2]) + +{ + if (err == 0x0) { + sizes[0] = sizes[1] = 0; + return 0; + } + + // Base size, in bytes. + sizes[0] = sizeof(struct wcserr); + + // Total size of allocated memory, in bytes. + sizes[1] = 0; + + if (err->msg) { + sizes[1] += strlen(err->msg) + 1; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcserr_prt(const struct wcserr *err, const char *prefix) + +{ + if (!wcserr_enabled) { + wcsprintf("Error messaging is not enabled, use wcserr_enable().\n"); + return 2; + } + + if (err == 0x0) { + return 0; + } + + if (err->status) { + if (prefix == 0x0) prefix = ""; + + if (err->status > 0) { + wcsprintf("%sERROR %d in %s() at line %d of file %s:\n%s%s.\n", + prefix, err->status, err->function, err->line_no, err->file, prefix, + err->msg); + } else { + // An informative message only. + wcsprintf("%sINFORMATIVE message from %s() at line %d of file " + "%s:\n%s%s.\n", prefix, err->function, err->line_no, err->file, + prefix, err->msg); + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcserr_clear(struct wcserr **errp) + +{ + if (*errp) { + if ((*errp)->msg) { + free((*errp)->msg); + } + free(*errp); + *errp = 0x0; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcserr_set( + struct wcserr **errp, + int status, + const char *function, + const char *file, + int line_no, + const char *format, + ...) + +{ + int msglen; + struct wcserr *err; + va_list argp; + + if (!wcserr_enabled) return status; + + if (errp == 0x0) { + return status; + } + err = *errp; + + if (status) { + if (err == 0x0) { + *errp = err = calloc(1, sizeof(struct wcserr)); + } + + if (err == 0x0) { + return status; + } + + err->status = status; + err->function = function; + err->file = file; + err->line_no = line_no; + err->msg = 0x0; + + // Determine the required message buffer size. + va_start(argp, format); + msglen = vsnprintf(0x0, 0, format, argp) + 1; + va_end(argp); + + if (msglen <= 0 || (err->msg = malloc(msglen)) == 0x0) { + wcserr_clear(errp); + return status; + } + + // Write the message. + va_start(argp, format); + msglen = vsnprintf(err->msg, msglen, format, argp); + va_end(argp); + + if (msglen < 0) { + wcserr_clear(errp); + } + } + + return status; +} + +//---------------------------------------------------------------------------- + +int wcserr_copy(const struct wcserr *src, struct wcserr *dst) + +{ + size_t msglen; + + if (src == 0x0) { + if (dst) { + memset(dst, 0, sizeof(struct wcserr)); + } + return 0; + } + + if (dst) { + memcpy(dst, src, sizeof(struct wcserr)); + + if (src->msg) { + msglen = strlen(src->msg) + 1; + if ((dst->msg = malloc(msglen))) { + strcpy(dst->msg, src->msg); + } + } + } + + return src->status; +} diff --git a/deps/wcslib/C/wcserr.h b/deps/wcslib/C/wcserr.h new file mode 100644 index 0000000..7cba366 --- /dev/null +++ b/deps/wcslib/C/wcserr.h @@ -0,0 +1,277 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + Module author: Michael Droettboom + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcserr.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* Summary of the wcserr routines +* ------------------------------ +* Most of the structs in WCSLIB contain a pointer to a wcserr struct as a +* member. Functions in WCSLIB that return an error status code can also +* allocate and set a detailed error message in this struct, which also +* identifies the function, source file, and line number where the error +* occurred. +* +* For example: +* += struct prjprm prj; += wcserr_enable(1); += if (prjini(&prj)) { += // Print the error message to stderr. += wcsprintf_set(stderr); += wcserr_prt(prj.err, 0x0); += } +* +* A number of utility functions used in managing the wcserr struct are for +* internal use only. They are documented here solely as an aid to +* understanding the code. They are not intended for external use - the API +* may change without notice! +* +* +* wcserr struct - Error message handling +* -------------------------------------- +* The wcserr struct contains the numeric error code, a textual description of +* the error, and information about the function, source file, and line number +* where the error was generated. +* +* int status +* Numeric status code associated with the error, the meaning of which +* depends on the function that generated it. See the documentation for +* the particular function. +* +* int line_no +* Line number where the error occurred as given by the __LINE__ +* preprocessor macro. +* +* const char *function +* Name of the function where the error occurred. +* +* const char *file +* Name of the source file where the error occurred as given by the +* __FILE__ preprocessor macro. +* +* char *msg +* Informative error message. +* +* +* wcserr_enable() - Enable/disable error messaging +* ------------------------------------------------ +* wcserr_enable() enables or disables wcserr error messaging. By default it +* is disabled. +* +* PLEASE NOTE: This function is not thread-safe. +* +* Given: +* enable int If true (non-zero), enable error messaging, else +* disable it. +* +* Function return value: +* int Status return value: +* 0: Error messaging is disabled. +* 1: Error messaging is enabled. +* +* +* wcserr_size() - Compute the size of a wcserr struct +* --------------------------------------------------- +* wcserr_size() computes the full size of a wcserr struct, including allocated +* memory. +* +* Given: +* err const struct wcserr* +* The error object. +* +* If NULL, the base size of the struct and the allocated +* size are both set to zero. +* +* Returned: +* sizes int[2] The first element is the base size of the struct as +* returned by sizeof(struct wcserr). The second element +* is the total allocated size of the message buffer, in +* bytes. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* wcserr_prt() - Print a wcserr struct +* ------------------------------------ +* wcserr_prt() prints the error message (if any) contained in a wcserr struct. +* It uses the wcsprintf() functions. +* +* Given: +* err const struct wcserr* +* The error object. If NULL, nothing is printed. +* +* prefix const char * +* If non-NULL, each output line will be prefixed with +* this string. +* +* Function return value: +* int Status return value: +* 0: Success. +* 2: Error messaging is not enabled. +* +* +* wcserr_clear() - Clear a wcserr struct +* -------------------------------------- +* wcserr_clear() clears (deletes) a wcserr struct. +* +* Given and returned: +* err struct wcserr** +* The error object. If NULL, nothing is done. Set to +* NULL on return. +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* wcserr_set() - Fill in the contents of an error object +* ------------------------------------------------------ +* INTERNAL USE ONLY. +* +* wcserr_set() fills a wcserr struct with information about an error. +* +* A convenience macro, WCSERR_SET, provides the source file and line number +* information automatically. +* +* Given and returned: +* err struct wcserr** +* Error object. +* +* If err is NULL, returns the status code given without +* setting an error message. +* +* If *err is NULL, allocates memory for a wcserr struct +* (provided that status is non-zero). +* +* Given: +* status int Numeric status code to set. If 0, then *err will be +* deleted and *err will be returned as NULL. +* +* function const char * +* Name of the function generating the error. This +* must point to a constant string, i.e. in the +* initialized read-only data section ("data") of the +* executable. +* +* file const char * +* Name of the source file generating the error. This +* must point to a constant string, i.e. in the +* initialized read-only data section ("data") of the +* executable such as given by the __FILE__ preprocessor +* macro. +* +* line_no int Line number in the source file generating the error +* such as given by the __LINE__ preprocessor macro. +* +* format const char * +* Format string of the error message. May contain +* printf-style %-formatting codes. +* +* ... mixed The remaining variable arguments are applied (like +* printf) to the format string to generate the error +* message. +* +* Function return value: +* int The status return code passed in. +* +* +* wcserr_copy() - Copy an error object +* ------------------------------------ +* INTERNAL USE ONLY. +* +* wcserr_copy() copies one error object to another. Use of this function +* should be avoided in general since the function, source file, and line +* number information copied to the destination may lose its context. +* +* Given: +* src const struct wcserr* +* Source error object. If src is NULL, dst is cleared. +* +* Returned: +* dst struct wcserr* +* Destination error object. If NULL, no copy is made. +* +* Function return value: +* int Numeric status code of the source error object. +* +* +* WCSERR_SET() macro - Fill in the contents of an error object +* ------------------------------------------------------------ +* INTERNAL USE ONLY. +* +* WCSERR_SET() is a preprocessor macro that helps to fill in the argument list +* of wcserr_set(). It takes status as an argument of its own and provides the +* name of the source file and the line number at the point where invoked. It +* assumes that the err and function arguments of wcserr_set() will be provided +* by variables of the same names. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSERR +#define WCSLIB_WCSERR + +#ifdef __cplusplus +extern "C" { +#endif + +struct wcserr { + int status; // Status code for the error. + int line_no; // Line number where the error occurred. + const char *function; // Function name. + const char *file; // Source file name. + char *msg; // Informative error message. +}; + +// Size of the wcserr struct in int units, used by the Fortran wrappers. +#define ERRLEN (sizeof(struct wcserr)/sizeof(int)) + +int wcserr_enable(int enable); + +int wcserr_size(const struct wcserr *err, int sizes[2]); + +int wcserr_prt(const struct wcserr *err, const char *prefix); + +int wcserr_clear(struct wcserr **err); + + +// INTERNAL USE ONLY ------------------------------------------------------- + +int wcserr_set(struct wcserr **err, int status, const char *function, + const char *file, int line_no, const char *format, ...); + +int wcserr_copy(const struct wcserr *src, struct wcserr *dst); + +// Convenience macro for invoking wcserr_set(). +#define WCSERR_SET(status) err, status, function, __FILE__, __LINE__ + +#ifdef __cplusplus +} +#endif + +#endif // WSCLIB_WCSERR diff --git a/deps/wcslib/C/wcsfix.c b/deps/wcslib/C/wcsfix.c new file mode 100644 index 0000000..d7958d6 --- /dev/null +++ b/deps/wcslib/C/wcsfix.c @@ -0,0 +1,1483 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsfix.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include + +#include "lin.h" +#include "sph.h" +#include "tab.h" +#include "wcs.h" +#include "wcserr.h" +#include "wcsfix.h" +#include "wcsmath.h" +#include "wcstrig.h" +#include "wcsunits.h" +#include "wcsutil.h" +#include "wtbarr.h" + +// Maximum number of coordinate axes that can be handled. +#define NMAX 16 + +// Map status return value to message. +const char *wcsfix_errmsg[] = { + "Success", + "Null wcsprm pointer passed", + "Memory allocation failed", + "Linear transformation matrix is singular", + "Inconsistent or unrecognized coordinate axis types", + "Invalid parameter value", + "Invalid coordinate transformation parameters", + "Ill-conditioned coordinate transformation parameters", + "All of the corner pixel coordinates are invalid", + "Could not determine reference pixel coordinate", + "Could not determine reference pixel value"}; + +// Map error returns for lower-level routines. +const int fix_linerr[] = { + FIXERR_SUCCESS, // 0: LINERR_SUCCESS + FIXERR_NULL_POINTER, // 1: LINERR_NULL_POINTER + FIXERR_MEMORY, // 2: LINERR_MEMORY + FIXERR_SINGULAR_MTX, // 3: LINERR_SINGULAR_MTX + FIXERR_BAD_PARAM, // 4: LINERR_DISTORT_INIT + FIXERR_NO_REF_PIX_COORD, // 5: LINERR_DISTORT + FIXERR_NO_REF_PIX_VAL // 6: LINERR_DEDISTORT +}; + +const int fix_wcserr[] = { + FIXERR_SUCCESS, // 0: WCSERR_SUCCESS + FIXERR_NULL_POINTER, // 1: WCSERR_NULL_POINTER + FIXERR_MEMORY, // 2: WCSERR_MEMORY + FIXERR_SINGULAR_MTX, // 3: WCSERR_SINGULAR_MTX + FIXERR_BAD_CTYPE, // 4: WCSERR_BAD_CTYPE + FIXERR_BAD_PARAM, // 5: WCSERR_BAD_PARAM + FIXERR_BAD_COORD_TRANS, // 6: WCSERR_BAD_COORD_TRANS + FIXERR_ILL_COORD_TRANS, // 7: WCSERR_ILL_COORD_TRANS + FIXERR_BAD_CORNER_PIX, // 8: WCSERR_BAD_PIX + FIXERR_NO_REF_PIX_VAL, // 9: WCSERR_BAD_WORLD + FIXERR_NO_REF_PIX_VAL // 10: WCSERR_BAD_WORLD_COORD + // ...others not used +}; + +static const int WCSSET = 137; // Matching wcs.c + +// Convenience macro for invoking wcserr_set(). +#define WCSFIX_ERRMSG(status) WCSERR_SET(status), wcsfix_errmsg[status] + +//---------------------------------------------------------------------------- + +int wcsfix(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[]) + +{ + int status = 0; + + if ((stat[CDFIX] = cdfix(wcs)) > 0) { + status = 1; + } + + if ((stat[DATFIX] = datfix(wcs)) > 0) { + status = 1; + } + + if ((stat[OBSFIX] = obsfix(0, wcs)) > 0) { + status = 1; + } + + if ((stat[UNITFIX] = unitfix(ctrl, wcs)) > 0) { + status = 1; + } + + if ((stat[SPCFIX] = spcfix(wcs)) > 0) { + status = 1; + } + + if ((stat[CELFIX] = celfix(wcs)) > 0) { + status = 1; + } + + if ((stat[CYLFIX] = cylfix(naxis, wcs)) > 0) { + status = 1; + } + + return status; +} + +//---------------------------------------------------------------------------- + +int wcsfixi( + int ctrl, + const int naxis[], + struct wcsprm *wcs, + int stat[], + struct wcserr info[]) + +{ + int status = 0; + + // Handling the status values returned from the sub-fixers is trickier than + // it might seem, especially considering that wcs->err may contain an error + // status on input which should be preserved if no translation errors occur. + // The simplest way seems to be to save a copy of wcs->err and clear it + // before each sub-fixer. The last real error to occur, excluding + // informative messages, is the one returned. + + // To get informative messages from spcfix() it must precede celfix() and + // cylfix(). The latter call wcsset() which also translates AIPS-convention + // spectral axes. + struct wcserr err; + wcserr_copy(wcs->err, &err); + + for (int ifix = CDFIX; ifix < NWCSFIX; ifix++) { + // Clear (delete) wcs->err. + wcserr_clear(&(wcs->err)); + + switch (ifix) { + case CDFIX: + stat[ifix] = cdfix(wcs); + break; + case DATFIX: + stat[ifix] = datfix(wcs); + break; + case OBSFIX: + stat[ifix] = obsfix(0, wcs); + break; + case UNITFIX: + stat[ifix] = unitfix(ctrl, wcs); + break; + case SPCFIX: + stat[ifix] = spcfix(wcs); + break; + case CELFIX: + stat[ifix] = celfix(wcs); + break; + case CYLFIX: + stat[ifix] = cylfix(naxis, wcs); + break; + default: + continue; + } + + if (stat[ifix] == FIXERR_NO_CHANGE) { + // No change => no message. + wcserr_copy(0x0, info+ifix); + + } else if (stat[ifix] == 0) { + // Successful translation, but there may be an informative message. + if (wcs->err && wcs->err->status < 0) { + wcserr_copy(wcs->err, info+ifix); + } else { + wcserr_copy(0x0, info+ifix); + } + + } else { + // An informative message or error message. + wcserr_copy(wcs->err, info+ifix); + + if ((status = (stat[ifix] > 0))) { + // It was an error, replace the previous one. + wcserr_copy(wcs->err, &err); + } + } + } + + // Restore the last error to occur. + if (err.status) { + wcserr_copy(&err, wcs->err); + } else { + wcserr_clear(&(wcs->err)); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int cdfix(struct wcsprm *wcs) + +{ + if (wcs == 0x0) return FIXERR_NULL_POINTER; + + if ((wcs->altlin & 1) || !(wcs->altlin & 2)) { + // Either we have PCi_ja or there are no CDi_ja. + return FIXERR_NO_CHANGE; + } + + int naxis = wcs->naxis; + int status = FIXERR_NO_CHANGE; + for (int i = 0; i < naxis; i++) { + // Row of zeros? + double *cd = wcs->cd + i*naxis; + for (int k = 0; k < naxis; k++, cd++) { + if (*cd != 0.0) goto next; + } + + // Column of zeros? + cd = wcs->cd + i; + for (int k = 0; k < naxis; k++, cd += naxis) { + if (*cd != 0.0) goto next; + } + + cd = wcs->cd + i * (naxis + 1); + *cd = 1.0; + status = FIXERR_SUCCESS; + +next: ; + } + + return status; +} + +//---------------------------------------------------------------------------- + +static int parse_date(const char *buf, int *hour, int *minute, double *sec) + +{ + char ctmp[72]; + if (sscanf(buf, "%2d:%2d:%s", hour, minute, ctmp) < 3 || + wcsutil_str2double(ctmp, sec)) { + return 1; + } + + return 0; +} + + +static void write_date(char *buf, int hour, int minute, double sec) + +{ + char ctmp[32]; + wcsutil_double2str(ctmp, "%04.1f", sec); + sprintf(buf, "T%.2d:%.2d:%s", hour, minute, ctmp); +} + + +static char *newline(char **cp) + +{ + size_t k; + if ((k = strlen(*cp))) { + *cp += k; + strcat(*cp, ".\n"); + *cp += 2; + } + + return *cp; +} + + +int datfix(struct wcsprm *wcs) + +{ + static const char *function = "datfix"; + + // MJD of J2000.0 and B1900.0. + const double mjd2000 = 51544.5; + const double mjd1900 = 15019.81352; + + // Days per Julian year and per tropical year. + const double djy = 365.25; + const double dty = 365.242198781; + + int day, hour = 0, minute = 0, month, year; + double sec = 0.0; + + if (wcs == 0x0) return FIXERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + char infomsg[512]; + char *cp = infomsg; + *cp = '\0'; + + int status = FIXERR_NO_CHANGE; + + for (int i = 0; i < 5; i++) { + // MJDREF is split into integer and fractional parts, wheres MJDOBS and + // the rest are a single value. + const char *dateid = 0x0; + char *date = 0x0; + double *wcsmjd = 0x0; + if (i == 0) { + // Note, DATEREF and MJDREF, not DATE-REF and MJD-REF (sigh). + dateid = "REF"; + date = wcs->dateref; + wcsmjd = wcs->mjdref; + } else if (i == 1) { + dateid = "-OBS"; + date = wcs->dateobs; + wcsmjd = &(wcs->mjdobs); + } else if (i == 2) { + dateid = "-BEG"; + date = wcs->datebeg; + wcsmjd = &(wcs->mjdbeg); + } else if (i == 3) { + dateid = "-AVG"; + date = wcs->dateavg; + wcsmjd = &(wcs->mjdavg); + } else if (i == 4) { + dateid = "-END"; + date = wcs->dateend; + wcsmjd = &(wcs->mjdend); + } + + char orig_date[72]; + strncpy(orig_date, date, 72); + + if (date[0] == '\0') { + // Fill in DATE from MJD if possible. + + if (i == 1 && undefined(*wcsmjd)) { + // See if we have jepoch or bepoch. + if (!undefined(wcs->jepoch)) { + *wcsmjd = mjd2000 + (wcs->jepoch - 2000.0)*djy; + sprintf(newline(&cp), "Set MJD-OBS to %.6f from JEPOCH", *wcsmjd); + if (status == FIXERR_NO_CHANGE) status = FIXERR_SUCCESS; + + } else if (!undefined(wcs->bepoch)) { + *wcsmjd = mjd1900 + (wcs->bepoch - 1900.0)*dty; + sprintf(newline(&cp), "Set MJD-OBS to %.6f from BEPOCH", *wcsmjd); + if (status == FIXERR_NO_CHANGE) status = FIXERR_SUCCESS; + } + } + + if (undefined(*wcsmjd)) { + // No date information was provided. + + } else { + // Calendar date from MJD, with allowance for MJD < 0. + double mjd[2], t; + if (i == 0) { + // MJDREF is already split into integer and fractional parts. + mjd[0] = wcsmjd[0]; + mjd[1] = wcsmjd[1]; + if (1.0 < mjd[1]) { + // Ensure the fractional part lies between 0 and +1. + t = floor(mjd[1]); + mjd[0] += t; + mjd[1] -= t; + } + } else { + // Split it into integer and fractional parts. + mjd[0] = floor(*wcsmjd); + mjd[1] = *wcsmjd - mjd[0]; + } + + int jd = 2400001 + (int)mjd[0]; + + int n4 = 4*(jd + ((2*((4*jd - 17918)/146097)*3)/4 + 1)/2 - 37); + int dd = 10*(((n4-237)%1461)/4) + 5; + + year = n4/1461 - 4712; + month = (2 + dd/306)%12 + 1; + day = (dd%306)/10 + 1; + sprintf(date, "%.4d-%.2d-%.2d", year, month, day); + + // Write time part only if non-zero. + if (0.0 < (t = mjd[1])) { + t *= 24.0; + hour = (int)t; + t = 60.0 * (t - hour); + minute = (int)t; + sec = 60.0 * (t - minute); + + // Round to 1ms. + dd = 60000*(60*hour + minute) + (int)(1000*(sec+0.0005)); + hour = dd / 3600000; + dd -= 3600000 * hour; + minute = dd / 60000; + int msec = dd - 60000 * minute; + sprintf(date+10, "T%.2d:%.2d:%.2d", hour, minute, msec/1000); + + // Write fractions of a second only if non-zero. + if (msec%1000) { + sprintf(date+19, ".%.3d", msec%1000); + } + } + } + + } else { + if (strlen(date) < 8) { + // Can't be a valid date. + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid DATE%s format '%s' is too short", + dateid, date); + continue; + } + + // Identify the date format. + if (date[4] == '-' && date[7] == '-') { + // Standard year-2000 form: CCYY-MM-DD[Thh:mm:ss[.sss...]] + if (sscanf(date, "%4d-%2d-%2d", &year, &month, &day) < 3) { + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid DATE%s format '%s'", dateid, date); + continue; + } + + if (date[10] == 'T') { + if (parse_date(date+11, &hour, &minute, &sec)) { + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid time in DATE%s '%s'", dateid, + date+11); + continue; + } + } else if (date[10] == ' ') { + hour = 0; + minute = 0; + sec = 0.0; + if (parse_date(date+11, &hour, &minute, &sec)) { + write_date(date+10, hour, minute, sec); + } else { + date[10] = 'T'; + } + } + + } else if (date[4] == '/' && date[7] == '/') { + // Also allow CCYY/MM/DD[Thh:mm:ss[.sss...]] + if (sscanf(date, "%4d/%2d/%2d", &year, &month, &day) < 3) { + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid DATE%s format '%s'", dateid, date); + continue; + } + + if (date[10] == 'T') { + if (parse_date(date+11, &hour, &minute, &sec)) { + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid time in DATE%s '%s'", dateid, + date+11); + continue; + } + } else if (date[10] == ' ') { + hour = 0; + minute = 0; + sec = 0.0; + if (parse_date(date+11, &hour, &minute, &sec)) { + write_date(date+10, hour, minute, sec); + } else { + date[10] = 'T'; + } + } + + // Looks ok, fix it up. + date[4] = '-'; + date[7] = '-'; + + } else { + if (i == 1 && date[2] == '/' && date[5] == '/') { + // Old format DATE-OBS date: DD/MM/YY, also allowing DD/MM/CCYY. + if (sscanf(date, "%2d/%2d/%4d", &day, &month, &year) < 3) { + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid DATE%s format '%s'", dateid, + date); + continue; + } + + } else if (i == 1 && date[2] == '-' && date[5] == '-') { + // Also recognize DD-MM-YY and DD-MM-CCYY + if (sscanf(date, "%2d-%2d-%4d", &day, &month, &year) < 3) { + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid DATE%s format '%s'", dateid, + date); + continue; + } + + } else { + // Not a valid date format. + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), "Invalid DATE%s format '%s'", dateid, date); + continue; + } + + if (year < 100) year += 1900; + + // Doesn't have a time. + sprintf(date, "%.4d-%.2d-%.2d", year, month, day); + } + + // Compute MJD. + double mjd[2]; + mjd[0] = (double)((1461*(year - (12-month)/10 + 4712))/4 + + (306*((month+9)%12) + 5)/10 + - (3*((year - (12-month)/10 + 4900)/100))/4 + + day - 2399904); + mjd[1] = (hour + (minute + sec/60.0)/60.0)/24.0; + double mjdsum = mjd[0] + mjd[1]; + + if (undefined(*wcsmjd)) { + if (i == 0) { + wcsmjd[0] = mjd[0]; + wcsmjd[1] = mjd[1]; + } else { + *wcsmjd = mjdsum; + } + sprintf(newline(&cp), "Set MJD%s to %.6f from DATE%s", dateid, + mjdsum, dateid); + + if (status == FIXERR_NO_CHANGE) status = FIXERR_SUCCESS; + + } else { + // Check for consistency. + double mjdtmp; + if (i == 0) { + mjdtmp = wcsmjd[0] + wcsmjd[1]; + } else { + mjdtmp = *wcsmjd; + } + + if (0.001 < fabs(mjdsum - mjdtmp)) { + status = FIXERR_BAD_PARAM; + sprintf(newline(&cp), + "Invalid parameter values: MJD%s and DATE%s are inconsistent", + dateid, dateid); + } + } + + if (i == 1) { + if (!undefined(wcs->jepoch)) { + // Check consistency of JEPOCH. + double jepoch = 2000.0 + (*wcsmjd - mjd2000) / djy; + + if (0.000002 < fabs(jepoch - wcs->jepoch)) { + // Informational only, no error. + sprintf(newline(&cp), "JEPOCH is inconsistent with DATE-OBS"); + } + } + + if (!undefined(wcs->bepoch)) { + // Check consistency of BEPOCH. + double bepoch = 1900.0 + (*wcsmjd - mjd1900) / dty; + + if (0.000002 < fabs(bepoch - wcs->bepoch)) { + // Informational only, no error. + sprintf(newline(&cp), "BEPOCH is inconsistent with DATE-OBS"); + } + } + } + } + + if (strncmp(orig_date, date, 72)) { + if (orig_date[0] == '\0') { + sprintf(newline(&cp), "Set DATE%s to '%s' from MJD%s", dateid, date, + dateid); + } else { + sprintf(newline(&cp), "Changed DATE%s from '%s' to '%s'", dateid, + orig_date, date); + } + + if (status == FIXERR_NO_CHANGE) status = FIXERR_SUCCESS; + } + } + + if (*infomsg) { + wcserr_set(WCSERR_SET(FIXERR_DATE_FIX), infomsg); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int obsfix(int ctrl, struct wcsprm *wcs) + +{ + static const char *function = "obsfix"; + + // IAU(1976) ellipsoid (as prescribed by WCS Paper VII). + const double a = 6378140.0; + const double f = 1.0 / 298.2577; + const double e2 = (2.0 - f)*f; + + if (wcs == 0x0) return FIXERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + // Set masks for checking partially-defined coordinate triplets. + int havexyz = 7; + havexyz -= 1*undefined(wcs->obsgeo[0]); + havexyz -= 2*undefined(wcs->obsgeo[1]); + havexyz -= 4*undefined(wcs->obsgeo[2]); + int havelbh = 7; + havelbh -= 1*undefined(wcs->obsgeo[3]); + havelbh -= 2*undefined(wcs->obsgeo[4]); + havelbh -= 4*undefined(wcs->obsgeo[5]); + + if (ctrl == 2) { + // Make no changes. + if (0 < havexyz && havexyz < 7) { + return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), + "Partially undefined Cartesian coordinate triplet"); + } + + if (0 < havelbh && havelbh < 7) { + return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), + "Partially undefined Geodetic coordinate triplet"); + } + + if (havexyz == 0 || havelbh == 0) { + return FIXERR_NO_CHANGE; + } + } + + if (havexyz == 0 && havelbh == 0) { + return FIXERR_NO_CHANGE; + } + + + char infomsg[256]; + infomsg[0] = '\0'; + + int status = FIXERR_NO_CHANGE; + + size_t k; + double x, y, z; + if (havelbh == 7) { + // Compute (x,y,z) from (lng,lat,hgt). + double coslat, coslng, sinlat, sinlng; + sincosd(wcs->obsgeo[3], &sinlng, &coslng); + sincosd(wcs->obsgeo[4], &sinlat, &coslat); + double n = a / sqrt(1.0 - e2*sinlat*sinlat); + double rho = n + wcs->obsgeo[5]; + + x = rho*coslng*coslat; + y = rho*sinlng*coslat; + z = (rho - n*e2)*sinlat; + + if (havexyz < 7) { + // One or more of the Cartesian elements was undefined. + status = FIXERR_SUCCESS; + char *cp = infomsg; + + if (ctrl == 1 || !(havexyz & 1)) { + wcs->obsgeo[0] = x; + sprintf(cp, "%s OBSGEO-X to %12.3f from OBSGEO-[LBH]", + (havexyz & 1) ? "Reset" : "Set", x); + } + + if (ctrl == 1 || !(havexyz & 2)) { + wcs->obsgeo[1] = y; + + if ((k = strlen(cp))) { + strcat(cp+k, ".\n"); + cp += k + 2; + } + + sprintf(cp, "%s OBSGEO-Y to %12.3f from OBSGEO-[LBH]", + (havexyz & 2) ? "Reset" : "Set", y); + } + + if (ctrl == 1 || !(havexyz & 4)) { + wcs->obsgeo[2] = z; + if ((k = strlen(cp))) { + strcat(cp+k, ".\n"); + cp += k + 2; + } + + sprintf(cp, "%s OBSGEO-Z to %12.3f from OBSGEO-[LBH]", + (havexyz & 4) ? "Reset" : "Set", z); + } + + wcserr_set(WCSERR_SET(FIXERR_OBSGEO_FIX), infomsg); + + if (havexyz == 0) { + // Skip the consistency check. + return status; + } + } + + } else if (havexyz == 7) { + // Compute (lng,lat,hgt) from (x,y,z). + x = wcs->obsgeo[0]; + y = wcs->obsgeo[1]; + z = wcs->obsgeo[2]; + double r2 = x*x + y*y; + + // Iterate over the value of zeta. + double coslat, coslng, sinlat, sinlng; + double n, rho, zeta = z; + for (int i = 0; i < 4; i++) { + rho = sqrt(r2 + zeta*zeta); + sinlat = zeta / rho; + n = a / sqrt(1.0 - e2*sinlat*sinlat); + + zeta = z / (1.0 - n*e2/rho); + } + + double lng = atan2d(y, x); + double lat = asind(sinlat); + double hgt = rho - n; + + if (havelbh < 7) { + // One or more of the Geodetic elements was undefined. + status = FIXERR_SUCCESS; + char *cp = infomsg; + + if (ctrl == 1 || !(havelbh & 1)) { + wcs->obsgeo[3] = lng; + sprintf(cp, "%s OBSGEO-L to %12.6f from OBSGEO-[XYZ]", + (havelbh & 1) ? "Reset" : "Set", lng); + } + + if (ctrl == 1 || !(havelbh & 2)) { + wcs->obsgeo[4] = lat; + if ((k = strlen(cp))) { + strcat(cp+k, ".\n"); + cp += k + 2; + } + + sprintf(cp, "%s OBSGEO-B to %12.6f from OBSGEO-[XYZ]", + (havelbh & 2) ? "Reset" : "Set", lat); + } + + if (ctrl == 1 || !(havelbh & 4)) { + wcs->obsgeo[5] = hgt; + if ((k = strlen(cp))) { + strcat(cp+k, ".\n"); + cp += k + 2; + } + + sprintf(cp, "%s OBSGEO-H to %12.3f from OBSGEO-[XYZ]", + (havelbh & 4) ? "Reset" : "Set", hgt); + } + + wcserr_set(WCSERR_SET(FIXERR_OBSGEO_FIX), infomsg); + + if (havelbh == 0) { + // Skip the consistency check. + return status; + } + } + + // Compute (x,y,z) from (lng,lat,hgt) for consistency checking. + sincosd(wcs->obsgeo[3], &sinlng, &coslng); + sincosd(wcs->obsgeo[4], &sinlat, &coslat); + n = a / sqrt(1.0 - e2*sinlat*sinlat); + rho = n + wcs->obsgeo[5]; + + x = rho*coslng*coslat; + y = rho*sinlng*coslat; + z = (rho - n*e2)*sinlat; + + } else { + return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), + "Observatory coordinates incomplete"); + } + + + // Check consistency. + double d, r2 = 0.0; + d = wcs->obsgeo[0] - x; + r2 += d*d; + d = wcs->obsgeo[1] - y; + r2 += d*d; + d = wcs->obsgeo[2] - z; + r2 += d*d; + + if (1.0 < r2) { + d = sqrt(r2); + return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), + "Observatory coordinates inconsistent by %.1f metres", d); + } + + return status; +} + + +//---------------------------------------------------------------------------- + +int unitfix(int ctrl, struct wcsprm *wcs) + +{ + const char *function = "unitfix"; + + if (wcs == 0x0) return FIXERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + int status = FIXERR_NO_CHANGE; + + char msg[512]; + strncpy(msg, "Changed units:", 512); + + for (int i = 0; i < wcs->naxis; i++) { + char orig_unit[72]; + strncpy(orig_unit, wcs->cunit[i], 71); + int result = wcsutrne(ctrl, wcs->cunit[i], &(wcs->err)); + if (result == 0 || result == 12) { + size_t msglen = strlen(msg); + if (msglen < 511) { + wcsutil_null_fill(72, orig_unit); + char msgtmp[192]; + sprintf(msgtmp, "\n '%s' -> '%s',", orig_unit, wcs->cunit[i]); + strncpy(msg+msglen, msgtmp, 511-msglen); + status = FIXERR_UNITS_ALIAS; + } + } + } + + if (status == FIXERR_UNITS_ALIAS) { + // Chop off the trailing ", ". + size_t msglen = strlen(msg) - 2; + msg[msglen] = '\0'; + wcserr_set(WCSERR_SET(FIXERR_UNITS_ALIAS), msg); + + status = FIXERR_SUCCESS; + } + + return status; +} + +//---------------------------------------------------------------------------- + +int spcfix(struct wcsprm *wcs) + +{ + static const char *function = "spcfix"; + + if (wcs == 0x0) return FIXERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + for (int i = 0; i < wcs->naxis; i++) { + // Translate an AIPS-convention spectral type if present. + char ctype[9], specsys[9]; + int status = spcaips(wcs->ctype[i], wcs->velref, ctype, specsys); + if (status == FIXERR_SUCCESS) { + // An AIPS type was found but it may match what we already have. + status = FIXERR_NO_CHANGE; + + // Was specsys translated? + if (wcs->specsys[0] == '\0' && *specsys) { + strncpy(wcs->specsys, specsys, 9); + wcserr_set(WCSERR_SET(FIXERR_SPC_UPDATE), + "Changed SPECSYS to '%s'", specsys); + status = FIXERR_SUCCESS; + } + + // Was ctype translated? Have to null-fill for comparing them. + wcsutil_null_fill(9, wcs->ctype[i]); + if (strncmp(wcs->ctype[i], ctype, 9)) { + // ctype was translated... + if (status == FIXERR_SUCCESS) { + // ...and specsys was also. + wcserr_set(WCSERR_SET(FIXERR_SPC_UPDATE), + "Changed CTYPE%d from '%s' to '%s', and SPECSYS to '%s' " + "(VELREF=%d)", i+1, wcs->ctype[i], ctype, wcs->specsys, + wcs->velref); + } else { + wcserr_set(WCSERR_SET(FIXERR_SPC_UPDATE), + "Changed CTYPE%d from '%s' to '%s' (VELREF=%d)", i+1, + wcs->ctype[i], ctype, wcs->velref); + status = FIXERR_SUCCESS; + } + + strncpy(wcs->ctype[i], ctype, 9); + } + + // Tidy up. + if (status == FIXERR_SUCCESS) { + wcsutil_null_fill(72, wcs->ctype[i]); + wcsutil_null_fill(72, wcs->specsys); + } + + // No need to check for others, wcsset() will fail if so. + return status; + + } else if (status == SPCERR_BAD_SPEC_PARAMS) { + // An AIPS spectral type was found but with invalid velref. + return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), + "Invalid parameter value: velref = %d", wcs->velref); + } + } + + return FIXERR_NO_CHANGE; +} + +//---------------------------------------------------------------------------- + +int celfix(struct wcsprm *wcs) + +{ + static const char *function = "celfix"; + + if (wcs == 0x0) return FIXERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + // Initialize if required. + int status; + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return fix_wcserr[status]; + } + + // Was an NCP or GLS projection code translated? + if (wcs->lat >= 0) { + // Check ctype. + if (strcmp(wcs->ctype[wcs->lat]+5, "NCP") == 0) { + strcpy(wcs->ctype[wcs->lng]+5, "SIN"); + strcpy(wcs->ctype[wcs->lat]+5, "SIN"); + + if (wcs->npvmax < wcs->npv + 2) { + // Allocate space for two more PVi_ma keyvalues. + if (wcs->m_flag == WCSSET && wcs->pv == wcs->m_pv) { + if (!(wcs->pv = calloc(wcs->npv+2, sizeof(struct pvcard)))) { + wcs->pv = wcs->m_pv; + return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); + } + + wcs->npvmax = wcs->npv + 2; + wcs->m_flag = WCSSET; + + for (int k = 0; k < wcs->npv; k++) { + wcs->pv[k] = wcs->m_pv[k]; + } + + if (wcs->m_pv) free(wcs->m_pv); + wcs->m_pv = wcs->pv; + + } else { + return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); + } + } + + struct celprm *wcscel = &(wcs->cel); + struct prjprm *wcsprj = &(wcscel->prj); + wcs->pv[wcs->npv].i = wcs->lat + 1; + wcs->pv[wcs->npv].m = 1; + wcs->pv[wcs->npv].value = wcsprj->pv[1]; + (wcs->npv)++; + + wcs->pv[wcs->npv].i = wcs->lat + 1; + wcs->pv[wcs->npv].m = 2; + wcs->pv[wcs->npv].value = wcsprj->pv[2]; + (wcs->npv)++; + + return FIXERR_SUCCESS; + + } else if (strcmp(wcs->ctype[wcs->lat]+5, "GLS") == 0) { + strcpy(wcs->ctype[wcs->lng]+5, "SFL"); + strcpy(wcs->ctype[wcs->lat]+5, "SFL"); + + if (wcs->crval[wcs->lng] != 0.0 || wcs->crval[wcs->lat] != 0.0) { + // In the AIPS convention, setting the reference longitude and + // latitude for GLS does not create an oblique graticule. A non-zero + // reference longitude introduces an offset in longitude in the normal + // way, whereas a non-zero reference latitude simply translates the + // reference point (i.e. the map as a whole) to that latitude. This + // might be effected by adjusting CRPIXja but that is complicated by + // the linear transformation and instead is accomplished here by + // setting theta_0. + if (wcs->npvmax < wcs->npv + 3) { + // Allocate space for three more PVi_ma keyvalues. + if (wcs->m_flag == WCSSET && wcs->pv == wcs->m_pv) { + if (!(wcs->pv = calloc(wcs->npv+3, sizeof(struct pvcard)))) { + wcs->pv = wcs->m_pv; + return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); + } + + wcs->npvmax = wcs->npv + 3; + wcs->m_flag = WCSSET; + + for (int k = 0; k < wcs->npv; k++) { + wcs->pv[k] = wcs->m_pv[k]; + } + + if (wcs->m_pv) free(wcs->m_pv); + wcs->m_pv = wcs->pv; + + } else { + return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); + } + } + + wcs->pv[wcs->npv].i = wcs->lng + 1; + wcs->pv[wcs->npv].m = 0; + wcs->pv[wcs->npv].value = 1.0; + (wcs->npv)++; + + // Note that the reference longitude is still zero. + wcs->pv[wcs->npv].i = wcs->lng + 1; + wcs->pv[wcs->npv].m = 1; + wcs->pv[wcs->npv].value = 0.0; + (wcs->npv)++; + + wcs->pv[wcs->npv].i = wcs->lng + 1; + wcs->pv[wcs->npv].m = 2; + wcs->pv[wcs->npv].value = wcs->crval[wcs->lat]; + (wcs->npv)++; + } + + return FIXERR_SUCCESS; + } + } + + return FIXERR_NO_CHANGE; +} + +//---------------------------------------------------------------------------- + +int cylfix(const int naxis[], struct wcsprm *wcs) + +{ + static const char *function = "cylfix"; + + if (naxis == 0x0) return FIXERR_NO_CHANGE; + if (wcs == 0x0) return FIXERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + // Initialize if required. + int status; + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return fix_wcserr[status]; + } + + // Check that we have a cylindrical projection. + if (wcs->cel.prj.category != CYLINDRICAL) return FIXERR_NO_CHANGE; + if (wcs->naxis < 2) return FIXERR_NO_CHANGE; + + + // Compute the native longitude in each corner of the image. + unsigned short ncnr = 1 << wcs->naxis; + + unsigned short indx[NMAX]; + for (int k = 0; k < NMAX; k++) { + indx[k] = 1 << k; + } + + int stat[4]; + double img[4][NMAX], phi[4], pix[4][NMAX], theta[4], world[4][NMAX]; + + double phimin = 1.0e99; + double phimax = -1.0e99; + for (unsigned short icnr = 0; icnr < ncnr;) { + // Do four corners at a time. + for (int j = 0; j < 4; j++, icnr++) { + double *pixj = pix[j]; + + for (int k = 0; k < wcs->naxis; k++) { + if (icnr & indx[k]) { + *(pixj++) = naxis[k] + 0.5; + } else { + *(pixj++) = 0.5; + } + } + } + + if (!(status = wcsp2s(wcs, 4, NMAX, pix[0], img[0], phi, theta, world[0], + stat))) { + for (int j = 0; j < 4; j++) { + if (phi[j] < phimin) phimin = phi[j]; + if (phi[j] > phimax) phimax = phi[j]; + } + } + } + + if (phimin > phimax) return fix_wcserr[status]; + + // Any changes needed? + if (phimin >= -180.0 && phimax <= 180.0) return FIXERR_NO_CHANGE; + + + // Compute the new reference pixel coordinates. + double phi0 = (phimin + phimax) / 2.0; + double theta0 = 0.0; + + double x, y; + if ((status = prjs2x(&(wcs->cel.prj), 1, 1, 1, 1, &phi0, &theta0, &x, &y, + stat))) { + if (status == PRJERR_BAD_PARAM) { + status = FIXERR_BAD_PARAM; + } else { + status = FIXERR_NO_REF_PIX_COORD; + } + return wcserr_set(WCSFIX_ERRMSG(status)); + } + + for (int k = 0; k < wcs->naxis; k++) { + img[0][k] = 0.0; + } + img[0][wcs->lng] = x; + img[0][wcs->lat] = y; + + if ((status = linx2p(&(wcs->lin), 1, 0, img[0], pix[0]))) { + return wcserr_set(WCSFIX_ERRMSG(fix_linerr[status])); + } + + + // Compute celestial coordinates at the new reference pixel. + if ((status = wcsp2s(wcs, 1, 0, pix[0], img[0], phi, theta, world[0], + stat))) { + return fix_wcserr[status]; + } + + // Compute native coordinates of the celestial pole. + double lng = 0.0; + double lat = 90.0; + (void)sphs2x(wcs->cel.euler, 1, 1, 1, 1, &lng, &lat, phi, theta); + + wcs->crpix[wcs->lng] = pix[0][wcs->lng]; + wcs->crpix[wcs->lat] = pix[0][wcs->lat]; + wcs->crval[wcs->lng] = world[0][wcs->lng]; + wcs->crval[wcs->lat] = world[0][wcs->lat]; + wcs->lonpole = phi[0] - phi0; + + wcs->flag = (wcs->flag == -WCSSET) ? 1 : 0; + return wcsset(wcs); +} + +//---------------------------------------------------------------------------- + +// Helper function used only by wcspcx(). +static int unscramble(int n, int mapto[], int step, int type, void *vptr); + +int wcspcx( + struct wcsprm *wcs, + int dopc, + int permute, + double rotn[2]) + +{ + static const char *function = "wcspcx"; + + // Initialize if required. + if (wcs == 0x0) return FIXERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + int status; + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return fix_wcserr[status]; + } + + // Check for CDi_j usage. + double *wcscd = wcs->cd; + if ((wcs->altlin & 1) || !(wcs->altlin & 2)) { + if ((wcs->altlin & 1) && dopc == 1) { + // Recompose PCi_j + CDELTi. + wcscd = wcs->pc; + } else { + return wcserr_set(WCSERR_SET(FIXERR_BAD_PARAM), + "CDi_j is not used in this coordinate representation"); + } + } + + // Check for sequent distortions. + if (wcs->lin.disseq) { + return wcserr_set(WCSERR_SET(FIXERR_BAD_COORD_TRANS), + "Cannot handle coordinate descriptions containing sequent distortions"); + } + + + // Allocate memory in bulk for two nxn matrices. + int naxis = wcs->naxis; + double *mem; + if ((mem = calloc(2*naxis*naxis, sizeof(double))) == 0x0) { + return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); + } + + double *mat = mem; + double *inv = mem + naxis*naxis; + + // Construct the transpose of CDi_j with each element squared. + double *matij = mat; + for (int i = 0; i < naxis; i++) { + double *cdji = wcscd + i; + for (int j = 0; j < naxis; j++) { + *(matij++) = (*cdji) * (*cdji); + cdji += naxis; + } + } + + // Invert the matrix. + if ((status = matinv(naxis, mat, inv))) { + return wcserr_set(WCSERR_SET(FIXERR_SINGULAR_MTX), + "No solution for CDi_j matrix decomposition"); + } + + // Apply scaling. + double *invij = inv; + double *pcij = wcs->pc; + double *cdij = wcscd; + for (int i = 0; i < naxis; i++) { + double scl = 0.0; + for (int j = 0; j < naxis; j++) { + scl += *(invij++); + } + + scl = sqrt(scl); + wcs->cdelt[i] /= scl; + + for (int j = 0; j < naxis; j++) { + *(pcij++) = *(cdij++) * scl; + } + } + + // mapto[i] records where row i of PCi_j should move to. + int *mapto = 0x0; + if ((mapto = (int*)malloc(naxis*sizeof(int))) == 0x0) { + free(mem); + return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); + } + + for (int i = 0; i < naxis; i++) { + mapto[i] = -1; + } + + // Ensure that latitude always follows longitude. + if (wcs->lng >= 0 && wcs->lat >= 0) { + double *pci = wcs->pc + naxis*wcs->lng; + + // Take the first non-zero element in the row. + for (int j = 0; j < naxis; j++) { + if (fabs(pci[j]) != 0.0) { + mapto[wcs->lng] = j; + break; + } + } + + if (mapto[wcs->lng] == naxis-1) { + mapto[wcs->lng]--; + } + + mapto[wcs->lat] = mapto[wcs->lng] + 1; + } + + // Fill in the rest of the row permutation map. + for (int j = 0; j < naxis; j++) { + // Column j. + double *pcij = wcs->pc + j; + double colmax = 0.0; + + // Look down the column to find the absolute maximum element. + for (int i = 0; i < naxis; i++, pcij += naxis) { + if (!(mapto[i] < 0)) { + // This row is already mapped. + continue; + } + + if (fabs(*pcij) > colmax) { + mapto[i] = j; + colmax = fabs(*pcij); + } + } + } + + + // Fix the sign of CDELTi. Celestial axes are special, otherwise diagonal + // elements of the correctly permuted matrix should be positive. + for (int i = 0; i < naxis; i++) { + int chsgn; + double *pci = wcs->pc + naxis*i; + + // Celestial axes are special. + if (i == wcs->lng) { + // Longitude axis - force CDELTi < 0.0. + chsgn = (wcs->cdelt[i] > 0.0); + } else if (i == wcs->lat) { + // Latitude axis - force CDELTi > 0.0. + chsgn = (wcs->cdelt[i] < 0.0); + } else { + chsgn = (pci[mapto[i]] < 0.0); + } + + if (chsgn) { + wcs->cdelt[i] = -wcs->cdelt[i]; + + for (int j = 0; j < naxis; j++) { + // Test needed to prevent negative zeros. + if (pci[j] != 0.0) { + pci[j] = -pci[j]; + } + } + } + } + + free(mem); + + // Setting bit 3 in wcsprm::altlin stops wcsset() from reconstructing + // PCi_j and CDELTi from CDi_j. + wcs->altlin |= 8; + + + // Compute rotation angle of each basis vector of the celestial axes. + if (rotn) { + if (wcs->lng < 0 || wcs->lat < 0) { + // No celestial axes. + rotn[0] = 0.0; + rotn[1] = 0.0; + + } else { + double x, y; + x = wcs->pc[naxis*wcs->lng + mapto[wcs->lng]]; + y = wcs->pc[naxis*wcs->lat + mapto[wcs->lng]]; + rotn[0] = atan2d(y, x); + + y = -wcs->pc[naxis*wcs->lng + mapto[wcs->lat]]; + x = wcs->pc[naxis*wcs->lat + mapto[wcs->lat]]; + rotn[1] = atan2d(y, x); + } + } + + + // Permute rows? + if (permute) { + // Check whether there's anything to unscramble. + int scrambled = 0; + for (int i = 0; i < naxis; i++) { + if (mapto[i] != i) { + scrambled = 1; + break; + } + } + + if (scrambled) { + for (int i = 0; i < naxis; i++) { + // Do columns of the PCi_ja matrix. + if (unscramble(naxis, mapto, naxis, 1, wcs->pc + i)) goto cleanup; + } + if (unscramble(naxis, mapto, 1, 1, wcs->cdelt)) goto cleanup; + if (unscramble(naxis, mapto, 1, 1, wcs->crval)) goto cleanup; + if (unscramble(naxis, mapto, 1, 2, wcs->cunit)) goto cleanup; + if (unscramble(naxis, mapto, 1, 2, wcs->ctype)) goto cleanup; + + for (int ipv = 0; ipv < wcs->npv; ipv++) { + // Noting that PVi_ma axis numbers are 1-relative. + int i = wcs->pv[ipv].i - 1; + wcs->pv[ipv].i = mapto[i] + 1; + } + + for (int ips = 0; ips < wcs->nps; ips++) { + // Noting that PSi_ma axis numbers are 1-relative. + int i = wcs->ps[ips].i - 1; + wcs->ps[ips].i = mapto[i] + 1; + } + + if (wcs->altlin & 2) { + for (int i = 0; i < naxis; i++) { + // Do columns of the CDi_ja matrix. + if (unscramble(naxis, mapto, naxis, 1, wcs->cd + i)) goto cleanup; + } + } + + if (wcs->altlin & 4) { + if (unscramble(naxis, mapto, 1, 1, wcs->crota)) goto cleanup; + } + + if (unscramble(naxis, mapto, 1, 3, wcs->colax)) goto cleanup; + if (unscramble(naxis, mapto, 1, 2, wcs->cname)) goto cleanup; + if (unscramble(naxis, mapto, 1, 1, wcs->crder)) goto cleanup; + if (unscramble(naxis, mapto, 1, 1, wcs->csyer)) goto cleanup; + if (unscramble(naxis, mapto, 1, 1, wcs->czphs)) goto cleanup; + if (unscramble(naxis, mapto, 1, 1, wcs->cperi)) goto cleanup; + + // Coordinate lookup tables. + for (int itab = 0; itab < wcs->ntab; itab++) { + for (int m = 0; m < wcs->tab[itab].M; m++) { + int i = wcs->tab[itab].map[m]; + wcs->tab[itab].map[m] = mapto[i]; + } + } + + for (int iwtb = 0; iwtb < wcs->nwtb; iwtb++) { + int i = wcs->wtb[iwtb].i; + wcs->wtb[iwtb].i = mapto[i]; + } + + // Distortions? No. Prior distortions operate on pixel coordinates and + // therefore are not permuted, and sequent distortions are not handled. + } + } + + free(mapto); + + // Reset the struct. + wcs->flag = (wcs->flag == -WCSSET) ? 1 : 0; + if ((status = wcsset(wcs))) return fix_wcserr[status]; + + return FIXERR_SUCCESS; + +cleanup: + if (mapto) free(mapto); + return wcserr_set(WCSFIX_ERRMSG(FIXERR_MEMORY)); +} + + +int unscramble( + int n, + int mapto[], + int step, + int type, + void *vptr) + +{ + if (step == 0) step = 1; + + if (type == 1) { + double *dval = (double *)vptr; + double *dtmp; + if ((dtmp = (double *)malloc(n*sizeof(double))) == 0x0) { + return 1; + } + + for (int i = 0; i < n; i++) { + dtmp[mapto[i]] = dval[i*step]; + } + + for (int i = 0; i < n; i++) { + dval[i*step] = dtmp[i]; + } + + free(dtmp); + + } else if (type == 2) { + char (*cval)[72] = (char (*)[72])vptr; + char (*ctmp)[72]; + if ((ctmp = (char (*)[72])malloc(n*72*sizeof(char))) == 0x0) { + return 1; + } + + for (int i = 0; i < n; i++) { + memcpy(ctmp[mapto[i]], cval[i], 72); + } + + for (int i = 0; i < n; i++) { + memcpy(cval[i], ctmp[i], 72); + } + + free(ctmp); + + } else if (type == 3) { + int *ival = (int *)vptr; + int *itmp; + if ((itmp = (int *)malloc(n*sizeof(int))) == 0x0) { + return 1; + } + + for (int i = 0; i < n; i++) { + itmp[mapto[i]] = ival[i]; + } + + for (int i = 0; i < n; i++) { + ival[i] = itmp[i]; + } + + free(itmp); + } + + return 0; +} diff --git a/deps/wcslib/C/wcsfix.h b/deps/wcslib/C/wcsfix.h new file mode 100644 index 0000000..8c729b9 --- /dev/null +++ b/deps/wcslib/C/wcsfix.h @@ -0,0 +1,656 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsfix.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wcsfix routines +* ------------------------------ +* Routines in this suite identify and translate various forms of construct +* known to occur in FITS headers that violate the FITS World Coordinate System +* (WCS) standard described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of celestial coordinates in FITS", += Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (WCS Paper II) += += "Representations of spectral coordinates in FITS", += Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. += 2006, A&A, 446, 747 (WCS Paper III) += += "Representations of time coordinates in FITS - += Time and relative dimension in space", += Rots, A.H., Bunclark, P.S., Calabretta, M.R., Allen, S.L., += Manchester, R.N., & Thompson, W.T. 2015, A&A, 574, A36 (WCS Paper VII) +* +* Repairs effected by these routines range from the translation of +* non-standard values for standard WCS keywords, to the repair of malformed +* coordinate representations. Some routines are also provided to check the +* consistency of pairs of keyvalues that define the same measure in two +* different ways, for example, as a date and an MJD. +* +* A separate routine, wcspcx(), "regularizes" the linear transformation matrix +* component (PCi_j) of the coordinate transformation to make it more human- +* readable. Where a coordinate description was constructed from CDi_j, it +* decomposes it into PCi_j + CDELTi in a meaningful way. Optionally, it can +* also diagonalize the PCi_j matrix (as far as possible), i.e. undo a +* transposition of axes in the intermediate pixel coordinate system. +* +* Non-standard keyvalues: +* ----------------------- +* AIPS-convention celestial projection types, NCP and GLS, and spectral +* types, 'FREQ-LSR', 'FELO-HEL', etc., set in CTYPEia are translated +* on-the-fly by wcsset() but without modifying the relevant ctype[], pv[] or +* specsys members of the wcsprm struct. That is, only the information +* extracted from ctype[] is translated when wcsset() fills in wcsprm::cel +* (celprm struct) or wcsprm::spc (spcprm struct). +* +* On the other hand, these routines do change the values of wcsprm::ctype[], +* wcsprm::pv[], wcsprm::specsys and other wcsprm struct members as +* appropriate to produce the same result as if the FITS header itself had +* been translated. +* +* Auxiliary WCS header information not used directly by WCSLIB may also be +* translated. For example, the older DATE-OBS date format (wcsprm::dateobs) +* is recast to year-2000 standard form, and MJD-OBS (wcsprm::mjdobs) will be +* deduced from it if not already set. +* +* Certain combinations of keyvalues that result in malformed coordinate +* systems, as described in Sect. 7.3.4 of Paper I, may also be repaired. +* These are handled by cylfix(). +* +* Non-standard keywords: +* ---------------------- +* The AIPS-convention CROTAn keywords are recognized as quasi-standard +* and as such are accomodated by wcsprm::crota[] and translated to +* wcsprm::pc[][] by wcsset(). These are not dealt with here, nor are any +* other non-standard keywords since these routines work only on the contents +* of a wcsprm struct and do not deal with FITS headers per se. In +* particular, they do not identify or translate CD00i00j, PC00i00j, PROJPn, +* EPOCH, VELREF or VSOURCEa keywords; this may be done by the FITS WCS +* header parser supplied with WCSLIB, refer to wcshdr.h. +* +* wcsfix() and wcsfixi() apply all of the corrections handled by the following +* specific functions, which may also be invoked separately: +* +* - cdfix(): Sets the diagonal element of the CDi_ja matrix to 1.0 if all +* CDi_ja keywords associated with a particular axis are omitted. +* +* - datfix(): recast an older DATE-OBS date format in dateobs to year-2000 +* standard form. Derive dateref from mjdref if not already set. +* Alternatively, if dateref is set and mjdref isn't, then derive mjdref +* from it. If both are set, then check consistency. Likewise for dateobs +* and mjdobs; datebeg and mjdbeg; dateavg and mjdavg; and dateend and +* mjdend. +* +* - obsfix(): if only one half of obsgeo[] is set, then derive the other +* half from it. If both halves are set, then check consistency. +* +* - unitfix(): translate some commonly used but non-standard unit strings in +* the CUNITia keyvalues, e.g. 'DEG' -> 'deg'. +* +* - spcfix(): translate AIPS-convention spectral types, 'FREQ-LSR', +* 'FELO-HEL', etc., in ctype[] as set from CTYPEia. +* +* - celfix(): translate AIPS-convention celestial projection types, NCP and +* GLS, in ctype[] as set from CTYPEia. +* +* - cylfix(): fixes WCS keyvalues for malformed cylindrical projections that +* suffer from the problem described in Sect. 7.3.4 of Paper I. +* +* +* wcsfix() - Translate a non-standard WCS struct +* ---------------------------------------------- +* wcsfix() is identical to wcsfixi(), but lacks the info argument. +* +* +* wcsfixi() - Translate a non-standard WCS struct +* ----------------------------------------------- +* wcsfixi() applies all of the corrections handled separately by cdfix(), +* datfix(), obsfix(), unitfix(), spcfix(), celfix(), and cylfix(). +* +* Given: +* ctrl int Do potentially unsafe translations of non-standard +* unit strings as described in the usage notes to +* wcsutrn(). +* +* naxis const int [] +* Image axis lengths. If this array pointer is set to +* zero then cylfix() will not be invoked. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Returned: +* stat int [NWCSFIX] +* Status returns from each of the functions. Use the +* preprocessor macros NWCSFIX to dimension this vector +* and CDFIX, DATFIX, OBSFIX, UNITFIX, SPCFIX, CELFIX, +* and CYLFIX to access its elements. A status value +* of -2 is set for functions that were not invoked. +* +* info struct wcserr [NWCSFIX] +* Status messages from each of the functions. Use the +* preprocessor macros NWCSFIX to dimension this vector +* and CDFIX, DATFIX, OBSFIX, UNITFIX, SPCFIX, CELFIX, +* and CYLFIX to access its elements. +* +* Note that the memory allocated by wcsfixi() for the +* message in each wcserr struct (wcserr::msg, if +* non-zero) must be freed by the user. See +* wcsdealloc(). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: One or more of the translation functions +* returned an error. +* +* +* cdfix() - Fix erroneously omitted CDi_ja keywords +* ------------------------------------------------- +* cdfix() sets the diagonal element of the CDi_ja matrix to unity if all +* CDi_ja keywords associated with a given axis were omitted. According to WCS +* Paper I, if any CDi_ja keywords at all are given in a FITS header then those +* not given default to zero. This results in a singular matrix with an +* intersecting row and column of zeros. +* +* cdfix() is expected to be invoked before wcsset(), which will fail if these +* errors have not been corrected. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* -1: No change required (not an error). +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* datfix() - Translate DATE-OBS and derive MJD-OBS or vice versa +* -------------------------------------------------------------- +* datfix() translates the old DATE-OBS date format set in wcsprm::dateobs to +* year-2000 standard form (yyyy-mm-ddThh:mm:ss). It derives wcsprm::dateref +* from wcsprm::mjdref if not already set. Alternatively, if dateref is set +* and mjdref isn't, then it derives mjdref from it. If both are set but +* disagree by more than 0.001 day (86.4 seconds) then an error status is +* returned. Likewise for wcsprm::dateobs and wcsprm::mjdobs; wcsprm::datebeg +* and wcsprm::mjdbeg; wcsprm::dateavg and wcsprm::mjdavg; and wcsprm::dateend +* and wcsprm::mjdend. +* +* If neither dateobs nor mjdobs are set, but wcsprm::jepoch (primarily) or +* wcsprm::bepoch is, then both are derived from it. If jepoch and/or bepoch +* are set but disagree with dateobs or mjdobs by more than 0.000002 year +* (63.2 seconds), an informative message is produced. +* +* The translations done by datfix() do not affect and are not affected by +* wcsset(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* wcsprm::dateref and/or wcsprm::mjdref may be changed. +* wcsprm::dateobs and/or wcsprm::mjdobs may be changed. +* wcsprm::datebeg and/or wcsprm::mjdbeg may be changed. +* wcsprm::dateavg and/or wcsprm::mjdavg may be changed. +* wcsprm::dateend and/or wcsprm::mjdend may be changed. +* +* Function return value: +* int Status return value: +* -1: No change required (not an error). +* 0: Success. +* 1: Null wcsprm pointer passed. +* 5: Invalid parameter value. +* +* For returns >= 0, a detailed message, whether +* informative or an error message, may be set in +* wcsprm::err if enabled, see wcserr_enable(), with +* wcsprm::err.status set to FIXERR_DATE_FIX. +* +* Notes: +* 1: The MJD algorithms used by datfix() are from D.A. Hatcher, 1984, QJRAS, +* 25, 53-55, as modified by P.T. Wallace for use in SLALIB subroutines +* CLDJ and DJCL. +* +* +* obsfix() - complete the OBSGEO-[XYZLBH] vector of observatory coordinates +* ------------------------------------------------------------------------- +* obsfix() completes the wcsprm::obsgeo vector of observatory coordinates. +* That is, if only the (x,y,z) Cartesian coordinate triplet or the (l,b,h) +* geodetic coordinate triplet are set, then it derives the other triplet from +* it. If both triplets are set, then it checks for consistency at the level +* of 1 metre. +* +* The operations done by obsfix() do not affect and are not affected by +* wcsset(). +* +* Given: +* ctrl int Flag that controls behaviour if one triplet is +* defined and the other is only partially defined: +* 0: Reset only the undefined elements of an +* incomplete coordinate triplet. +* 1: Reset all elements of an incomplete triplet. +* 2: Don't make any changes, check for consistency +* only. Returns an error if either of the two +* triplets is incomplete. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* wcsprm::obsgeo may be changed. +* +* Function return value: +* int Status return value: +* -1: No change required (not an error). +* 0: Success. +* 1: Null wcsprm pointer passed. +* 5: Invalid parameter value. +* +* For returns >= 0, a detailed message, whether +* informative or an error message, may be set in +* wcsprm::err if enabled, see wcserr_enable(), with +* wcsprm::err.status set to FIXERR_OBS_FIX. +* +* Notes: +* 1: While the International Terrestrial Reference System (ITRS) is based +* solely on Cartesian coordinates, it recommends the use of the GRS80 +* ellipsoid in converting to geodetic coordinates. However, while WCS +* Paper III recommends ITRS Cartesian coordinates, Paper VII prescribes +* the use of the IAU(1976) ellipsoid for geodetic coordinates, and +* consequently that is what is used here. +* +* 2: For reference, parameters of commonly used global reference ellipsoids: +* += a (m) 1/f Standard += --------- ------------- -------------------------------- += 6378140 298.2577 IAU(1976) += 6378137 298.257222101 GRS80 += 6378137 298.257223563 WGS84 += 6378136 298.257 IERS(1989) += 6378136.6 298.25642 IERS(2003,2010), IAU(2009/2012) +* +* where f = (a - b) / a is the flattening, and a and b are the semi-major +* and semi-minor radii in metres. +* +* 3: The transformation from geodetic (lng,lat,hgt) to Cartesian (x,y,z) is +* += x = (n + hgt)*coslng*coslat, += y = (n + hgt)*sinlng*coslat, += z = (n*(1.0 - e^2) + hgt)*sinlat, +* +* where the "prime vertical radius", n, is a function of latitude +* += n = a / sqrt(1 - (e*sinlat)^2), +* +* and a, the equatorial radius, and e^2 = (2 - f)*f, the (first) +* eccentricity of the ellipsoid, are constants. obsfix() inverts these +* iteratively by writing +* += x = rho*coslng*coslat, += y = rho*sinlng*coslat, += zeta = rho*sinlat, +* +* where +* += rho = n + hgt, += = sqrt(x^2 + y^2 + zeta^2), += zeta = z / (1 - n*e^2/rho), +* +* and iterating over the value of zeta. Since e is small, a good first +* approximation is given by zeta = z. +* +* +* unitfix() - Correct aberrant CUNITia keyvalues +* ---------------------------------------------- +* unitfix() applies wcsutrn() to translate non-standard CUNITia keyvalues, +* e.g. 'DEG' -> 'deg', also stripping off unnecessary whitespace. +* +* unitfix() is expected to be invoked before wcsset(), which will fail if +* non-standard CUNITia keyvalues have not been translated. +* +* Given: +* ctrl int Do potentially unsafe translations described in the +* usage notes to wcsutrn(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* -1: No change required (not an error). +* 0: Success (an alias was applied). +* 1: Null wcsprm pointer passed. +* +* When units are translated (i.e. 0 is returned), an +* informative message is set in wcsprm::err if enabled, +* see wcserr_enable(), with wcsprm::err.status set to +* FIXERR_UNITS_ALIAS. +* +* +* spcfix() - Translate AIPS-convention spectral types +* --------------------------------------------------- +* spcfix() translates AIPS-convention spectral coordinate types, +* '{FREQ,FELO,VELO}-{LSR,HEL,OBS}' (e.g. 'FREQ-OBS', 'FELO-HEL', 'VELO-LSR') +* set in wcsprm::ctype[], subject to VELREF set in wcsprm::velref. +* +* Note that if wcs::specsys is already set then it will not be overridden. +* +* AIPS-convention spectral types set in CTYPEia are translated on-the-fly by +* wcsset() but without modifying wcsprm::ctype[] or wcsprm::specsys. That is, +* only the information extracted from wcsprm::ctype[] is translated when +* wcsset() fills in wcsprm::spc (spcprm struct). spcfix() modifies +* wcsprm::ctype[] so that if the header is subsequently written out, e.g. by +* wcshdo(), then it will contain translated CTYPEia keyvalues. +* +* The operations done by spcfix() do not affect and are not affected by +* wcsset(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. wcsprm::ctype[] +* and/or wcsprm::specsys may be changed. +* +* Function return value: +* int Status return value: +* -1: No change required (not an error). +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* +* For returns >= 0, a detailed message, whether +* informative or an error message, may be set in +* wcsprm::err if enabled, see wcserr_enable(), with +* wcsprm::err.status set to FIXERR_SPC_UPDTE. +* +* +* celfix() - Translate AIPS-convention celestial projection types +* --------------------------------------------------------------- +* celfix() translates AIPS-convention celestial projection types, NCP and +* GLS, set in the ctype[] member of the wcsprm struct. +* +* Two additional pv[] keyvalues are created when translating NCP, and three +* are created when translating GLS with non-zero reference point. If the pv[] +* array was initially allocated by wcsini() then the array will be expanded if +* necessary. Otherwise, error 2 will be returned if sufficient empty slots +* are not already available for use. +* +* AIPS-convention celestial projection types set in CTYPEia are translated +* on-the-fly by wcsset() but without modifying wcsprm::ctype[], wcsprm::pv[], +* or wcsprm::npv. That is, only the information extracted from +* wcsprm::ctype[] is translated when wcsset() fills in wcsprm::cel (celprm +* struct). celfix() modifies wcsprm::ctype[], wcsprm::pv[], and wcsprm::npv +* so that if the header is subsequently written out, e.g. by wcshdo(), then it +* will contain translated CTYPEia keyvalues and the relevant PVi_ma. +* +* The operations done by celfix() do not affect and are not affected by +* wcsset(). However, it uses information in the wcsprm struct provided by +* wcsset(), and will invoke it if necessary. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. wcsprm::ctype[] +* and/or wcsprm::pv[] may be changed. +* +* Function return value: +* int Status return value: +* -1: No change required (not an error). +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* +* cylfix() - Fix malformed cylindrical projections +* ------------------------------------------------ +* cylfix() fixes WCS keyvalues for malformed cylindrical projections that +* suffer from the problem described in Sect. 7.3.4 of Paper I. +* +* cylfix() requires the wcsprm struct to have been set up by wcsset(), and +* will invoke it if necessary. After modification, the struct is reset on +* return with an explicit call to wcsset(). +* +* Given: +* naxis const int [] +* Image axis lengths. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Function return value: +* int Status return value: +* -1: No change required (not an error). +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* 8: All of the corner pixel coordinates are invalid. +* 9: Could not determine reference pixel coordinate. +* 10: Could not determine reference pixel value. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* +* wcspcx() - regularize PCi_j +* --------------------------- +* wcspcx() "regularizes" the linear transformation matrix component of the +* coordinate transformation (PCi_ja) to make it more human-readable. +* +* Normally, upon encountering a FITS header containing a CDi_ja matrix, +* wcsset() simply treats it as PCi_ja and sets CDELTia to unity. However, +* wcspcx() decomposes CDi_ja into PCi_ja and CDELTia in such a way that +* CDELTia form meaningful scaling parameters. In practice, the residual +* PCi_ja matrix will often then be orthogonal, i.e. unity, or describing a +* pure rotation, axis permutation, or reflection, or a combination thereof. +* +* The decomposition is based on normalizing the length in the transformed +* system (i.e. intermediate pixel coordinates) of the orthonormal basis +* vectors of the pixel coordinate system. This deviates slightly from the +* prescription given by Eq. (4) of WCS Paper I, namely Sum(j=1,N)(PCi_ja)² = 1, +* in replacing the sum over j with the sum over i. Consequently, the columns +* of PCi_ja will consist of unit vectors. In practice, especially in cubes +* and higher dimensional images, at least some pairs of these unit vectors, if +* not all, will often be orthogonal or close to orthogonal. +* +* The sign of CDELTia is chosen to make the PCi_ja matrix as close to the, +* possibly permuted, unit matrix as possible, except that where the coordinate +* description contains a pair of celestial axes, the sign of CDELTia is set +* negative for the longitude axis and positive for the latitude axis. +* +* Optionally, rows of the PCi_ja matrix may also be permuted to diagonalize +* it as far as possible, thus undoing any transposition of axes in the +* intermediate pixel coordinate system. +* +* If the coordinate description contains a celestial plane, then the angle of +* rotation of each of the basis vectors associated with the celestial axes is +* returned. For a pure rotation the two angles should be identical. Any +* difference between them is a measure of axis skewness. +* +* The decomposition is not performed for axes involving a sequent distortion +* function that is defined in terms of CDi_ja, such as TPV, TNX, or ZPX, which +* always are. The independent variables of the polynomial are therefore +* intermediate world coordinates rather than intermediate pixel coordinates. +* Because sequent distortions are always applied before CDELTia, if CDi_ja was +* translated to PCi_ja plus CDELTia, then the distortion would be altered +* unless the polynomial coefficients were also adjusted to account for the +* change of scale. +* +* wcspcx() requires the wcsprm struct to have been set up by wcsset(), and +* will invoke it if necessary. The wcsprm struct is reset on return with an +* explicit call to wcsset(). +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters. +* +* Given: +* dopc int If 1, then PCi_ja and CDELTia, as given, will be +* recomposed according to the above prescription. If 0, +* the operation is restricted to decomposing CDi_ja. +* +* permute int If 1, then after decomposition (or recomposition), +* permute rows of PCi_ja to make the axes of the +* intermediate pixel coordinate system match as closely +* as possible those of the pixel coordinates. That is, +* make it as close to a diagonal matrix as possible. +* However, celestial axes are special in always being +* paired, with the longitude axis preceding the latitude +* axis. +* +* All WCS entities indexed by i, such as CTYPEia, +* CRVALia, CDELTia, etc., including coordinate lookup +* tables, will also be permuted as necessary to account +* for the change to PCi_ja. This does not apply to +* CRPIXja, nor prior distortion functions. These +* operate on pixel coordinates, which are not affected +* by the permutation. +* +* Returned: +* rotn double[2] Rotation angle [deg] of each basis vector associated +* with the celestial axes. For a pure rotation the two +* angles should be identical. Any difference between +* them is a measure of axis skewness. +* +* May be set to the NULL pointer if this information is +* not required. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 5: CDi_j matrix not used. +* 6: Sequent distortion function present. +* +* +* Global variable: const char *wcsfix_errmsg[] - Status return messages +* --------------------------------------------------------------------- +* Error messages to match the status value returned from each function. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSFIX +#define WCSLIB_WCSFIX + +#include "wcs.h" +#include "wcserr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define CDFIX 0 +#define DATFIX 1 +#define OBSFIX 2 +#define UNITFIX 3 +#define SPCFIX 4 +#define CELFIX 5 +#define CYLFIX 6 +#define NWCSFIX 7 + +extern const char *wcsfix_errmsg[]; +#define cylfix_errmsg wcsfix_errmsg + +enum wcsfix_errmsg_enum { + FIXERR_OBSGEO_FIX = -5, // Observatory coordinates amended. + FIXERR_DATE_FIX = -4, // Date string reformatted. + FIXERR_SPC_UPDATE = -3, // Spectral axis type modified. + FIXERR_UNITS_ALIAS = -2, // Units alias translation. + FIXERR_NO_CHANGE = -1, // No change. + FIXERR_SUCCESS = 0, // Success. + FIXERR_NULL_POINTER = 1, // Null wcsprm pointer passed. + FIXERR_MEMORY = 2, // Memory allocation failed. + FIXERR_SINGULAR_MTX = 3, // Linear transformation matrix is singular. + FIXERR_BAD_CTYPE = 4, // Inconsistent or unrecognized coordinate + // axis types. + FIXERR_BAD_PARAM = 5, // Invalid parameter value. + FIXERR_BAD_COORD_TRANS = 6, // Invalid coordinate transformation + // parameters. + FIXERR_ILL_COORD_TRANS = 7, // Ill-conditioned coordinate transformation + // parameters. + FIXERR_BAD_CORNER_PIX = 8, // All of the corner pixel coordinates are + // invalid. + FIXERR_NO_REF_PIX_COORD = 9, // Could not determine reference pixel + // coordinate. + FIXERR_NO_REF_PIX_VAL = 10 // Could not determine reference pixel value. +}; + +int wcsfix(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[]); + +int wcsfixi(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[], + struct wcserr info[]); + +int cdfix(struct wcsprm *wcs); + +int datfix(struct wcsprm *wcs); + +int obsfix(int ctrl, struct wcsprm *wcs); + +int unitfix(int ctrl, struct wcsprm *wcs); + +int spcfix(struct wcsprm *wcs); + +int celfix(struct wcsprm *wcs); + +int cylfix(const int naxis[], struct wcsprm *wcs); + +int wcspcx(struct wcsprm *wcs, int dopc, int permute, double rotn[2]); + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_WCSFIX diff --git a/deps/wcslib/C/wcshdr.c b/deps/wcslib/C/wcshdr.c new file mode 100644 index 0000000..50a5947 --- /dev/null +++ b/deps/wcslib/C/wcshdr.c @@ -0,0 +1,2262 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcshdr.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsutil.h" +#include "wcshdr.h" +#include "wtbarr.h" +#include "tab.h" +#include "dis.h" +#include "wcs.h" + +// Map status return value to message. +const char *wcshdr_errmsg[] = { + "Success", + "Null wcsprm pointer passed", + "Memory allocation failed", + "Invalid column selection", + "Fatal error returned by Flex parser", + "Invalid tabular parameters"}; + +// Map error returns for lower-level routines. +const int wcshdr_taberr[] = { + WCSHDRERR_SUCCESS, // 0: TABERR_SUCCESS + WCSHDRERR_NULL_POINTER, // 1: TABERR_NULL_POINTER + WCSHDRERR_MEMORY, // 2: TABERR_MEMORY + WCSHDRERR_BAD_TABULAR_PARAMS // 3: TABERR_BAD_PARAMS + // 4: TABERR_BAD_X + // 5: TABERR_BAD_WORLD +}; + +static const int WCSSET = 137; // Matching wcs.c + +static const int DIS_DOTPD = 1024; // Matching dis.c + +// Internal helper functions, not for general use. +static void wcshdo_format(int, int, const double [], char *); +static void wcshdo_tpdterm(int, int, char *); +static void wcshdo_util(int, const char [], const char [], int, const char [], + int, int, int, char, int, int [], char [], const char [], int *, char **, + int *); + +// Convenience macro for invoking wcserr_set(). +#define WCSHDR_ERRMSG(status) WCSERR_SET(status), wcshdr_errmsg[status] + +//---------------------------------------------------------------------------- + +int wcstab(struct wcsprm *wcs) + +{ + static const char *function = "wcstab"; + + // Pointers to allocated memory. + char (*PSi_0a)[72] = 0x0, (*PSi_1a)[72] = 0x0, (*PSi_2a)[72] = 0x0; + int *PVi_1a = 0x0, *PVi_2a = 0x0, *PVi_3a = 0x0; + int *tabidx = 0x0; + + int status = 0; + + if (wcs == 0x0) return WCSHDRERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + // Free memory previously allocated by wcstab(). + if (wcs->flag != -1 && wcs->m_flag == WCSSET) { + if (wcs->wtb == wcs->m_wtb) wcs->wtb = 0x0; + if (wcs->tab == wcs->m_tab) wcs->tab = 0x0; + + if (wcs->m_wtb) free(wcs->m_wtb); + if (wcs->m_tab) { + for (int j = 0; j < wcs->ntab; j++) { + tabfree(wcs->m_tab + j); + } + + free(wcs->m_tab); + } + } + + wcs->ntab = 0; + wcs->nwtb = 0; + wcs->wtb = 0x0; + wcs->tab = 0x0; + + + // Determine the number of -TAB axes. + int naxis = wcs->naxis; + int *tabax; + if (!(tabax = calloc(naxis, sizeof(int)))) { + return wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); + } + + int ntabax = 0; + for (int i = 0; i < naxis; i++) { + // Null fill. + wcsutil_null_fill(72, wcs->ctype[i]); + + if (!strcmp(wcs->ctype[i]+4, "-TAB")) { + tabax[i] = ntabax++; + } else { + tabax[i] = -1; + } + } + + if (ntabax == 0) { + // No lookup tables. + goto cleanup; + } + + + // Collect information from the PSi_ma and PVi_ma keyvalues. + if (!((PSi_0a = calloc(ntabax, sizeof(char[72]))) && + (PVi_1a = calloc(ntabax, sizeof(int))) && + (PVi_2a = calloc(ntabax, sizeof(int))) && + (PSi_1a = calloc(ntabax, sizeof(char[72]))) && + (PSi_2a = calloc(ntabax, sizeof(char[72]))) && + (PVi_3a = calloc(ntabax, sizeof(int))) && + (tabidx = calloc(ntabax, sizeof(int))))) { + status = wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); + goto cleanup; + } + + for (int itabax = 0; itabax < ntabax; itabax++) { + // Remember that calloc() zeroes allocated memory. + PVi_1a[itabax] = 1; + PVi_2a[itabax] = 1; + PVi_3a[itabax] = 1; + } + + for (int ip = 0; ip < wcs->nps; ip++) { + int itabax = tabax[wcs->ps[ip].i - 1]; + if (itabax >= 0) { + switch (wcs->ps[ip].m) { + case 0: + // EXTNAME. + strcpy(PSi_0a[itabax], wcs->ps[ip].value); + wcsutil_null_fill(72, PSi_0a[itabax]); + break; + case 1: + // TTYPEn for coordinate array. + strcpy(PSi_1a[itabax], wcs->ps[ip].value); + wcsutil_null_fill(72, PSi_1a[itabax]); + break; + case 2: + // TTYPEn for index vector. + strcpy(PSi_2a[itabax], wcs->ps[ip].value); + wcsutil_null_fill(72, PSi_2a[itabax]); + break; + } + } + } + + for (int ip = 0; ip < wcs->npv; ip++) { + int itabax = tabax[wcs->pv[ip].i - 1]; + if (itabax >= 0) { + switch (wcs->pv[ip].m) { + case 1: + // EXTVER. + PVi_1a[itabax] = (int)(wcs->pv[ip].value + 0.5); + break; + case 2: + // EXTLEVEL. + PVi_2a[itabax] = (int)(wcs->pv[ip].value + 0.5); + break; + case 3: + // Table axis number. + PVi_3a[itabax] = (int)(wcs->pv[ip].value + 0.5); + break; + } + } + } + + + // Determine the number of independent tables. + for (int itabax = 0; itabax < ntabax; itabax++) { + // These have no defaults. + if (!PSi_0a[itabax][0] || !PSi_1a[itabax][0]) { + status = wcserr_set(WCSERR_SET(WCSHDRERR_BAD_TABULAR_PARAMS), + "Invalid tabular parameters: PSi_0a and PSi_1a must be specified"); + goto cleanup; + } + + tabidx[itabax] = -1; + int jtabax; + for (jtabax = 0; jtabax < itabax; jtabax++) { + // EXTNAME, EXTVER, EXTLEVEL, and TTYPEn for the coordinate array + // must match for each axis of a multi-dimensional lookup table. + if (strcmp(PSi_0a[itabax], PSi_0a[jtabax]) == 0 && + strcmp(PSi_1a[itabax], PSi_1a[jtabax]) == 0 && + PVi_1a[itabax] == PVi_1a[jtabax] && + PVi_2a[itabax] == PVi_2a[jtabax]) { + tabidx[itabax] = tabidx[jtabax]; + break; + } + } + + if (jtabax == itabax) { + tabidx[itabax] = wcs->ntab; + wcs->ntab++; + } + } + + if (!(wcs->tab = calloc(wcs->ntab, sizeof(struct tabprm)))) { + status = wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); + goto cleanup; + } + wcs->m_tab = wcs->tab; + + // Table dimensionality; find the largest axis number. + for (int itabax = 0; itabax < ntabax; itabax++) { + struct tabprm *tabp = wcs->tab + tabidx[itabax]; + + // PVi_3a records the 1-relative table axis number. + if (PVi_3a[itabax] > tabp->M) { + tabp->M = PVi_3a[itabax]; + } + } + + for (int itab = 0; itab < wcs->ntab; itab++) { + if ((status = tabini(1, wcs->tab[itab].M, 0, wcs->tab + itab))) { + status = wcserr_set(WCSHDR_ERRMSG(wcshdr_taberr[status])); + goto cleanup; + } + } + + + // Copy parameters into the tabprm structs. + for (int i = 0; i < naxis; i++) { + int itabax; + if ((itabax = tabax[i]) < 0) { + // Not a -TAB axis. + continue; + } + + // PVi_3a records the 1-relative table axis number. + int m = PVi_3a[itabax] - 1; + + struct tabprm *tabp; + tabp = wcs->tab + tabidx[itabax]; + tabp->map[m] = i; + tabp->crval[m] = wcs->crval[i]; + } + + // Check for completeness. + for (int itab = 0; itab < wcs->ntab; itab++) { + for (int m = 0; m < wcs->tab[itab].M; m++) { + if (wcs->tab[itab].map[m] < 0) { + status = wcserr_set(WCSERR_SET(WCSHDRERR_BAD_TABULAR_PARAMS), + "Invalid tabular parameters: the axis mapping is undefined"); + goto cleanup; + } + } + } + + + // Set up for reading the arrays; how many arrays are there? + for (int itabax = 0; itabax < ntabax; itabax++) { + // Does this -TAB axis have a non-degenerate index array? + if (PSi_2a[itabax][0]) { + wcs->nwtb++; + } + } + + // Add one coordinate array for each table. + wcs->nwtb += wcs->ntab; + + // Allocate memory for structs to be returned. + if (!(wcs->wtb = calloc(wcs->nwtb, sizeof(struct wtbarr)))) { + wcs->nwtb = 0; + + status = wcserr_set(WCSHDR_ERRMSG(WCSHDRERR_MEMORY)); + goto cleanup; + } + wcs->m_wtb = wcs->wtb; + + // Set pointers for the index and coordinate arrays. + struct wtbarr *wtbp = wcs->wtb; + for (int itab = 0; itab < wcs->ntab; itab++) { + int getcrd = 1; + for (int itabax = 0; itabax < ntabax; itabax++) { + if (tabidx[itabax] != itab) continue; + + if (getcrd) { + // Coordinate array. + wtbp->i = itabax + 1; + wtbp->m = PVi_3a[itabax]; + wtbp->kind = 'c'; + + strcpy(wtbp->extnam, PSi_0a[itabax]); + wtbp->extver = PVi_1a[itabax]; + wtbp->extlev = PVi_2a[itabax]; + strcpy(wtbp->ttype, PSi_1a[itabax]); + wtbp->row = 1L; + wtbp->ndim = wcs->tab[itab].M + 1; + wtbp->dimlen = wcs->tab[itab].K; + wtbp->arrayp = &(wcs->tab[itab].coord); + + // Signal for tabset() to take this memory. + wcs->tab[itab].m_coord = (double *)0x1; + + wtbp++; + getcrd = 0; + } + + if (PSi_2a[itabax][0]) { + // Index array. + wtbp->i = itabax + 1; + wtbp->m = PVi_3a[itabax]; + wtbp->kind = 'i'; + + int m = wtbp->m - 1; + strcpy(wtbp->extnam, PSi_0a[itabax]); + wtbp->extver = PVi_1a[itabax]; + wtbp->extlev = PVi_2a[itabax]; + strcpy(wtbp->ttype, PSi_2a[itabax]); + wtbp->row = 1L; + wtbp->ndim = 1; + wtbp->dimlen = wcs->tab[itab].K + m; + wtbp->arrayp = wcs->tab[itab].index + m; + + // Signal for tabset() to take this memory. + wcs->tab[itab].m_indxs[m] = (double *)0x1; + + wtbp++; + } + } + } + +cleanup: + if (tabax) free(tabax); + if (tabidx) free(tabidx); + if (PSi_0a) free(PSi_0a); + if (PVi_1a) free(PVi_1a); + if (PVi_2a) free(PVi_2a); + if (PSi_1a) free(PSi_1a); + if (PSi_2a) free(PSi_2a); + if (PVi_3a) free(PVi_3a); + + if (status) { + if (wcs->tab) free(wcs->tab); + if (wcs->wtb) free(wcs->wtb); + } + + return status; +} + +//---------------------------------------------------------------------------- + +int wcsidx(int nwcs, struct wcsprm **wcs, int alts[27]) + +{ + for (int a = 0; a < 27; a++) { + alts[a] = -1; + } + + if (wcs == 0x0) { + return WCSHDRERR_NULL_POINTER; + } + + struct wcsprm *wcsp = *wcs; + for (int iwcs = 0; iwcs < nwcs; iwcs++, wcsp++) { + if (wcsp->colnum || wcsp->colax[0]) continue; + + int a; + if (wcsp->alt[0] == ' ') { + a = 0; + } else { + a = wcsp->alt[0] - 'A' + 1; + } + + alts[a] = iwcs; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsbdx(int nwcs, struct wcsprm **wcs, int type, short alts[1000][28]) + +{ + for (short *ip = alts[0]; ip < alts[0] + 28*1000; ip++) { + *ip = -1; + } + + for (int icol = 0; icol < 1000; icol++) { + alts[icol][27] = 0; + } + + if (wcs == 0x0) { + return WCSHDRERR_NULL_POINTER; + } + + struct wcsprm *wcsp = *wcs; + for (int iwcs = 0; iwcs < nwcs; iwcs++, wcsp++) { + int a; + if (wcsp->alt[0] == ' ') { + a = 0; + } else { + a = wcsp->alt[0] - 'A' + 1; + } + + if (type) { + // Pixel list. + if (wcsp->colax[0]) { + for (int i = 0; i < wcsp->naxis; i++) { + alts[wcsp->colax[i]][a] = iwcs; + alts[wcsp->colax[i]][27]++; + } + } else if (!wcsp->colnum) { + alts[0][a] = iwcs; + alts[0][27]++; + } + + } else { + // Binary table image array. + if (wcsp->colnum) { + alts[wcsp->colnum][a] = iwcs; + alts[wcsp->colnum][27]++; + } else if (!wcsp->colax[0]) { + alts[0][a] = iwcs; + alts[0][27]++; + } + } + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsvfree(int *nwcs, struct wcsprm **wcs) + +{ + int status = 0; + + if (wcs == 0x0) { + return WCSHDRERR_NULL_POINTER; + } + + struct wcsprm *wcsp = *wcs; + for (int a = 0; a < *nwcs; a++, wcsp++) { + status |= wcsfree(wcsp); + } + + free(*wcs); + + *nwcs = 0; + *wcs = 0x0; + + return status; +} + +//---------------------------------------------------------------------------- +// Matching the definitions in dis.c. +#define I_DTYPE 0 // Distortion type code. +#define I_NIPARM 1 // Full (allocated) length of iparm[]. +#define I_NDPARM 2 // No. of parameters in dparm[], excl. work space. +#define I_TPDNCO 3 // No. of TPD coefficients, forward... +#define I_TPDINV 4 // ...and inverse. +#define I_TPDAUX 5 // True if auxiliary variables are used. +#define I_TPDRAD 6 // True if the radial variable is used. + +int wcshdo(int ctrl, struct wcsprm *wcs, int *nkeyrec, char **header) + +// ::: CUBEFACE and STOKES handling? + +{ + static const char *function = "wcshdo"; + + const char axid[] = "xyxuvu", *cp; + const int nTPD[] = {1, 4, 7, 12, 17, 24, 31, 40, 49, 60}; + + char comment[128], keyvalue[96], keyword[16]; + int status = 0; + + *nkeyrec = 0; + *header = 0x0; + + if (wcs == 0x0) return WCSHDRERR_NULL_POINTER; + struct wcserr **err = &(wcs->err); + + if (abs(wcs->flag) != WCSSET) { + if ((status = wcsset(wcs))) return status; + } + + int naxis; + if ((naxis = wcs->naxis) == 0) { + return 0; + } + + + // These are mainly for convenience. + char alt = wcs->alt[0]; + if (alt == ' ') alt = '\0'; + int colnum = wcs->colnum; + int *colax = wcs->colax; + + int primage = 0; + int bintab = 0; + int pixlist = 0; + if (colnum) { + bintab = 1; + } else if (colax[0]) { + pixlist = 1; + } else { + primage = 1; + } + + + // Initialize floating point format control. + char format[16]; + *format = '\0'; + if (ctrl & WCSHDO_P17) { + strcpy(format, "% 20.17G"); + } else if (ctrl & WCSHDO_P16) { + strcpy(format, "% 20.16G"); + } else if (ctrl & WCSHDO_P15) { + strcpy(format, "% 20.15G"); + } else if (ctrl & WCSHDO_P14) { + strcpy(format, "% 20.14G"); + } else if (ctrl & WCSHDO_P13) { + strcpy(format, "% 20.13G"); + } else if (ctrl & WCSHDO_P12) { + strcpy(format, "%20.12G"); + } + + if (*format && (ctrl & WCSHDO_EFMT)) { + if (format[6] == 'G') { + format[6] = 'E'; + } else { + format[7] = 'E'; + } + } + + int dofmt = (*format == '\0'); + + + // WCS dimension. + if (!pixlist) { + sprintf(keyvalue, "%20d", naxis); + wcshdo_util(ctrl, "WCSAXES", "WCAX", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "Number of coordinate axes", nkeyrec, header, &status); + } + + // Reference pixel coordinates. + if (dofmt) wcshdo_format('G', naxis, wcs->crpix, format); + for (int j = 0; j < naxis; j++) { + wcsutil_double2str(keyvalue, format, wcs->crpix[j]); + wcshdo_util(ctrl, "CRPIX", "CRP", WCSHDO_CRPXna, "CRPX", 0, j+1, 0, alt, + colnum, colax, keyvalue, "Pixel coordinate of reference point", nkeyrec, + header, &status); + } + + // Linear transformation matrix. + if (dofmt) wcshdo_format('G', naxis*naxis, wcs->pc, format); + int k = 0; + for (int i = 0; i < naxis; i++) { + for (int j = 0; j < naxis; j++, k++) { + if (i == j) { + if (wcs->pc[k] == 1.0) continue; + } else { + if (wcs->pc[k] == 0.0) continue; + } + + wcsutil_double2str(keyvalue, format, wcs->pc[k]); + wcshdo_util(ctrl, "PC", bintab ? "PC" : "P", WCSHDO_TPCn_ka, + bintab ? 0x0 : "PC", i+1, j+1, 0, alt, colnum, colax, + keyvalue, "Coordinate transformation matrix element", + nkeyrec, header, &status); + } + } + + // Coordinate increment at reference point. + if (dofmt) wcshdo_format('G', naxis, wcs->cdelt, format); + for (int i = 0; i < naxis; i++) { + wcsutil_double2str(keyvalue, format, wcs->cdelt[i]); + comment[0] = '\0'; + if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); + strcat(comment, "Coordinate increment at reference point"); + wcshdo_util(ctrl, "CDELT", "CDE", WCSHDO_CRPXna, "CDLT", i+1, 0, 0, alt, + colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } + + // Units of coordinate increment and reference value. + for (int i = 0; i < naxis; i++) { + if (wcs->cunit[i][0] == '\0') continue; + + sprintf(keyvalue, "'%s'", wcs->cunit[i]); + wcshdo_util(ctrl, "CUNIT", "CUN", WCSHDO_CRPXna, "CUNI", i+1, 0, 0, alt, + colnum, colax, keyvalue, "Units of coordinate increment and value", + nkeyrec, header, &status); + } + + // May need to alter ctype for particular distortions so do basic checks + // now. Note that SIP, TPV, DSS, TNX, and ZPX are restricted to exactly + // two axes and cannot coexist with other distortion types. + char tpdsrc[24]; + int dosip = 0, dotpd = 0, dotpv = 0; + struct disprm *dis; + + if ((dis = wcs->lin.dispre)) { + for (int i = 0; i < naxis; i++) { + if (strcmp(dis->dtype[i], "SIP") == 0) { + // Simple Imaging Polynomial (SIP). Write it in its native form + // if possible, unless specifically requested to write it as TPD. + dotpd = (dis->iparm[i][I_DTYPE] & DIS_DOTPD); + + if (!dotpd) {; + if (alt || + dis->Nhat[0] != 2 || + dis->Nhat[1] != 2 || + dis->axmap[0][0] != 0 || + dis->axmap[0][1] != 1 || + dis->axmap[1][0] != 0 || + dis->axmap[1][1] != 1 || + dis->offset[0][0] != wcs->crpix[0] || + dis->offset[0][1] != wcs->crpix[1] || + dis->offset[1][0] != wcs->crpix[0] || + dis->offset[1][1] != wcs->crpix[1] || + dis->scale[0][0] != 1.0 || + dis->scale[0][1] != 1.0 || + dis->scale[1][0] != 1.0 || + dis->scale[1][1] != 1.0) { + // Must have been read as a 'SIP' distortion, CPDISja = 'SIP'. + // Cannot be written as native SIP so write it as TPD. + dotpd = DIS_DOTPD; + } else if (strncmp(wcs->ctype[0], "RA---TAN", 8) || + strncmp(wcs->ctype[1], "DEC--TAN", 8)) { + // Must have been permuted by wcssub(). + // Native SIP doesn't have axis mapping so write it as TPD. + dotpd = DIS_DOTPD; + } + + if (dotpd) { + strcpy(tpdsrc, "SIP coordinates"); + } else { + dosip = 1; + } + } + + break; + } + } + } + + if ((dis = wcs->lin.disseq)) { + for (int i = 0; i < naxis; i++) { + if (strcmp(dis->dtype[i], "TPV") == 0) { + // TPV "projection". Write it in its native form if possible, + // unless specifically requested to write it as TPD. + dotpd = (dis->iparm[i][I_DTYPE] & DIS_DOTPD); + + if (!dotpd) {; + if (dis->axmap[wcs->lng][0] != wcs->lng || + dis->axmap[wcs->lng][1] != wcs->lat || + dis->axmap[wcs->lat][0] != wcs->lat || + dis->axmap[wcs->lat][1] != wcs->lng || + dis->offset[wcs->lng][wcs->lng] != 0.0 || + dis->offset[wcs->lng][wcs->lat] != 0.0 || + dis->offset[wcs->lat][wcs->lng] != 0.0 || + dis->offset[wcs->lat][wcs->lat] != 0.0 || + dis->scale[wcs->lng][wcs->lng] != 1.0 || + dis->scale[wcs->lng][wcs->lat] != 1.0 || + dis->scale[wcs->lat][wcs->lng] != 1.0 || + dis->scale[wcs->lat][wcs->lat] != 1.0) { + // Must have been read as a 'TPV' distortion, CPDISja = 'TPV'. + // Cannot be written as native TPV so write it as TPD. + dotpd = DIS_DOTPD; + } + + if (dotpd) { + strcpy(tpdsrc, "TPV \"projection\""); + } else { + dotpv = 1; + } + } + + break; + + } else if (strcmp(dis->dtype[i], "DSS") == 0) { + // Always written as TPD. + dotpd = DIS_DOTPD; + strcpy(tpdsrc, dis->dtype[i]); + + } else if (strncmp(dis->dtype[i], "WAT", 3) == 0) { + // Always written as TPD. + dotpd = DIS_DOTPD; + strcpy(tpdsrc, dis->dtype[i]+4); + + if (strcmp(dis->dtype[i], "DSS") == 0) { + strcpy(tpdsrc, wcs->wcsname); + } else { + strcat(tpdsrc, " \"projection\""); + } + + break; + } + } + } + + // Coordinate type. + for (int i = 0; i < naxis; i++) { + if (wcs->ctype[i][0] == '\0') continue; + + sprintf(keyvalue, "'%s'", wcs->ctype[i]); + strcpy(comment, "Coordinate type code"); + + char *ctypei = keyvalue + 1; + if (i == wcs->lng || i == wcs->lat) { + // Alter ctype for particular distortions. + if (dosip) { + // It could have come in as CPDISja = 'SIP'. + strcpy(ctypei+8, "-SIP'"); + } else if (dotpv) { + // Reinstate projection code edited by wcsset(). + strcpy(ctypei+4, "-TPV'"); + } + + if (strncmp(ctypei+8, "-SIP", 4) == 0) { + strcpy(comment, "TAN (gnomonic) projection + SIP distortions"); + + } else if (strncmp(ctypei+4, "-TPV", 4) == 0) { + strcpy(comment, "TAN (gnomonic) projection + distortions"); + + } else { + if (strncmp(ctypei, "RA--", 4) == 0) { + strcpy(comment, "Right ascension, "); + + } else if (strncmp(ctypei, "DEC-", 4) == 0) { + strcpy(comment, "Declination, "); + + } else if (strncmp(ctypei+1, "LON", 3) == 0 || + strncmp(ctypei+1, "LAT", 3) == 0) { + ctypei[0] = toupper(ctypei[0]); + + switch (ctypei[0]) { + case 'G': + strcpy(comment, "Galactic l"); + break; + case 'E': + strcpy(comment, "Ecliptic l"); + break; + case 'H': + strcpy(comment, "Helioecliptic l"); + break; + case 'S': + strcpy(comment, "Supergalactic l"); + break; + default: + // User-defined coordinate system. + strcpy(comment, "L"); + break; + } + + if (i == wcs->lng) { + strcat(comment, "ongitude, "); + } else { + strcat(comment, "atitude, "); + } + } + + strcat(comment, wcs->cel.prj.name); + strcat(comment, " projection"); + } + + } else if (i == wcs->spec) { + char ptype, xtype; + spctyp(wcs->ctype[i], 0x0, 0x0, comment, 0x0, &ptype, &xtype, 0x0); + if (ptype == xtype) { + strcat(comment, " (linear)"); + } else { + switch (xtype) { + case 'F': + strcat(comment, " (linear in frequency)"); + break; + case 'V': + strcat(comment, " (linear in velocity)"); + break; + case 'W': + strcat(comment, " (linear in wavelength)"); + break; + } + } + } + + wcshdo_util(ctrl, "CTYPE", "CTY", WCSHDO_CRPXna, "CTYP", i+1, 0, 0, alt, + colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } + + // Coordinate value at reference point. + for (int i = 0; i < naxis; i++) { + if (dofmt) wcshdo_format('G', 1, wcs->crval+i, format); + wcsutil_double2str(keyvalue, format, wcs->crval[i]); + comment[0] = '\0'; + if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); + strcat(comment, "Coordinate value at reference point"); + wcshdo_util(ctrl, "CRVAL", "CRV", WCSHDO_CRPXna, "CRVL", i+1, 0, 0, alt, + colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } + + // Parameter values. + if (dofmt) strcpy(format, "%20.12G"); + for (int k = 0; k < wcs->npv; k++) { + wcsutil_double2str(keyvalue, format, (wcs->pv[k]).value); + if ((wcs->pv[k]).i == (wcs->lng + 1)) { + switch ((wcs->pv[k]).m) { + case 1: + strcpy(comment, "[deg] Native longitude of the reference point"); + break; + case 2: + strcpy(comment, "[deg] Native latitude of the reference point"); + break; + case 3: + if (primage) { + sprintf(keyword, "LONPOLE%c", alt); + } else if (bintab) { + sprintf(keyword, "LONP%d%c", colnum, alt); + } else { + sprintf(keyword, "LONP%d%c", colax[(wcs->pv[k]).i - 1], alt); + } + sprintf(comment, "[deg] alias for %s (has precedence)", keyword); + break; + case 4: + if (primage) { + sprintf(keyword, "LATPOLE%c", alt); + } else if (bintab) { + sprintf(keyword, "LATP%d%c", colnum, alt); + } else { + sprintf(keyword, "LATP%d%c", colax[(wcs->pv[k]).i - 1], alt); + } + sprintf(comment, "[deg] alias for %s (has precedence)", keyword); + break; + } + } else if ((wcs->pv[k]).i == (wcs->lat + 1)) { + sprintf(comment, "%s projection parameter", wcs->cel.prj.code); + } else { + strcpy(comment, "Coordinate transformation parameter"); + } + + wcshdo_util(ctrl, "PV", "V", WCSHDO_PVn_ma, "PV", wcs->pv[k].i, -1, + wcs->pv[k].m, alt, colnum, colax, keyvalue, comment, nkeyrec, header, + &status); + } + + for (int k = 0; k < wcs->nps; k++) { + sprintf(keyvalue, "'%s'", (wcs->ps[k]).value); + wcshdo_util(ctrl, "PS", "S", WCSHDO_PVn_ma, "PS", wcs->ps[k].i, -1, + wcs->ps[k].m, alt, colnum, colax, keyvalue, + "Coordinate transformation parameter", nkeyrec, header, &status); + } + + // Celestial and spectral transformation parameters. + if (!undefined(wcs->lonpole)) { + wcsutil_double2str(keyvalue, format, wcs->lonpole); + wcshdo_util(ctrl, "LONPOLE", "LONP", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "[deg] Native longitude of celestial pole", nkeyrec, header, + &status); + } + + if (!undefined(wcs->latpole)) { + wcsutil_double2str(keyvalue, format, wcs->latpole); + wcshdo_util(ctrl, "LATPOLE", "LATP", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "[deg] Native latitude of celestial pole", nkeyrec, header, + &status); + } + + if (wcs->restfrq != 0.0) { + wcsutil_double2str(keyvalue, format, wcs->restfrq); + wcshdo_util(ctrl, "RESTFRQ", "RFRQ", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "[Hz] Line rest frequency", nkeyrec, header, &status); + } + + if (wcs->restwav != 0.0) { + wcsutil_double2str(keyvalue, format, wcs->restwav); + wcshdo_util(ctrl, "RESTWAV", "RWAV", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "[Hz] Line rest wavelength", nkeyrec, header, &status); + } + + // - - - - - - - - - - - - - - - - - Auxiliary coordinate axis information. + char timeunit[16]; + sprintf(timeunit, "%.15s", wcs->timeunit[0] ? wcs->timeunit : "s"); + + // Coordinate axis title. + if (wcs->cname) { + for (int i = 0; i < naxis; i++) { + if (wcs->cname[i][0] == '\0') continue; + + sprintf(keyvalue, "'%s'", wcs->cname[i]); + wcshdo_util(ctrl, "CNAME", "CNA", WCSHDO_CNAMna, "CNAM", i+1, 0, 0, + alt, colnum, colax, keyvalue, "Axis name for labelling purposes", + nkeyrec, header, &status); + } + } + + // Random error in coordinate. + if (wcs->crder) { + for (int i = 0; i < naxis; i++) { + if (undefined(wcs->crder[i])) continue; + + wcsutil_double2str(keyvalue, format, wcs->crder[i]); + comment[0] = '\0'; + if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); + strcat(comment, "Random error in coordinate"); + wcshdo_util(ctrl, "CRDER", "CRD", WCSHDO_CNAMna, "CRDE", i+1, 0, 0, + alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } + } + + // Systematic error in coordinate. + if (wcs->csyer) { + for (int i = 0; i < naxis; i++) { + if (undefined(wcs->csyer[i])) continue; + + wcsutil_double2str(keyvalue, format, wcs->csyer[i]); + comment[0] = '\0'; + if (wcs->cunit[i][0]) sprintf(comment, "[%s] ", wcs->cunit[i]); + strcat(comment, "Systematic error in coordinate"); + wcshdo_util(ctrl, "CSYER", "CSY", WCSHDO_CNAMna, "CSYE", i+1, 0, 0, + alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } + } + + // Time at zero point of phase axis. + if (wcs->czphs) { + for (int i = 0; i < naxis; i++) { + if (undefined(wcs->czphs[i])) continue; + + wcsutil_double2str(keyvalue, format, wcs->czphs[i]); + sprintf(comment, "[%s] Time at zero point of phase axis", timeunit); + wcshdo_util(ctrl, "CZPHS", "CZP", WCSHDO_CNAMna, "CZPH", i+1, 0, 0, + alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } + } + + // Period of phase axis. + if (wcs->cperi) { + for (int i = 0; i < naxis; i++) { + if (undefined(wcs->cperi[i])) continue; + + wcsutil_double2str(keyvalue, format, wcs->cperi[i]); + sprintf(comment, "[%s] Period of phase axis", timeunit); + wcshdo_util(ctrl, "CPERI", "CPR", WCSHDO_CNAMna, "CPER", i+1, 0, 0, + alt, colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } + } + + // - - - - - - - - - - - - - - - - - - - - - - - - Coordinate system title. + + // Coordinate system title. + if (wcs->wcsname[0]) { + sprintf(keyvalue, "'%s'", wcs->wcsname); + if (bintab) { + wcshdo_util(ctrl, "WCSNAME", "WCSN", 0, 0x0, 0, 0, 0, alt, colnum, + colax, keyvalue, "Coordinate system title", nkeyrec, header, &status); + } else { + // TWCS was a mistake. + wcshdo_util(ctrl, "WCSNAME", "TWCS", WCSHDO_WCSNna, "WCSN", 0, 0, 0, + alt, colnum, colax, keyvalue, "Coordinate system title", + nkeyrec, header, &status); + } + } + + // - - - - - - - - - - - - - - - - - Time reference system and measurement. + + // Time scale. + if (wcs->timesys[0]) { + sprintf(keyvalue, "'%s'", wcs->timesys); + wcshdo_util(ctrl, "TIMESYS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Time scale", nkeyrec, header, &status); + } + + // Time reference position. + if (wcs->trefpos[0]) { + sprintf(keyvalue, "'%s'", wcs->trefpos); + wcshdo_util(ctrl, "TREFPOS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Time reference position", nkeyrec, header, &status); + } + + // Time reference direction. + if (wcs->trefdir[0]) { + sprintf(keyvalue, "'%s'", wcs->trefdir); + wcshdo_util(ctrl, "TREFDIR", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Time reference direction", nkeyrec, header, &status); + } + + // Ephemerides used for pathlength delay calculation. + if (wcs->plephem[0]) { + sprintf(keyvalue, "'%s'", wcs->plephem); + wcshdo_util(ctrl, "PLEPHEM", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Ephemerides used for pathlength delays", nkeyrec, header, + &status); + } + + // Time units. + if (wcs->timeunit[0]) { + sprintf(keyvalue, "'%s'", wcs->timeunit); + wcshdo_util(ctrl, "TIMEUNIT", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Time units", nkeyrec, header, &status); + } + + // Fiducial (reference) time. + if (wcs->mjdref[0] == 0.0 && wcs->mjdref[1] == 0.0) { + // MJD of fiducial time (simplified if it takes its default value). + wcsutil_double2str(keyvalue, format, 0.0); + wcshdo_util(ctrl, "MJDREF", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[d] MJD of fiducial time", nkeyrec, header, &status); + + } else { + // ISO-8601 fiducial time. + if (wcs->dateref[0]) { + sprintf(keyvalue, "'%s'", wcs->dateref); + wcshdo_util(ctrl, "DATEREF", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "ISO-8601 fiducial time", nkeyrec, header, &status); + } + + if (wcs->mjdref[1] == 0.0) { + // MJD of fiducial time (no fractional part). + if (!undefined(wcs->mjdref[0])) { + wcsutil_double2str(keyvalue, format, wcs->mjdref[0]); + wcshdo_util(ctrl, "MJDREF", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[d] MJD of fiducial time", nkeyrec, header, &status); + } + + } else { + // MJD of fiducial time, integer part. + if (!undefined(wcs->mjdref[0])) { + wcsutil_double2str(keyvalue, format, wcs->mjdref[0]); + wcshdo_util(ctrl, "MJDREFI", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[d] MJD of fiducial time, integer part", nkeyrec, + header, &status); + } + + // MJD of fiducial time, fractional part. + if (!undefined(wcs->mjdref[1])) { + wcsutil_double2str(keyvalue, format, wcs->mjdref[1]); + wcshdo_util(ctrl, "MJDREFF", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[d] MJD of fiducial time, fractional part", nkeyrec, + header, &status); + } + } + } + + // Clock correction. + if (!undefined(wcs->timeoffs)) { + wcsutil_double2str(keyvalue, format, wcs->timeoffs); + sprintf(comment, "[%s] Clock correction", timeunit); + wcshdo_util(ctrl, "TIMEOFFS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // - - - - - - - - - - - - - - - - - - - - - Data timestamps and durations. + + // ISO-8601 time of observation. + if (wcs->dateobs[0]) { + sprintf(keyvalue, "'%s'", wcs->dateobs); + strcpy(comment, "ISO-8601 time of observation"); + + if (ctrl & 1) { + // Allow DOBSn. + wcshdo_util(ctrl, "DATE-OBS", "DOBS", WCSHDO_DOBSn, 0x0, 0, 0, 0, ' ', + colnum, colax, keyvalue, comment, nkeyrec, header, &status); + } else { + // Force DATE-OBS. + wcshdo_util(ctrl, "DATE-OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + } + + // MJD of observation. + if (!undefined(wcs->mjdobs)) { + wcsutil_double2str(keyvalue, format, wcs->mjdobs); + wcshdo_util(ctrl, "MJD-OBS", "MJDOB", 0, 0x0, 0, 0, 0, ' ', colnum, colax, + keyvalue, "[d] MJD of observation", nkeyrec, header, &status); + } + + // Julian epoch of observation. + if (!undefined(wcs->jepoch)) { + wcsutil_double2str(keyvalue, format, wcs->jepoch); + wcshdo_util(ctrl, "JEPOCH", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[a] Julian epoch of observation", nkeyrec, header, &status); + } + + // Besselian epoch of observation. + if (!undefined(wcs->bepoch)) { + wcsutil_double2str(keyvalue, format, wcs->bepoch); + wcshdo_util(ctrl, "BEPOCH", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[a] Besselian epoch of observation", nkeyrec, header, + &status); + } + + // ISO-8601 time at start of observation. + if (wcs->datebeg[0]) { + sprintf(keyvalue, "'%s'", wcs->datebeg); + wcshdo_util(ctrl, "DATE-BEG", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "ISO-8601 time at start of observation", nkeyrec, header, + &status); + } + + // MJD at start of observation. + if (!undefined(wcs->mjdbeg)) { + wcsutil_double2str(keyvalue, format, wcs->mjdbeg); + wcshdo_util(ctrl, "MJD-BEG", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[d] MJD at start of observation", nkeyrec, header, &status); + } + + // Time elapsed at start since fiducial time. + if (!undefined(wcs->tstart)) { + wcsutil_double2str(keyvalue, format, wcs->tstart); + sprintf(comment, "[%s] Time elapsed since fiducial time at start", + timeunit); + wcshdo_util(ctrl, "TSTART", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // ISO-8601 time at midpoint of observation. + if (wcs->dateavg[0]) { + sprintf(keyvalue, "'%s'", wcs->dateavg); + wcshdo_util(ctrl, "DATE-AVG", "DAVG", 0, 0x0, 0, 0, 0, ' ', colnum, colax, + keyvalue, "ISO-8601 time at midpoint of observation", nkeyrec, header, + &status); + } + + // MJD at midpoint of observation. + if (!undefined(wcs->mjdavg)) { + wcsutil_double2str(keyvalue, format, wcs->mjdavg); + wcshdo_util(ctrl, "MJD-AVG", "MJDA", 0, 0x0, 0, 0, 0, ' ', colnum, colax, + keyvalue, "[d] MJD at midpoint of observation", nkeyrec, header, + &status); + } + + // ISO-8601 time at end of observation. + if (wcs->dateend[0]) { + sprintf(keyvalue, "'%s'", wcs->dateend); + wcshdo_util(ctrl, "DATE-END", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "ISO-8601 time at end of observation", nkeyrec, header, + &status); + } + + // MJD at end of observation. + if (!undefined(wcs->mjdend)) { + wcsutil_double2str(keyvalue, format, wcs->mjdend); + wcshdo_util(ctrl, "MJD-END", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[d] MJD at end of observation", nkeyrec, header, &status); + } + + // Time elapsed at end since fiducial time. + if (!undefined(wcs->tstop)) { + wcsutil_double2str(keyvalue, format, wcs->tstop); + sprintf(comment, "[%s] Time elapsed since fiducial time at end", + timeunit); + wcshdo_util(ctrl, "TSTOP", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // Exposure (integration) time. + if (!undefined(wcs->xposure)) { + wcsutil_double2str(keyvalue, format, wcs->xposure); + sprintf(comment, "[%s] Exposure (integration) time", timeunit); + wcshdo_util(ctrl, "XPOSURE", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // Elapsed time (start to stop). + if (!undefined(wcs->telapse)) { + wcsutil_double2str(keyvalue, format, wcs->telapse); + sprintf(comment, "[%s] Elapsed time (start to stop)", timeunit); + wcshdo_util(ctrl, "TELAPSE", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - Timing accuracy. + + // Systematic error in time measurements. + if (!undefined(wcs->timsyer)) { + wcsutil_double2str(keyvalue, format, wcs->timsyer); + sprintf(comment, "[%s] Systematic error in time measurements", timeunit); + wcshdo_util(ctrl, "TIMSYER", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // Relative error in time measurements. + if (!undefined(wcs->timrder)) { + wcsutil_double2str(keyvalue, format, wcs->timrder); + sprintf(comment, "[%s] Relative error in time measurements", timeunit); + wcshdo_util(ctrl, "TIMRDER", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // Time resolution. + if (!undefined(wcs->timedel)) { + wcsutil_double2str(keyvalue, format, wcs->timedel); + sprintf(comment, "[%s] Time resolution", timeunit); + wcshdo_util(ctrl, "TIMEDEL", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // Reference position of timestamp in binned data. + if (!undefined(wcs->timepixr)) { + wcsutil_double2str(keyvalue, format, wcs->timepixr); + wcshdo_util(ctrl, "TIMEPIXR", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Reference position of timestamp in binned data", nkeyrec, + header, &status); + } + + // - - - - - - - - - - - - - - - - - - Spatial & celestial reference frame. + + // Observatory coordinates. + if (!undefined(wcs->obsgeo[0]) && + !undefined(wcs->obsgeo[1]) && + !undefined(wcs->obsgeo[2])) { + + char obsgeo[16] = "OBSGEO-?", obsg[8] = "OBSG?", xyz[] = "XYZ"; + for (int k = 0; k < 3; k++) { + wcsutil_double2str(keyvalue, format, wcs->obsgeo[k]); + sprintf(comment, "[m] observatory %c-coordinate", xyz[k]); + obsgeo[7] = xyz[k]; + obsg[4] = xyz[k]; + wcshdo_util(ctrl, obsgeo, obsg, 0, 0x0, 0, 0, 0, ' ', colnum, colax, + keyvalue, comment, nkeyrec, header, &status); + } + + } else if ( + !undefined(wcs->obsgeo[3]) && + !undefined(wcs->obsgeo[4]) && + !undefined(wcs->obsgeo[5])) { + + wcsutil_double2str(keyvalue, format, wcs->obsgeo[3]); + wcshdo_util(ctrl, "OBSGEO-L", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] IAU(1976) observatory longitude", nkeyrec, header, + &status); + + wcsutil_double2str(keyvalue, format, wcs->obsgeo[4]); + wcshdo_util(ctrl, "OBSGEO-B", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] IAU(1976) observatory latitude", nkeyrec, header, + &status); + + wcsutil_double2str(keyvalue, format, wcs->obsgeo[5]); + wcshdo_util(ctrl, "OBSGEO-L", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[m] IAU(1976) observatory height", nkeyrec, header, + &status); + } + + // Spacecraft orbit ephemeris file. + if (wcs->obsorbit[0]) { + sprintf(keyvalue, "'%s'", wcs->obsorbit); + wcshdo_util(ctrl, "OBSORBIT", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Spacecraft orbit ephemeris file", nkeyrec, header, &status); + } + + // Equatorial coordinate system type. + if (wcs->radesys[0]) { + sprintf(keyvalue, "'%s'", wcs->radesys); + wcshdo_util(ctrl, "RADESYS", "RADE", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "Equatorial coordinate system", nkeyrec, header, &status); + } + + // Equinox of equatorial coordinate system. + if (!undefined(wcs->equinox)) { + wcsutil_double2str(keyvalue, format, wcs->equinox); + wcshdo_util(ctrl, "EQUINOX", "EQUI", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "[yr] Equinox of equatorial coordinates", nkeyrec, header, + &status); + } + + // Reference frame of spectral coordinates. + if (wcs->specsys[0]) { + sprintf(keyvalue, "'%s'", wcs->specsys); + wcshdo_util(ctrl, "SPECSYS", "SPEC", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "Reference frame of spectral coordinates", nkeyrec, header, + &status); + } + + // Reference frame of spectral observation. + if (wcs->ssysobs[0]) { + sprintf(keyvalue, "'%s'", wcs->ssysobs); + wcshdo_util(ctrl, "SSYSOBS", "SOBS", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "Reference frame of spectral observation", nkeyrec, header, + &status); + } + + // Observer's velocity towards source. + if (!undefined(wcs->velosys)) { + wcsutil_double2str(keyvalue, format, wcs->velosys); + wcshdo_util(ctrl, "VELOSYS", "VSYS", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "[m/s] Velocity towards source", nkeyrec, header, &status); + } + + // Redshift of the source. + if (!undefined(wcs->zsource)) { + wcsutil_double2str(keyvalue, format, wcs->zsource); + wcshdo_util(ctrl, "ZSOURCE", "ZSOU", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "Redshift of the source", nkeyrec, header, &status); + } + + // Reference frame of source redshift. + if (wcs->ssyssrc[0]) { + sprintf(keyvalue, "'%s'", wcs->ssyssrc); + wcshdo_util(ctrl, "SSYSSRC", "SSRC", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "Reference frame of source redshift", nkeyrec, header, + &status); + } + + // Velocity orientation angle. + if (!undefined(wcs->velangl)) { + wcsutil_double2str(keyvalue, format, wcs->velangl); + wcshdo_util(ctrl, "VELANGL", "VANG", 0, 0x0, 0, 0, 0, alt, colnum, colax, + keyvalue, "[deg] Velocity orientation angle", nkeyrec, header, &status); + } + + // - - - - - - - - - - - - - - - - - - - - Additional auxiliary parameters. + + struct auxprm *aux; + if ((aux = wcs->aux)) { + if (!undefined(aux->rsun_ref)) { + wcsutil_double2str(keyvalue, format, aux->rsun_ref); + wcshdo_util(ctrl, "RSUN_REF", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[m] Solar radius", nkeyrec, header, &status); + } + + if (!undefined(aux->dsun_obs)) { + wcsutil_double2str(keyvalue, format, aux->dsun_obs); + wcshdo_util(ctrl, "DSUN_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[m] Distance from centre of Sun to observer", nkeyrec, + header, &status); + } + + if (!undefined(aux->crln_obs)) { + wcsutil_double2str(keyvalue, format, aux->crln_obs); + wcshdo_util(ctrl, "CRLN_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] Carrington heliographic lng of observer", nkeyrec, + header, &status); + + if (!undefined(aux->hglt_obs)) { + wcsutil_double2str(keyvalue, format, aux->hglt_obs); + wcshdo_util(ctrl, "CRLT_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] Heliographic latitude of observer", nkeyrec, + header, &status); + } + } + + if (!undefined(aux->hgln_obs)) { + wcsutil_double2str(keyvalue, format, aux->hgln_obs); + wcshdo_util(ctrl, "HGLN_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] Stonyhurst heliographic lng of observer", nkeyrec, + header, &status); + + if (!undefined(aux->hglt_obs)) { + wcsutil_double2str(keyvalue, format, aux->hglt_obs); + wcshdo_util(ctrl, "HGLT_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] Heliographic latitude of observer", nkeyrec, + header, &status); + } + } + + if (!undefined(aux->a_radius)) { + wcsutil_double2str(keyvalue, format, aux->a_radius); + wcshdo_util(ctrl, "A_RADIUS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[m] Object ellipsoid semi-major axis", nkeyrec, + header, &status); + } + + if (!undefined(aux->b_radius)) { + wcsutil_double2str(keyvalue, format, aux->b_radius); + wcshdo_util(ctrl, "B_RADIUS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[m] Object ellipsoid semi-intermediate axis", nkeyrec, + header, &status); + } + + if (!undefined(aux->c_radius)) { + wcsutil_double2str(keyvalue, format, aux->c_radius); + wcshdo_util(ctrl, "C_RADIUS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[m] Object ellipsoid semi-minor axis", nkeyrec, + header, &status); + } + + if (!undefined(aux->blon_obs)) { + wcsutil_double2str(keyvalue, format, aux->blon_obs); + wcshdo_util(ctrl, "BLON_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] Bodycentric longitude of observer", nkeyrec, + header, &status); + } + + if (!undefined(aux->blat_obs)) { + wcsutil_double2str(keyvalue, format, aux->blat_obs); + wcshdo_util(ctrl, "BLAT_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[deg] Bodycentric latitude of observer", nkeyrec, + header, &status); + } + + if (!undefined(aux->bdis_obs)) { + wcsutil_double2str(keyvalue, format, aux->bdis_obs); + wcshdo_util(ctrl, "BDIS_OBS", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "[m] Bodycentric distance of observer", nkeyrec, + header, &status); + } + } + + // - - - - - - - - - - - - - - - - - - - - - Distortion function parameters. + + char term[16]; + double *dparm, keyval; + + if (dosip) { + // Simple Imaging Polynomial (SIP) is handled by translating its dpkey + // records. Determine a suitable numerical precision for the + // polynomial coefficients to avoid trailing zeroes common to all of + // them. + dis = wcs->lin.dispre; + if (dofmt) { + struct dpkey *ikeyp = dis->dp; + int kp0 = 2; + for (int idp = 0; idp < dis->ndp; idp++, ikeyp++) { + cp = strchr(ikeyp->field, '.') + 1; + if (strncmp(cp, "SIP.", 4) != 0) continue; + wcsutil_double2str(keyvalue, "%20.13E", dpkeyd(ikeyp)); + + int kpi = 15; + while (kp0 < kpi && keyvalue[kpi] == '0') kpi--; + kp0 = kpi; + } + + int precision = kp0 - 2; + if (precision < 1) precision = 1; + if (13 < precision) precision = 13; + sprintf(format, "%%20.%dE", precision); + } + + // Ensure the coefficients are written in a human-readable sequence. + for (int j = 0; j <= 1; j++) { + // Distortion function polynomial coefficients. + wcshdo_util(ctrl, "", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + "", "", nkeyrec, header, &status); + + if (j == 0) { + strcpy(keyword, "A_"); + } else { + strcpy(keyword, "B_"); + } + + int degree; + int ncoeff = dis->iparm[j][I_TPDNCO]; + for (degree = 0; degree <= 9; degree++) { + if (ncoeff <= nTPD[degree]) break; + } + + strcpy(keyword+2, "ORDER"); + sprintf(keyvalue, "%20d", degree); + sprintf(comment, "SIP polynomial degree, axis %d, pixel-to-sky", j+1); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + + struct dpkey *ikeyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, ikeyp++) { + if (ikeyp->j != j+1) continue; + if ((keyval = dpkeyd(ikeyp)) == 0.0) continue; + + cp = strchr(ikeyp->field, '.') + 1; + if (strncmp(cp, "SIP.FWD.", 8) != 0) continue; + cp += 8; + strcpy(keyword+2, cp); + int p, q; + sscanf(cp, "%d_%d", &p, &q); + strncpy(term, "xxxxxxxxx", p); + strncpy(term+p, "yyyyyyyyy", q); + term[p+q] = '\0'; + + wcsutil_double2str(keyvalue, format, keyval); + sprintf(comment, "SIP distortion coefficient: %s", term); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + if (dis->maxdis[j] != 0.0) { + strcpy(keyword+2, "DMAX"); + wcsutil_double2str(keyvalue, "%20.3f", dis->maxdis[j]); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, "Maximum value of distortion function", nkeyrec, + header, &status); + } + + // Inverse distortion function polynomial coefficients. + if (dis->disx2p == 0x0) continue; + + wcshdo_util(ctrl, "", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + "", "", nkeyrec, header, &status); + + if (j == 0) { + strcpy(keyword, "AP_"); + } else { + strcpy(keyword, "BP_"); + } + + ncoeff = dis->iparm[j][I_NDPARM] - dis->iparm[j][I_TPDNCO]; + for (degree = 0; degree <= 9; degree++) { + if (ncoeff <= nTPD[degree]) break; + } + + strcpy(keyword+3, "ORDER"); + sprintf(keyvalue, "%20d", degree); + sprintf(comment, "SIP polynomial degree, axis %d, sky-to-pixel", j+1); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + + ikeyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, ikeyp++) { + if (ikeyp->j != j+1) continue; + if ((keyval = dpkeyd(ikeyp)) == 0.0) continue; + + cp = strchr(ikeyp->field, '.') + 1; + if (strncmp(cp, "SIP.REV.", 8) != 0) continue; + cp += 8; + strcpy(keyword+3, cp); + int p, q; + sscanf(cp, "%d_%d", &p, &q); + strncpy(term, "xxxxxxxxx", p); + strncpy(term+p, "yyyyyyyyy", q); + term[p+q] = '\0'; + + wcsutil_double2str(keyvalue, format, keyval); + sprintf(comment, "SIP inverse coefficient: %s", term); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + } + } + + for (int idis = 0; idis < 2; idis++) { + if (idis == 0 && (dis = wcs->lin.dispre) == 0x0) continue; + if (idis == 1 && (dis = wcs->lin.disseq) == 0x0) continue; + + for (int j = 0; j < naxis; j++) { + if (dis->disp2x[j] == 0x0) continue; + + int *iparm = dis->iparm[j]; + dparm = dis->dparm[j]; + + // Identify the distortion type. + if (dotpv) { + // TPV "projection" is handled by translating its dpkey records, + // which were originally translated from PVi_ma by wcsset(), or + // possibly input directly as a CQDISia = 'TPV' distortion type. + // Determine a suitable numerical precision for the polynomial + // coefficients to avoid trailing zeroes common to all of them. + if (dofmt) wcshdo_format('E', iparm[I_NDPARM], dparm, format); + char fmt01[8]; + sprintf(fmt01, "%.3ss", format); + + wcshdo_util(ctrl, "", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + "", "", nkeyrec, header, &status); + + // Distortion function polynomial coefficients. + sprintf(keyword, "PV%d_", j+1); + char *kp = keyword + strlen(keyword); + + struct dpkey *ikeyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, ikeyp++) { + if (ikeyp->j != j+1) continue; + if ((keyval = dpkeyd(ikeyp)) == 0.0) continue; + + cp = strchr(ikeyp->field, '.') + 1; + if (strncmp(cp, "TPV.", 4) != 0) continue; + strcpy(kp, cp+4); + + // Identify the term of the TPV polynomial for human readers. + int m; + sscanf(cp+4, "%d", &m); + wcshdo_tpdterm(m, j == wcs->lng, term); + sprintf(comment, "TPV coefficient: %s", term); + + if (keyval == 1.0) { + sprintf(keyvalue, fmt01, "1.0"); + } else { + wcsutil_double2str(keyvalue, format, keyval); + } + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + } else if (strcmp(dis->dtype[j], "TPD") == 0 || dotpd || + strcmp(dis->dtype[j], "Polynomial") == 0 || + strcmp(dis->dtype[j], "Polynomial*") == 0) { + // One of the Paper IV type polynomial distortions. + wcshdo_util(ctrl, "", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + "", "", nkeyrec, header, &status); + + if (strcmp(dis->dtype[j], "TPD") == 0) { + // Pure TPD. + dotpd = 1; + } else if (strncmp(dis->dtype[j], "Polynomial", 10) == 0) { + // Polynomial distortion. Write it as TPD by request? + dotpd = (iparm[I_DTYPE] & DIS_DOTPD); + strcpy(tpdsrc, "Polynomial distortion"); + } + + char pq = idis ? 'Q' : 'P'; + int Nhat = dis->Nhat[j]; + + // CPDISja/CQDISia + sprintf(keyword, "C%cDIS%d", pq, j+1); + if (idis == 0) { + strcpy(comment, "P = prior, "); + } else { + strcpy(comment, "Q = sequent, "); + } + + int direct = 0, doaux = 0; + if (dotpd) { + strcpy(keyvalue, "'TPD'"); + strcat(comment, "Template Polynomial Distortion"); + + // For identifying terms of the TPD polynomial. + int *axmap = dis->axmap[j]; + direct = 1; + doaux = iparm[I_TPDAUX]; + if (Nhat == 2) { + // Associate x with longitude, y with latitude. + if (axmap[0] == wcs->lng && axmap[1] == wcs->lat) { + direct = 1; + } else if (axmap[0] == wcs->lat && axmap[1] == wcs->lng) { + direct = 0; + } else { + // Non-celestial. + direct = (axmap[0] < axmap[1]); + } + } + } else { + strcpy(keyvalue, "'Polynomial'"); + strcat(comment, "general Polynomial distortion"); + } + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + + // NAXES. + sprintf(keyword, "D%c%d", pq, j+1); + sprintf(keyvalue, "'NAXES: %d'", Nhat); + if (Nhat == 1) { + strcpy(comment, "One independent variable"); + } else if (Nhat == 2) { + strcpy(comment, "Two independent variables"); + } else { + strcpy(comment, "Number of independent variables"); + } + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + + // AXIS.jhat + for (int jhat = 0; jhat < Nhat; jhat++) { + int *axmap = dis->axmap[j]; + sprintf(keyvalue, "'AXIS.%d: %d'", jhat+1, axmap[jhat]+1); + if (jhat == 0) { + strcpy(comment, "1st"); + } else if (jhat == 1) { + strcpy(comment, "2nd"); + } else if (jhat == 2) { + strcpy(comment, "3rd"); + } else { + sprintf(comment, "%dth", jhat+1); + } + + sprintf(comment+strlen(comment), " independent variable: axis %d", + axmap[jhat]+1); + if (dotpd) { + // axid is "xyxuvu". + cp = axid; + if (!direct) cp++; + if (doaux) cp += 3; + sprintf(comment+strlen(comment), " (= %c)", cp[jhat]); + } + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + char ctemp[32]; + + // OFFSET.jhat + if (dofmt) wcshdo_format('f', Nhat, dis->offset[j], format); + for (int jhat = 0; jhat < Nhat; jhat++) { + if (dis->offset[j][jhat] == 0.0) continue; + + wcsutil_double2str(ctemp, format, dis->offset[j][jhat]); + sprintf(keyvalue, "'OFFSET.%d: %s'", jhat+1, ctemp); + sprintf(comment, "Variable %d renormalization offset", jhat+1); + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // SCALE.jhat + if (dofmt) wcshdo_format('f', Nhat, dis->scale[j], format); + for (int jhat = 0; jhat < Nhat; jhat++) { + if (dis->scale[j][jhat] == 1.0) continue; + + wcsutil_double2str(ctemp, format, dis->scale[j][jhat]); + sprintf(keyvalue, "'SCALE.%d: %s'", jhat+1, ctemp); + sprintf(comment, "Variable %d renormalization scale", jhat+1); + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // Does the distortion function compute a correction? + if (dis->docorr[j]) { + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + "'DOCORR: 1'", "Distortion function computes a correction", + nkeyrec, header, &status); + } else { + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + "'DOCORR: 0'", "Distortion function computes coordinates", + nkeyrec, header, &status); + } + + if (dotpd) { + // Template Polynomial Distortion (TPD). As it may have been + // translated from SIP, TPV, DSS, TNX, ZPX, or perhaps + // Polynomial, the dpkey records may not relate to TPD. + // Output is therefore handled via dparm. + if (dofmt) wcshdo_format('E', iparm[I_NDPARM], dparm, format); + char fmt01[8]; + sprintf(fmt01, "%.3ss", format); + + // AUX.jhat.COEFF.m + if (doaux) { + for (int idp = 0; idp < 6; idp++) { + if (dparm[idp] == 0.0) { + sprintf(ctemp, fmt01, "0.0"); + } else if (dparm[idp] == 1.0) { + sprintf(ctemp, fmt01, "1.0"); + } else { + wcsutil_double2str(ctemp, format, dparm[idp]); + } + + if (idp < 3) { + sprintf(keyvalue, "'AUX.1.COEFF.%d: %s'", idp%3, ctemp); + sprintf(comment, "TPD: x = c0 + c1*u + c2*v"); + } else { + sprintf(keyvalue, "'AUX.2.COEFF.%d: %s'", idp%3, ctemp); + sprintf(comment, "TPD: y = d0 + d1*u + d2*v"); + } + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + + } + + dparm += 6; + } + + // TPD.FWD.m + for (int idp = 0; idp < iparm[I_TPDNCO]; idp++) { + if (dparm[idp] == 0.0) continue; + + if (dparm[idp] == 1.0) { + sprintf(ctemp, fmt01, "1.0"); + } else { + wcsutil_double2str(ctemp, format, dparm[idp]); + } + + int m = idp; + sprintf(keyvalue, "'TPD.FWD.%d:%s %s'", m, (m<10)?" ":"", ctemp); + wcshdo_tpdterm(m, direct, term); + sprintf(comment, "TPD coefficient: %s", term); + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // CPERRja/CQERRia + if (dis->maxdis[j] != 0.0) { + sprintf(keyword, "C%cERR%d", pq, j+1); + sprintf(keyvalue, "%20.2f", dis->maxdis[j]); + sprintf(comment, "%sMaximum absolute value of distortion", + idis?"":"[pix] "); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // Inverse distortion function polynomial coefficients. + if (dis->disx2p[j] == 0x0) continue; + + wcshdo_util(ctrl, "", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + "", "", nkeyrec, header, &status); + + // TPD.REV.m + sprintf(keyword, "D%c%d", pq, j+1); + for (int idp = iparm[I_TPDNCO]; idp < iparm[I_NDPARM]; idp++) { + if (dparm[idp] == 0.0) continue; + + wcsutil_double2str(ctemp, format, dparm[idp]); + int m = idp - iparm[I_TPDNCO]; + sprintf(keyvalue, "'TPD.REV.%d:%s %s'", m, (m<10)?" ":"", ctemp); + wcshdo_tpdterm(m, direct, term); + sprintf(comment, "TPD coefficient: %s", term); + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + } else { + // General polynomial distortion, handled via its dpkey records + // since iparm and dparm may hold a translation to TPD. + + // Do auxiliary variables first. + struct dpkey *ikeyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, ikeyp++) { + if (ikeyp->j != j+1) continue; + + cp = strchr(ikeyp->field, '.') + 1; + if (strncmp(cp, "NAUX", 4) != 0) continue; + + sprintf(keyvalue, "'%s: %d'", cp, dpkeyi(ikeyp)); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, "Number of auxiliary variables", nkeyrec, header, + &status); + + struct dpkey *jkeyp = dis->dp; + for (int jdp = 0; jdp < dis->ndp; jdp++, jkeyp++) { + if (jkeyp->j != j+1) continue; + + keyval = dpkeyd(jkeyp); + + cp = strchr(jkeyp->field, '.') + 1; + if (strncmp(cp, "AUX.", 4) != 0) continue; + + int m; + sscanf(cp+4, "%d", &m); + sprintf(keyvalue, "'%s:", cp); + + cp = strchr(cp+4, '.') + 1; + char *kp = keyvalue + strlen(keyvalue); + + if ((double)((int)keyval) == keyval) { + sprintf(kp, "%4d'", (int)keyval); + } else if (keyval == 0.5) { + strcat(kp, " 0.5'"); + } else { + wcsutil_double2str(kp, "%21.13E", keyval); + strcat(keyvalue, "'"); + } + + int p; + sscanf(cp+6, "%d", &p); + if (strncmp(cp, "POWER.", 4) == 0) { + if (p) { + sprintf(comment, "Aux %d: var %d power", m, p); + } else { + sprintf(comment, "Aux %d: power of sum of terms", m); + } + } else { + if (p) { + sprintf(comment, "Aux %d: var %d coefficient", m, p); + } else { + sprintf(comment, "Aux %d: offset term", m); + } + } + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + break; + } + + // Do polynomial terms. + ikeyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, ikeyp++) { + if (ikeyp->j != j+1) continue; + + cp = strchr(ikeyp->field, '.') + 1; + if (strncmp(cp, "NTERMS", 6) != 0) continue; + + sprintf(keyvalue, "'%s: %d'", cp, dpkeyi(ikeyp)); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, "Number of terms in the polynomial", nkeyrec, header, + &status); + } + + ikeyp = dis->dp; + for (int idp = 0; idp < dis->ndp; idp++, ikeyp++) { + if (ikeyp->j != j+1) continue; + + if ((keyval = dpkeyd(ikeyp)) == 0.0) continue; + + cp = strchr(ikeyp->field, '.') + 1; + if (strncmp(cp, "TERM.", 5) != 0) continue; + + int m; + sscanf(cp+5, "%d", &m); + sprintf(keyvalue, "'%s:%s ", cp, (m<10)?" ":""); + + cp = strchr(cp+5, '.') + 1; + char *kp = keyvalue + strlen(keyvalue); + if (strncmp(cp, "VAR.", 4) == 0) { + if ((double)((int)keyval) == keyval) { + sprintf(kp, "%20d", (int)keyval); + } else { + wcsutil_double2str(kp, "%20.13f", keyval); + } + + int p; + sscanf(cp+4, "%d", &p); + if (p <= Nhat) { + sprintf(comment, "Poly term %d: var %d power", m, p); + } else { + sprintf(comment, "Poly term %d: aux %d power", m, p-Nhat); + } + + } else { + wcsutil_double2str(kp, "%20.13E", keyval); + sprintf(comment, "Poly term %d: coefficient", m); + } + strcat(keyvalue, "'"); + + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + + // CPERRja/CQERRia + if (dis->maxdis[j] != 0.0) { + sprintf(keyword, "C%cERR%d", pq, j+1); + sprintf(keyvalue, "%20.2f", dis->maxdis[j]); + sprintf(comment, "%sMaximum absolute value of distortion", + idis?"":"[pix] "); + wcshdo_util(ctrl, keyword, 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + } + } + } + + // DVERRa + if (dis->totdis != 0.0) { + sprintf(keyvalue, "%20.2f", dis->totdis); + sprintf(comment, "Maximum combined distortion"); + wcshdo_util(ctrl, "DVERR", 0x0, 0, 0x0, 0, 0, 0, alt, 0, 0x0, + keyvalue, comment, nkeyrec, header, &status); + } + } + + + // Add identification. + wcshdo_util(ctrl, "", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + "", "", nkeyrec, header, &status); + + if (dotpd == DIS_DOTPD) { + // TPD by translation. + sprintf(comment, "Translated from %s to TPD by WCSLIB %s", tpdsrc, + wcslib_version(0x0)); + } else { + sprintf(comment, "WCS header keyrecords produced by WCSLIB %s", + wcslib_version(0x0)); + } + + wcshdo_util(ctrl, "COMMENT", 0x0, 0, 0x0, 0, 0, 0, ' ', 0, 0x0, + "", comment, nkeyrec, header, &status); + + + if (status == WCSHDRERR_MEMORY) { + wcserr_set(WCSHDR_ERRMSG(status)); + } + return status; +} + +//---------------------------------------------------------------------------- +// Determine a suitable floating point format for a set of parameters. + +void wcshdo_format( + int fmt, + int nval, + const double val[], + char *format) + +{ + int emax = -999; + int emin = +999; + int precision = 0; + for (int i = 0; i < nval; i++) { + // Double precision has at least 15 significant digits, and up to 17: + // http://en.wikipedia.org/wiki/Double-precision_floating-point_format + char cval[24]; + wcsutil_double2str(cval, "%21.14E", val[i]); + + int cpi = 16; + while (2 < cpi && cval[cpi] == '0') cpi--; + + // Precision for 'E' format. + cpi -= 2; + if (precision < cpi) precision = cpi; + + // Range of significant digits for 'f' format. + int expon; + sscanf(cval+18, "%d", &expon); + + if (emax < expon) emax = expon; + expon -= cpi; + if (expon < emin) emin = expon; + } + + + if (fmt == 'G') { + // Because e.g. writing 1e4 as 10000 requires an extra digit. + emax++; + + if (emin < -15 || 15 < emax || 15 < (emax - emin)) { + fmt = 'E'; + } else { + fmt = 'f'; + } + } + + if (fmt == 'f') { + precision = -emin; + if (precision < 1) precision = 1; + if (17 < precision) precision = 17; + sprintf(format, "%%20.%df", precision); + + } else { + if (precision < 1) precision = 1; + if (14 < precision) precision = 14; + if (precision < 14) { + sprintf(format, "%%20.%dE", precision); + } else { + sprintf(format, "%%21.%dE", precision); + } + } +} + +//---------------------------------------------------------------------------- +// Construct a string that identifies the term of a TPD or TPV polynomial. + +void wcshdo_tpdterm( + int m, + int direct, + char *term) + +{ + const int nTPD[] = {1, 4, 7, 12, 17, 24, 31, 40, 49, 60}; + + int degree; + for (degree = 0; degree <= 9; degree++) { + if (m < nTPD[degree]) break; + } + + if (degree == 0) { + strcpy(term, "1"); + + } else { + int k = degree - (m - nTPD[degree-1]); + + if (k < 0) { + memcpy(term, "rrrrrrrrr", degree); + } else if (direct) { + memcpy(term, "xxxxxxxxx", k); + memcpy(term+k, "yyyyyyyyy", degree-k); + } else { + memcpy(term, "yyyyyyyyy", k); + memcpy(term+k, "xxxxxxxxx", degree-k); + } + + term[degree] = '\0'; + } +} + +//---------------------------------------------------------------------------- +// Construct a keyrecord from the components given. + +void wcshdo_util( + int relax, + const char pikey[], + const char tbkey[], + int level, + const char tlkey[], + int i, + int j, + int m, + char alt, + int btcol, + int plcol[], + char keyvalue[], + const char keycomment[], + int *nkeyrec, + char **header, + int *status) + +{ + if (*status) return; + + // Reallocate memory in blocks of 2880 bytes. + char *hptr; + if ((*nkeyrec)%32 == 0) { + int nbyte = ((*nkeyrec)/32 + 1) * 2880; + if (!(hptr = realloc(*header, nbyte))) { + *status = WCSHDRERR_MEMORY; + return; + } + + *header = hptr; + } + + // Construct the keyword. + char keyword[32]; + if (alt == ' ') alt = '\0'; + if (btcol) { + // Binary table image array. + if (i > 0 && j) { + if (j > 0) { + sprintf(keyword, "%d%d%s%d%c", i, j, tbkey, btcol, alt); + } else { + sprintf(keyword, "%d%s%d_%d%c", i, tbkey, btcol, m, alt); + } + } else if (i > 0) { + sprintf(keyword, "%d%s%d%c", i, tbkey, btcol, alt); + } else if (j > 0) { + sprintf(keyword, "%d%s%d%c", j, tbkey, btcol, alt); + } else { + sprintf(keyword, "%s%d%c", tbkey, btcol, alt); + } + + if ((strlen(keyword) < 8) && tlkey && (relax & level)) { + // Use the long form. + if (i > 0 && j) { + if (j > 0) { + sprintf(keyword, "%d%d%s%d%c", i, j, tlkey, btcol, alt); + } else { + sprintf(keyword, "%d%s%d_%d%c", i, tlkey, btcol, m, alt); + } + } else if (i > 0) { + sprintf(keyword, "%d%s%d%c", i, tlkey, btcol, alt); + } else if (j > 0) { + sprintf(keyword, "%d%s%d%c", j, tlkey, btcol, alt); + } else { + sprintf(keyword, "%s%d%c", tlkey, btcol, alt); + } + } + + } else if (plcol && plcol[0]) { + // Pixel list. + if (i > 0 && j) { + if (j > 0) { + sprintf(keyword, "T%s%d_%d%c", tbkey, plcol[i-1], plcol[j-1], alt); + } else { + sprintf(keyword, "T%s%d_%d%c", tbkey, plcol[i-1], m, alt); + } + } else if (i > 0) { + sprintf(keyword, "T%s%d%c", tbkey, plcol[i-1], alt); + } else if (j > 0) { + sprintf(keyword, "T%s%d%c", tbkey, plcol[j-1], alt); + } else { + sprintf(keyword, "%s%d%c", tbkey, plcol[0], alt); + } + + if ((strlen(keyword) < 8) && tlkey && (relax & level)) { + // Use the long form. + if (i > 0 && j) { + if (j > 0) { + sprintf(keyword, "T%s%d_%d%c", tlkey, plcol[i-1], plcol[j-1], alt); + } else { + sprintf(keyword, "T%s%d_%d%c", tlkey, plcol[i-1], m, alt); + } + } else if (i > 0) { + sprintf(keyword, "T%s%d%c", tlkey, plcol[i-1], alt); + } else if (j > 0) { + sprintf(keyword, "T%s%d%c", tlkey, plcol[j-1], alt); + } else { + sprintf(keyword, "%s%d%c", tlkey, plcol[0], alt); + } + } + } else { + if (i > 0 && j) { + if (j > 0) { + sprintf(keyword, "%s%d_%d%c", pikey, i, j, alt); + } else { + sprintf(keyword, "%s%d_%d%c", pikey, i, m, alt); + } + } else if (i > 0) { + sprintf(keyword, "%s%d%c", pikey, i, alt); + } else if (j > 0) { + sprintf(keyword, "%s%d%c", pikey, j, alt); + } else { + sprintf(keyword, "%s%c", pikey, alt); + } + } + + // Double-up single-quotes in string keyvalues. + if (*keyvalue == '\'') { + hptr = keyvalue + 1; + while (*hptr) { + if (*hptr == '\'') { + char *kptr = hptr++; + if (*hptr) { + char ch0 = *kptr; + while (*kptr) { + char ch1 = *(++kptr); + *kptr = ch0; + ch0 = ch1; + } + } else { + break; + } + } + + hptr++; + } + + // Check length. + if (strlen(keyvalue) > 70) { + // Truncate. + keyvalue[69] = '\''; + keyvalue[70] = '\0'; + } + + } else { + // Check length. + if (strlen(keyvalue) > 70) { + // Truncate. + keyvalue[70] = '\0'; + } + } + + int nc = 47, nv; + if ((nv = strlen(keyvalue) > 20)) { + // Rob the keycomment to make space for the keyvalue. + nc -= (nv - 20); + } + + hptr = *header + (80 * ((*nkeyrec)++)); + if (*keyword == '\0') { + sprintf(hptr, "%80.80s", " "); + } else if (strcmp(keyword, "COMMENT") == 0) { + sprintf(hptr, "%-8.8s %-71.71s", keyword, keycomment); + } else { + sprintf(hptr, "%-8.8s= %-20s / %-*.*s", keyword, keyvalue, nc, nc, + keycomment); + } +} diff --git a/deps/wcslib/C/wcshdr.h b/deps/wcslib/C/wcshdr.h new file mode 100644 index 0000000..4d8f536 --- /dev/null +++ b/deps/wcslib/C/wcshdr.h @@ -0,0 +1,1365 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcshdr.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wcshdr routines +* ------------------------------ +* Routines in this suite are aimed at extracting WCS information from a FITS +* file. The information is encoded via keywords defined in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) += += "Representations of celestial coordinates in FITS", += Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (WCS Paper II) += += "Representations of spectral coordinates in FITS", += Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L. += 2006, A&A, 446, 747 (WCS Paper III) += += "Representations of distortions in FITS world coordinate systems", += Calabretta, M.R. et al. (WCS Paper IV, draft dated 2004/04/22), += available from http://www.atnf.csiro.au/people/Mark.Calabretta += += "Representations of time coordinates in FITS - += Time and relative dimension in space", += Rots, A.H., Bunclark, P.S., Calabretta, M.R., Allen, S.L., += Manchester, R.N., & Thompson, W.T. 2015, A&A, 574, A36 (WCS Paper VII) +* +* These routines provide the high-level interface between the FITS file and +* the WCS coordinate transformation routines. +* +* Additionally, function wcshdo() is provided to write out the contents of a +* wcsprm struct as a FITS header. +* +* Briefly, the anticipated sequence of operations is as follows: +* +* - 1: Open the FITS file and read the image or binary table header, e.g. +* using CFITSIO routine fits_hdr2str(). +* +* - 2: Parse the header using wcspih() or wcsbth(); they will automatically +* interpret 'TAB' header keywords using wcstab(). +* +* - 3: Allocate memory for, and read 'TAB' arrays from the binary table +* extension, e.g. using CFITSIO routine fits_read_wcstab() - refer to +* the prologue of getwcstab.h. wcsset() will automatically take +* control of this allocated memory, in particular causing it to be +* freed by wcsfree(). +* +* - 4: Translate non-standard WCS usage using wcsfix(), see wcsfix.h. +* +* - 5: Initialize wcsprm struct(s) using wcsset() and calculate coordinates +* using wcsp2s() and/or wcss2p(). Refer to the prologue of wcs.h for a +* description of these and other high-level WCS coordinate +* transformation routines. +* +* - 6: Clean up by freeing memory with wcsvfree(). +* +* In detail: +* +* - wcspih() is a high-level FITS WCS routine that parses an image header. It +* returns an array of up to 27 wcsprm structs on each of which it invokes +* wcstab(). +* +* - wcsbth() is the analogue of wcspih() for use with binary tables; it +* handles image array and pixel list keywords. As an extension of the FITS +* WCS standard, it also recognizes image header keywords which may be used +* to provide default values via an inheritance mechanism. +* +* - wcstab() assists in filling in members of the wcsprm struct associated +* with coordinate lookup tables ('TAB'). These are based on arrays stored +* in a FITS binary table extension (BINTABLE) that are located by PVi_ma +* keywords in the image header. +* +* - wcsidx() and wcsbdx() are utility routines that return the index for a +* specified alternate coordinate descriptor in the array of wcsprm structs +* returned by wcspih() or wcsbth(). +* +* - wcsvfree() deallocates memory for an array of wcsprm structs, such as +* returned by wcspih() or wcsbth(). +* +* - wcshdo() writes out a wcsprm struct as a FITS header. +* +* +* wcspih() - FITS WCS parser routine for image headers +* ---------------------------------------------------- +* wcspih() is a high-level FITS WCS routine that parses an image header, +* either that of a primary HDU or of an image extension. All WCS keywords +* defined in Papers I, II, III, IV, and VII are recognized, and also those +* used by the AIPS convention and certain other keywords that existed in early +* drafts of the WCS papers as explained in wcsbth() note 5. wcspih() also +* handles keywords associated with non-standard distortion functions described +* in the prologue of dis.h. +* +* Given a character array containing a FITS image header, wcspih() identifies +* and reads all WCS keywords for the primary coordinate representation and up +* to 26 alternate representations. It returns this information as an array of +* wcsprm structs. +* +* wcspih() invokes wcstab() on each of the wcsprm structs that it returns. +* +* Use wcsbth() in preference to wcspih() for FITS headers of unknown type; +* wcsbth() can parse image headers as well as binary table and pixel list +* headers, although it cannot handle keywords relating to distortion +* functions, which may only exist in an image header (primary or extension). +* +* Given and returned: +* header char[] Character array containing the (entire) FITS image +* header from which to identify and construct the +* coordinate representations, for example, as might be +* obtained conveniently via the CFITSIO routine +* fits_hdr2str(). +* +* Each header "keyrecord" (formerly "card image") +* consists of exactly 80 7-bit ASCII printing characters +* in the range 0x20 to 0x7e (which excludes NUL, BS, +* TAB, LF, FF and CR) especially noting that the +* keyrecords are NOT null-terminated. +* +* For negative values of ctrl (see below), header[] is +* modified so that WCS keyrecords processed by wcspih() +* are removed from it. +* +* Given: +* nkeyrec int Number of keyrecords in header[]. +* +* relax int Degree of permissiveness: +* 0: Recognize only FITS keywords defined by the +* published WCS standard. +* WCSHDR_all: Admit all recognized informal +* extensions of the WCS standard. +* Fine-grained control of the degree of permissiveness +* is also possible as explained in wcsbth() note 5. +* +* ctrl int Error reporting and other control options for invalid +* WCS and other header keyrecords: +* 0: Do not report any rejected header keyrecords. +* 1: Produce a one-line message stating the number +* of WCS keyrecords rejected (nreject). +* 2: Report each rejected keyrecord and the reason +* why it was rejected. +* 3: As above, but also report all non-WCS +* keyrecords that were discarded, and the number +* of coordinate representations (nwcs) found. +* 4: As above, but also report the accepted WCS +* keyrecords, with a summary of the number +* accepted as well as rejected. +* The report is written to stderr by default, or the +* stream set by wcsprintf_set(). +* +* For ctrl < 0, WCS keyrecords processed by wcspih() +* are removed from header[]: +* -1: Remove only valid WCS keyrecords whose values +* were successfully extracted, nothing is +* reported. +* -2: As above, but also remove WCS keyrecords that +* were rejected, reporting each one and the +* reason that it was rejected. +* -3: As above, and also report the number of +* coordinate representations (nwcs) found. +* -11: Same as -1 but preserving global WCS-related +* keywords such as '{DATE,MJD}-{OBS,BEG,AVG,END}' +* and the other basic time-related keywords, and +* 'OBSGEO-{X,Y,Z,L,B,H}'. +* If any keyrecords are removed from header[] it will +* be null-terminated (NUL not being a legal FITS header +* character), otherwise it will contain its original +* complement of nkeyrec keyrecords and possibly not be +* null-terminated. +* +* Returned: +* nreject int* Number of WCS keywords rejected for syntax errors, +* illegal values, etc. Keywords not recognized as WCS +* keywords are simply ignored. Refer also to wcsbth() +* note 5. +* +* nwcs int* Number of coordinate representations found. +* +* wcs struct wcsprm** +* Pointer to an array of wcsprm structs containing up to +* 27 coordinate representations. +* +* Memory for the array is allocated by wcspih() which +* also invokes wcsini() for each struct to allocate +* memory for internal arrays and initialize their +* members to default values. Refer also to wcsbth() +* note 8. Note that wcsset() is not invoked on these +* structs. +* +* This allocated memory must be freed by the user, first +* by invoking wcsfree() for each struct, and then by +* freeing the array itself. A routine, wcsvfree(), is +* provided to do this (see below). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 4: Fatal error returned by Flex parser. +* +* Notes: +* 1: Refer to wcsbth() notes 1, 2, 3, 5, 7, and 8. +* +* +* wcsbth() - FITS WCS parser routine for binary table and image headers +* --------------------------------------------------------------------- +* wcsbth() is a high-level FITS WCS routine that parses a binary table header. +* It handles image array and pixel list WCS keywords which may be present +* together in one header. +* +* As an extension of the FITS WCS standard, wcsbth() also recognizes image +* header keywords in a binary table header. These may be used to provide +* default values via an inheritance mechanism discussed in note 5 (c.f. +* WCSHDR_AUXIMG and WCSHDR_ALLIMG), or may instead result in wcsprm structs +* that are not associated with any particular column. Thus wcsbth() can +* handle primary image and image extension headers in addition to binary table +* headers (it ignores NAXIS and does not rely on the presence of the TFIELDS +* keyword). +* +* All WCS keywords defined in Papers I, II, III, and VII are recognized, and +* also those used by the AIPS convention and certain other keywords that +* existed in early drafts of the WCS papers as explained in note 5 below. +* +* wcsbth() sets the colnum or colax[] members of the wcsprm structs that it +* returns with the column number of an image array or the column numbers +* associated with each pixel coordinate element in a pixel list. wcsprm +* structs that are not associated with any particular column, as may be +* derived from image header keywords, have colnum == 0. +* +* Note 6 below discusses the number of wcsprm structs returned by wcsbth(), +* and the circumstances in which image header keywords cause a struct to be +* created. See also note 9 concerning the number of separate images that may +* be stored in a pixel list. +* +* The API to wcsbth() is similar to that of wcspih() except for the addition +* of extra arguments that may be used to restrict its operation. Like +* wcspih(), wcsbth() invokes wcstab() on each of the wcsprm structs that it +* returns. +* +* Given and returned: +* header char[] Character array containing the (entire) FITS binary +* table, primary image, or image extension header from +* which to identify and construct the coordinate +* representations, for example, as might be obtained +* conveniently via the CFITSIO routine fits_hdr2str(). +* +* Each header "keyrecord" (formerly "card image") +* consists of exactly 80 7-bit ASCII printing +* characters in the range 0x20 to 0x7e (which excludes +* NUL, BS, TAB, LF, FF and CR) especially noting that +* the keyrecords are NOT null-terminated. +* +* For negative values of ctrl (see below), header[] is +* modified so that WCS keyrecords processed by wcsbth() +* are removed from it. +* +* Given: +* nkeyrec int Number of keyrecords in header[]. +* +* relax int Degree of permissiveness: +* 0: Recognize only FITS keywords defined by the +* published WCS standard. +* WCSHDR_all: Admit all recognized informal +* extensions of the WCS standard. +* Fine-grained control of the degree of permissiveness +* is also possible, as explained in note 5 below. +* +* ctrl int Error reporting and other control options for invalid +* WCS and other header keyrecords: +* 0: Do not report any rejected header keyrecords. +* 1: Produce a one-line message stating the number +* of WCS keyrecords rejected (nreject). +* 2: Report each rejected keyrecord and the reason +* why it was rejected. +* 3: As above, but also report all non-WCS +* keyrecords that were discarded, and the number +* of coordinate representations (nwcs) found. +* 4: As above, but also report the accepted WCS +* keyrecords, with a summary of the number +* accepted as well as rejected. +* The report is written to stderr by default, or the +* stream set by wcsprintf_set(). +* +* For ctrl < 0, WCS keyrecords processed by wcsbth() +* are removed from header[]: +* -1: Remove only valid WCS keyrecords whose values +* were successfully extracted, nothing is +* reported. +* -2: Also remove WCS keyrecords that were rejected, +* reporting each one and the reason that it was +* rejected. +* -3: As above, and also report the number of +* coordinate representations (nwcs) found. +* -11: Same as -1 but preserving global WCS-related +* keywords such as '{DATE,MJD}-{OBS,BEG,AVG,END}' +* and the other basic time-related keywords, and +* 'OBSGEO-{X,Y,Z,L,B,H}'. +* If any keyrecords are removed from header[] it will +* be null-terminated (NUL not being a legal FITS header +* character), otherwise it will contain its original +* complement of nkeyrec keyrecords and possibly not be +* null-terminated. +* +* keysel int Vector of flag bits that may be used to restrict the +* keyword types considered: +* WCSHDR_IMGHEAD: Image header keywords. +* WCSHDR_BIMGARR: Binary table image array. +* WCSHDR_PIXLIST: Pixel list keywords. +* If zero, there is no restriction. +* +* Keywords such as EQUIna or RFRQna that are common to +* binary table image arrays and pixel lists (including +* WCSNna and TWCSna, as explained in note 4 below) are +* selected by both WCSHDR_BIMGARR and WCSHDR_PIXLIST. +* Thus if inheritance via WCSHDR_ALLIMG is enabled as +* discussed in note 5 and one of these shared keywords +* is present, then WCSHDR_IMGHEAD and WCSHDR_PIXLIST +* alone may be sufficient to cause the construction of +* coordinate descriptions for binary table image arrays. +* +* colsel int* Pointer to an array of table column numbers used to +* restrict the keywords considered by wcsbth(). +* +* A null pointer may be specified to indicate that there +* is no restriction. Otherwise, the magnitude of +* cols[0] specifies the length of the array: +* cols[0] > 0: the columns are included, +* cols[0] < 0: the columns are excluded. +* +* For the pixel list keywords TPn_ka and TCn_ka (and +* TPCn_ka and TCDn_ka if WCSHDR_LONGKEY is enabled), it +* is an error for one column to be selected but not the +* other. This is unlike the situation with invalid +* keyrecords, which are simply rejected, because the +* error is not intrinsic to the header itself but +* arises in the way that it is processed. +* +* Returned: +* nreject int* Number of WCS keywords rejected for syntax errors, +* illegal values, etc. Keywords not recognized as WCS +* keywords are simply ignored, refer also to note 5 +* below. +* +* nwcs int* Number of coordinate representations found. +* +* wcs struct wcsprm** +* Pointer to an array of wcsprm structs containing up +* to 27027 coordinate representations, refer to note 6 +* below. +* +* Memory for the array is allocated by wcsbth() which +* also invokes wcsini() for each struct to allocate +* memory for internal arrays and initialize their +* members to default values. Refer also to note 8 +* below. Note that wcsset() is not invoked on these +* structs. +* +* This allocated memory must be freed by the user, first +* by invoking wcsfree() for each struct, and then by +* freeing the array itself. A routine, wcsvfree(), is +* provided to do this (see below). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid column selection. +* 4: Fatal error returned by Flex parser. +* +* Notes: +* 1: wcspih() determines the number of coordinate axes independently for +* each alternate coordinate representation (denoted by the "a" value in +* keywords like CTYPEia) from the higher of +* +* a: NAXIS, +* b: WCSAXESa, +* c: The highest axis number in any parameterized WCS keyword. The +* keyvalue, as well as the keyword, must be syntactically valid +* otherwise it will not be considered. +* +* If none of these keyword types is present, i.e. if the header only +* contains auxiliary WCS keywords for a particular coordinate +* representation, then no coordinate description is constructed for it. +* +* wcsbth() is similar except that it ignores the NAXIS keyword if given +* an image header to process. +* +* The number of axes, which is returned as a member of the wcsprm +* struct, may differ for different coordinate representations of the +* same image. +* +* 2: wcspih() and wcsbth() enforce correct FITS "keyword = value" syntax +* with regard to "= " occurring in columns 9 and 10. +* +* However, they do recognize free-format character (NOST 100-2.0, +* Sect. 5.2.1), integer (Sect. 5.2.3), and floating-point values +* (Sect. 5.2.4) for all keywords. +* +* 3: Where CROTAn, CDi_ja, and PCi_ja occur together in one header wcspih() +* and wcsbth() treat them as described in the prologue to wcs.h. +* +* 4: WCS Paper I mistakenly defined the pixel list form of WCSNAMEa as +* TWCSna instead of WCSNna; the 'T' is meant to substitute for the axis +* number in the binary table form of the keyword - note that keywords +* defined in WCS Papers II, III, and VII that are not parameterized by +* axis number have identical forms for binary tables and pixel lists. +* Consequently wcsbth() always treats WCSNna and TWCSna as equivalent. +* +* 5: wcspih() and wcsbth() interpret the "relax" argument as a vector of +* flag bits to provide fine-grained control over what non-standard WCS +* keywords to accept. The flag bits are subject to change in future and +* should be set by using the preprocessor macros (see below) for the +* purpose. +* +* - WCSHDR_none: Don't accept any extensions (not even those in the +* errata). Treat non-conformant keywords in the same way as +* non-WCS keywords in the header, i.e. simply ignore them. +* +* - WCSHDR_all: Accept all extensions recognized by the parser. +* +* - WCSHDR_reject: Reject non-standard keyrecords (that are not otherwise +* explicitly accepted by one of the flags below). A message will +* optionally be printed on stderr by default, or the stream set +* by wcsprintf_set(), as determined by the ctrl argument, and +* nreject will be incremented. +* +* This flag may be used to signal the presence of non-standard +* keywords, otherwise they are simply passed over as though they +* did not exist in the header. It is mainly intended for testing +* conformance of a FITS header to the WCS standard. +* +* Keyrecords may be non-standard in several ways: +* +* - The keyword may be syntactically valid but with keyvalue of +* incorrect type or invalid syntax, or the keycomment may be +* malformed. +* +* - The keyword may strongly resemble a WCS keyword but not, in +* fact, be one because it does not conform to the standard. +* For example, "CRPIX01" looks like a CRPIXja keyword, but in +* fact the leading zero on the axis number violates the basic +* FITS standard. Likewise, "LONPOLE2" is not a valid +* LONPOLEa keyword in the WCS standard, and indeed there is +* nothing the parser can sensibly do with it. +* +* - Use of the keyword may be deprecated by the standard. Such +* will be rejected if not explicitly accepted via one of the +* flags below. +* +* - WCSHDR_strict: As for WCSHDR_reject, but also reject AIPS-convention +* keywords and all other deprecated usage that is not explicitly +* accepted. +* +* - WCSHDR_CROTAia: Accept CROTAia (wcspih()), +* iCROTna (wcsbth()), +* TCROTna (wcsbth()). +* - WCSHDR_VELREFa: Accept VELREFa. +* wcspih() always recognizes the AIPS-convention keywords, +* CROTAn, EPOCH, and VELREF for the primary representation +* (a = ' ') but alternates are non-standard. +* +* wcsbth() accepts EPOCHa and VELREFa only if WCSHDR_AUXIMG is +* also enabled. +* +* - WCSHDR_CD00i00j: Accept CD00i00j (wcspih()). +* - WCSHDR_PC00i00j: Accept PC00i00j (wcspih()). +* - WCSHDR_PROJPn: Accept PROJPn (wcspih()). +* These appeared in early drafts of WCS Paper I+II (before they +* were split) and are equivalent to CDi_ja, PCi_ja, and PVi_ma +* for the primary representation (a = ' '). PROJPn is +* equivalent to PVi_ma with m = n <= 9, and is associated +* exclusively with the latitude axis. +* +* - WCSHDR_CD0i_0ja: Accept CD0i_0ja (wcspih()). +* - WCSHDR_PC0i_0ja: Accept PC0i_0ja (wcspih()). +* - WCSHDR_PV0i_0ma: Accept PV0i_0ja (wcspih()). +* - WCSHDR_PS0i_0ma: Accept PS0i_0ja (wcspih()). +* Allow the numerical index to have a leading zero in doubly- +* parameterized keywords, for example, PC01_01. WCS Paper I +* (Sects 2.1.2 & 2.1.4) explicitly disallows leading zeroes. +* The FITS 3.0 standard document (Sect. 4.1.2.1) states that the +* index in singly-parameterized keywords (e.g. CTYPEia) "shall +* not have leading zeroes", and later in Sect. 8.1 that "leading +* zeroes must not be used" on PVi_ma and PSi_ma. However, by an +* oversight, it is silent on PCi_ja and CDi_ja. +* +* - WCSHDR_DOBSn (wcsbth() only): Allow DOBSn, the column-specific +* analogue of DATE-OBS. By an oversight this was never formally +* defined in the standard. +* +* - WCSHDR_OBSGLBHn (wcsbth() only): Allow OBSGLn, OBSGBn, and OBSGHn, +* the column-specific analogues of OBSGEO-L, OBSGEO-B, and +* OBSGEO-H. By an oversight these were never formally defined in +* the standard. +* +* - WCSHDR_RADECSYS: Accept RADECSYS. This appeared in early drafts of +* WCS Paper I+II and was subsequently replaced by RADESYSa. +* +* wcsbth() accepts RADECSYS only if WCSHDR_AUXIMG is also +* enabled. +* +* - WCSHDR_EPOCHa: Accept EPOCHa. +* +* - WCSHDR_VSOURCE: Accept VSOURCEa or VSOUna (wcsbth()). This appeared +* in early drafts of WCS Paper III and was subsequently dropped +* in favour of ZSOURCEa and ZSOUna. +* +* wcsbth() accepts VSOURCEa only if WCSHDR_AUXIMG is also +* enabled. +* +* - WCSHDR_DATEREF: Accept DATE-REF, MJD-REF, MJD-REFI, MJD-REFF, JDREF, +* JD-REFI, and JD-REFF as synonyms for the standard keywords, +* DATEREF, MJDREF, MJDREFI, MJDREFF, JDREF, JDREFI, and JDREFF. +* The latter buck the pattern set by the other date keywords +* ({DATE,MJD}-{OBS,BEG,AVG,END}), thereby increasing the +* potential for confusion and error. +* +* - WCSHDR_LONGKEY (wcsbth() only): Accept long forms of the alternate +* binary table and pixel list WCS keywords, i.e. with "a" non- +* blank. Specifically +* +# jCRPXna TCRPXna : jCRPXn jCRPna TCRPXn TCRPna CRPIXja +# - TPCn_ka : - ijPCna - TPn_ka PCi_ja +# - TCDn_ka : - ijCDna - TCn_ka CDi_ja +# iCDLTna TCDLTna : iCDLTn iCDEna TCDLTn TCDEna CDELTia +# iCUNIna TCUNIna : iCUNIn iCUNna TCUNIn TCUNna CUNITia +# iCTYPna TCTYPna : iCTYPn iCTYna TCTYPn TCTYna CTYPEia +# iCRVLna TCRVLna : iCRVLn iCRVna TCRVLn TCRVna CRVALia +# iPVn_ma TPVn_ma : - iVn_ma - TVn_ma PVi_ma +# iPSn_ma TPSn_ma : - iSn_ma - TSn_ma PSi_ma +* +* where the primary and standard alternate forms together with +* the image-header equivalent are shown rightwards of the colon. +* +* The long form of these keywords could be described as quasi- +* standard. TPCn_ka, iPVn_ma, and TPVn_ma appeared by mistake +* in the examples in WCS Paper II and subsequently these and +* also TCDn_ka, iPSn_ma and TPSn_ma were legitimized by the +* errata to the WCS papers. +* +* Strictly speaking, the other long forms are non-standard and +* in fact have never appeared in any draft of the WCS papers nor +* in the errata. However, as natural extensions of the primary +* form they are unlikely to be written with any other intention. +* Thus it should be safe to accept them provided, of course, +* that the resulting keyword does not exceed the 8-character +* limit. +* +* If WCSHDR_CNAMn is enabled then also accept +* +# iCNAMna TCNAMna : --- iCNAna --- TCNAna CNAMEia +# iCRDEna TCRDEna : --- iCRDna --- TCRDna CRDERia +# iCSYEna TCSYEna : --- iCSYna --- TCSYna CSYERia +# iCZPHna TCZPHna : --- iCZPna --- TCZPna CZPHSia +# iCPERna TCPERna : --- iCPRna --- TCPRna CPERIia +* +* Note that CNAMEia, CRDERia, CSYERia, CZPHSia, CPERIia, and +* their variants are not used by WCSLIB but are stored in the +* wcsprm struct as auxiliary information. +* +* - WCSHDR_CNAMn (wcsbth() only): Accept iCNAMn, iCRDEn, iCSYEn, iCZPHn, +* iCPERn, TCNAMn, TCRDEn, TCSYEn, TCZPHn, and TCPERn, i.e. with +* "a" blank. While non-standard, these are the obvious analogues +* of iCTYPn, TCTYPn, etc. +* +* - WCSHDR_AUXIMG (wcsbth() only): Allow the image-header form of an +* auxiliary WCS keyword with representation-wide scope to +* provide a default value for all images. This default may be +* overridden by the column-specific form of the keyword. +* +* For example, a keyword like EQUINOXa would apply to all image +* arrays in a binary table, or all pixel list columns with +* alternate representation "a" unless overridden by EQUIna. +* +* Specifically the keywords are: +* +# LONPOLEa for LONPna +# LATPOLEa for LATPna +# VELREF - ... (No column-specific form.) +# VELREFa - ... Only if WCSHDR_VELREFa is set. +* +* whose keyvalues are actually used by WCSLIB, and also keywords +* providing auxiliary information that is simply stored in the +* wcsprm struct: +* +# WCSNAMEa for WCSNna ... Or TWCSna (see below). +# +# DATE-OBS for DOBSn +# MJD-OBS for MJDOBn +# +# RADESYSa for RADEna +# RADECSYS for RADEna ... Only if WCSHDR_RADECSYS is set. +# EPOCH - ... (No column-specific form.) +# EPOCHa - ... Only if WCSHDR_EPOCHa is set. +# EQUINOXa for EQUIna +* +* where the image-header keywords on the left provide default +* values for the column specific keywords on the right. +* +* Note that, according to Sect. 8.1 of WCS Paper III, and +* Sect. 5.2 of WCS Paper VII, the following are always inherited: +* +# RESTFREQ for RFRQna +# RESTFRQa for RFRQna +# RESTWAVa for RWAVna +* +* being those actually used by WCSLIB, together with the +* following auxiliary keywords, many of which do not have binary +* table equivalents and therefore can only be inherited: +* +# TIMESYS - +# TREFPOS for TRPOSn +# TREFDIR for TRDIRn +# PLEPHEM - +# TIMEUNIT - +# DATEREF - +# MJDREF - +# MJDREFI - +# MJDREFF - +# JDREF - +# JDREFI - +# JDREFF - +# TIMEOFFS - +# +# DATE-BEG - +# DATE-AVG for DAVGn +# DATE-END - +# MJD-BEG - +# MJD-AVG for MJDAn +# MJD-END - +# JEPOCH - +# BEPOCH - +# TSTART - +# TSTOP - +# XPOSURE - +# TELAPSE - +# +# TIMSYER - +# TIMRDER - +# TIMEDEL - +# TIMEPIXR - +# +# OBSGEO-X for OBSGXn +# OBSGEO-Y for OBSGYn +# OBSGEO-Z for OBSGZn +# OBSGEO-L for OBSGLn +# OBSGEO-B for OBSGBn +# OBSGEO-H for OBSGHn +# OBSORBIT - +# +# SPECSYSa for SPECna +# SSYSOBSa for SOBSna +# VELOSYSa for VSYSna +# VSOURCEa for VSOUna ... Only if WCSHDR_VSOURCE is set. +# ZSOURCEa for ZSOUna +# SSYSSRCa for SSRCna +# VELANGLa for VANGna +* +* Global image-header keywords, such as MJD-OBS, apply to all +* alternate representations, and would therefore provide a +* default value for all images in the header. +* +* This auxiliary inheritance mechanism applies to binary table +* image arrays and pixel lists alike. Most of these keywords +* have no default value, the exceptions being LONPOLEa and +* LATPOLEa, and also RADESYSa and EQUINOXa which provide +* defaults for each other. Thus one potential difficulty in +* using WCSHDR_AUXIMG is that of erroneously inheriting one of +* these four keywords. +* +* Also, beware of potential inconsistencies that may arise where, +* for example, DATE-OBS is inherited, but MJD-OBS is overridden +* by MJDOBn and specifies a different time. Pairs in this +* category are: +* += DATE-OBS/DOBSn versus MJD-OBS/MJDOBn += DATE-AVG/DAVGn versus MJD-AVG/MJDAn += RESTFRQa/RFRQna versus RESTWAVa/RWAVna += OBSGEO-[XYZ]/OBSG[XYZ]n versus OBSGEO-[LBH]/OBSG[LBH]n +* +* The wcsfixi() routines datfix() and obsfix() are provided to +* check the consistency of these and other such pairs of +* keywords. +* +* Unlike WCSHDR_ALLIMG, the existence of one (or all) of these +* auxiliary WCS image header keywords will not by itself cause a +* wcsprm struct to be created for alternate representation "a". +* This is because they do not provide sufficient information to +* create a non-trivial coordinate representation when used in +* conjunction with the default values of those keywords that are +* parameterized by axis number, such as CTYPEia. +* +* - WCSHDR_ALLIMG (wcsbth() only): Allow the image-header form of *all* +* image header WCS keywords to provide a default value for all +* image arrays in a binary table (n.b. not pixel list). This +* default may be overridden by the column-specific form of the +* keyword. +* +* For example, a keyword like CRPIXja would apply to all image +* arrays in a binary table with alternate representation "a" +* unless overridden by jCRPna. +* +* Specifically the keywords are those listed above for +* WCSHDR_AUXIMG plus +* +# WCSAXESa for WCAXna +* +* which defines the coordinate dimensionality, and the following +* keywords that are parameterized by axis number: +* +# CRPIXja for jCRPna +# PCi_ja for ijPCna +# CDi_ja for ijCDna +# CDELTia for iCDEna +# CROTAi for iCROTn +# CROTAia - ... Only if WCSHDR_CROTAia is set. +# CUNITia for iCUNna +# CTYPEia for iCTYna +# CRVALia for iCRVna +# PVi_ma for iVn_ma +# PSi_ma for iSn_ma +# +# CNAMEia for iCNAna +# CRDERia for iCRDna +# CSYERia for iCSYna +# CZPHSia for iCZPna +# CPERIia for iCPRna +* +* where the image-header keywords on the left provide default +* values for the column specific keywords on the right. +* +* This full inheritance mechanism only applies to binary table +* image arrays, not pixel lists, because in the latter case +* there is no well-defined association between coordinate axis +* number and column number (see note 9 below). +* +* Note that CNAMEia, CRDERia, CSYERia, and their variants are +* not used by WCSLIB but are stored in the wcsprm struct as +* auxiliary information. +* +* Note especially that at least one wcsprm struct will be +* returned for each "a" found in one of the image header +* keywords listed above: +* +* - If the image header keywords for "a" ARE NOT inherited by a +* binary table, then the struct will not be associated with +* any particular table column number and it is up to the user +* to provide an association. +* +* - If the image header keywords for "a" ARE inherited by a +* binary table image array, then those keywords are considered +* to be "exhausted" and do not result in a separate wcsprm +* struct. +* +* For example, to accept CD00i00j and PC00i00j and reject all other +* extensions, use +* += relax = WCSHDR_reject | WCSHDR_CD00i00j | WCSHDR_PC00i00j; +* +* The parser always treats EPOCH as subordinate to EQUINOXa if both are +* present, and VSOURCEa is always subordinate to ZSOURCEa. +* +* Likewise, VELREF is subordinate to the formalism of WCS Paper III, see +* spcaips(). +* +* Neither wcspih() nor wcsbth() currently recognize the AIPS-convention +* keywords ALTRPIX or ALTRVAL which effectively define an alternative +* representation for a spectral axis. +* +* 6: Depending on what flags have been set in its "relax" argument, +* wcsbth() could return as many as 27027 wcsprm structs: +* +* - Up to 27 unattached representations derived from image header +* keywords. +* +* - Up to 27 structs for each of up to 999 columns containing an image +* arrays. +* +* - Up to 27 structs for a pixel list. +* +* Note that it is considered legitimate for a column to contain an image +* array and also form part of a pixel list, and in particular that +* wcsbth() does not check the TFORM keyword for a pixel list column to +* check that it is scalar. +* +* In practice, of course, a realistic binary table header is unlikely to +* contain more than a handful of images. +* +* In order for wcsbth() to create a wcsprm struct for a particular +* coordinate representation, at least one WCS keyword that defines an +* axis number must be present, either directly or by inheritance if +* WCSHDR_ALLIMG is set. +* +* When the image header keywords for an alternate representation are +* inherited by a binary table image array via WCSHDR_ALLIMG, those +* keywords are considered to be "exhausted" and do not result in a +* separate wcsprm struct. Otherwise they do. +* +* 7: Neither wcspih() nor wcsbth() check for duplicated keywords, in most +* cases they accept the last encountered. +* +* 8: wcspih() and wcsbth() use wcsnpv() and wcsnps() (refer to the prologue +* of wcs.h) to match the size of the pv[] and ps[] arrays in the wcsprm +* structs to the number in the header. Consequently there are no unused +* elements in the pv[] and ps[] arrays, indeed they will often be of +* zero length. +* +* 9: The FITS WCS standard for pixel lists assumes that a pixel list +* defines one and only one image, i.e. that each row of the binary table +* refers to just one event, e.g. the detection of a single photon or +* neutrino, for which the device "pixel" coordinates are stored in +* separate scalar columns of the table. +* +* In the absence of a standard for pixel lists - or even an informal +* description! - let alone a formal mechanism for identifying the columns +* containing pixel coordinates (as opposed to pixel values or metadata +* recorded at the time the photon or neutrino was detected), WCS Paper I +* discusses how the WCS keywords themselves may be used to identify them. +* +* In practice, however, pixel lists have been used to store multiple +* images. Besides not specifying how to identify columns, the pixel list +* convention is also silent on the method to be used to associate table +* columns with image axes. +* +* An additional shortcoming is the absence of a formal method for +* associating global binary-table WCS keywords, such as WCSNna or MJDOBn, +* with a pixel list image, whether one or several. +* +* In light of these uncertainties, wcsbth() simply collects all WCS +* keywords for a particular pixel list coordinate representation (i.e. +* the "a" value in TCTYna) into one wcsprm struct. However, these +* alternates need not be associated with the same table columns and this +* allows a pixel list to contain up to 27 separate images. As usual, if +* one of these representations happened to contain more than two +* celestial axes, for example, then an error would result when wcsset() +* is invoked on it. In this case the "colsel" argument could be used to +* restrict the columns used to construct the representation so that it +* only contained one pair of celestial axes. +* +* Global, binary-table WCS keywords are considered to apply to the pixel +* list image with matching alternate (e.g. the "a" value in LONPna or +* EQUIna), regardless of the table columns the image occupies. In other +* words, the column number is ignored (the "n" value in LONPna or +* EQUIna). This also applies for global, binary-table WCS keywords that +* have no alternates, such as MJDOBn and OBSGXn, which match all images +* in a pixel list. Take heed that this may lead to counterintuitive +* behaviour, especially where such a keyword references a column that +* does not store pixel coordinates, and moreso where the pixel list +* stores only a single image. In fact, as the column number, n, is +* ignored for such keywords, it would make no difference even if they +* referenced non-existent columns. Moreover, there is no requirement for +* consistency in the column numbers used for such keywords, even for +* OBSGXn, OBSGYn, and OBSGZn which are meant to define the elements of a +* coordinate vector. Although it would surely be perverse to construct a +* pixel list like this, such a situation may still arise in practice +* where columns are deleted from a binary table. +* +* The situation with global, binary-table WCS keywords becomes +* potentially even more confusing when image arrays and pixel list images +* coexist in one binary table. In that case, a keyword such as MJDOBn +* may legitimately appear multiple times with n referencing different +* image arrays. Which then is the one that applies to the pixel list +* images? In this implementation, it is the last instance that appears +* in the header, whether or not it is also associated with an image +* array. +* +* +* wcstab() - Tabular construction routine +* --------------------------------------- +* wcstab() assists in filling in the information in the wcsprm struct relating +* to coordinate lookup tables. +* +* Tabular coordinates ('TAB') present certain difficulties in that the main +* components of the lookup table - the multidimensional coordinate array plus +* an index vector for each dimension - are stored in a FITS binary table +* extension (BINTABLE). Information required to locate these arrays is stored +* in PVi_ma and PSi_ma keywords in the image header. +* +* wcstab() parses the PVi_ma and PSi_ma keywords associated with each 'TAB' +* axis and allocates memory in the wcsprm struct for the required number of +* tabprm structs. It sets as much of the tabprm struct as can be gleaned from +* the image header, and also sets up an array of wtbarr structs (described in +* the prologue of wtbarr.h) to assist in extracting the required arrays from +* the BINTABLE extension(s). +* +* It is then up to the user to allocate memory for, and copy arrays from the +* BINTABLE extension(s) into the tabprm structs. A CFITSIO routine, +* fits_read_wcstab(), has been provided for this purpose, see getwcstab.h. +* wcsset() will automatically take control of this allocated memory, in +* particular causing it to be freed by wcsfree(); the user must not attempt +* to free it after wcsset() has been called. +* +* Note that wcspih() and wcsbth() automatically invoke wcstab() on each of the +* wcsprm structs that they return. +* +* Given and returned: +* wcs struct wcsprm* +* Coordinate transformation parameters (see below). +* +* wcstab() sets ntab, tab, nwtb and wtb, allocating +* memory for the tab and wtb arrays. This allocated +* memory will be freed automatically by wcsfree(). +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Invalid tabular parameters. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* +* wcsidx() - Index alternate coordinate representations +* ----------------------------------------------------- +* wcsidx() returns an array of 27 indices for the alternate coordinate +* representations in the array of wcsprm structs returned by wcspih(). For +* the array returned by wcsbth() it returns indices for the unattached +* (colnum == 0) representations derived from image header keywords - use +* wcsbdx() for those derived from binary table image arrays or pixel lists +* keywords. +* +* Given: +* nwcs int Number of coordinate representations in the array. +* +* wcs const struct wcsprm** +* Pointer to an array of wcsprm structs returned by +* wcspih() or wcsbth(). +* +* Returned: +* alts int[27] Index of each alternate coordinate representation in +* the array: alts[0] for the primary, alts[1] for 'A', +* etc., set to -1 if not present. +* +* For example, if there was no 'P' representation then +* += alts['P'-'A'+1] == -1; +* +* Otherwise, the address of its wcsprm struct would be +* += wcs + alts['P'-'A'+1]; +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* wcsbdx() - Index alternate coordinate representions +* --------------------------------------------------- +* wcsbdx() returns an array of 999 x 27 indices for the alternate coordinate +* representions for binary table image arrays xor pixel lists in the array of +* wcsprm structs returned by wcsbth(). Use wcsidx() for the unattached +* representations derived from image header keywords. +* +* Given: +* nwcs int Number of coordinate representations in the array. +* +* wcs const struct wcsprm** +* Pointer to an array of wcsprm structs returned by +* wcsbth(). +* +* type int Select the type of coordinate representation: +* 0: binary table image arrays, +* 1: pixel lists. +* +* Returned: +* alts short[1000][28] +* Index of each alternate coordinate represention in the +* array: alts[col][0] for the primary, alts[col][1] for +* 'A', to alts[col][26] for 'Z', where col is the +* 1-relative column number, and col == 0 is used for +* unattached image headers. Set to -1 if not present. +* +* alts[col][27] counts the number of coordinate +* representations of the chosen type for each column. +* +* For example, if there was no 'P' represention for +* column 13 then +* += alts[13]['P'-'A'+1] == -1; +* +* Otherwise, the address of its wcsprm struct would be +* += wcs + alts[13]['P'-'A'+1]; +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* wcsvfree() - Free the array of wcsprm structs +* --------------------------------------------- +* wcsvfree() frees the memory allocated by wcspih() or wcsbth() for the array +* of wcsprm structs, first invoking wcsfree() on each of the array members. +* +* Given and returned: +* nwcs int* Number of coordinate representations found; set to 0 +* on return. +* +* wcs struct wcsprm** +* Pointer to the array of wcsprm structs; set to 0x0 on +* return. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Null wcsprm pointer passed. +* +* +* wcshdo() - Write out a wcsprm struct as a FITS header +* ----------------------------------------------------- +* wcshdo() translates a wcsprm struct into a FITS header. If the colnum +* member of the struct is non-zero then a binary table image array header will +* be produced. Otherwise, if the colax[] member of the struct is set non-zero +* then a pixel list header will be produced. Otherwise, a primary image or +* image extension header will be produced. +* +* If the struct was originally constructed from a header, e.g. by wcspih(), +* the output header will almost certainly differ in a number of respects: +* +* - The output header only contains WCS-related keywords. In particular, it +* does not contain syntactically-required keywords such as SIMPLE, NAXIS, +* BITPIX, or END. +* +* - Elements of the PCi_ja matrix will be written if and only if they differ +* from the unit matrix. Thus, if the matrix is unity then no elements +* will be written. +* +* - The redundant keywords MJDREF, JDREF, JDREFI, JDREFF, all of which +* duplicate MJDREFI + MJDREFF, are never written. OBSGEO-[LBH] are not +* written if OBSGEO-[XYZ] are defined. +* +* - Deprecated (e.g. CROTAn, RESTFREQ, VELREF, RADECSYS, EPOCH, VSOURCEa) or +* non-standard usage will be translated to standard (this is partially +* dependent on whether wcsfix() was applied). +* +* - Additional keywords such as WCSAXESa, CUNITia, LONPOLEa and LATPOLEa may +* appear. +* +* - Quantities will be converted to the units used internally, basically SI +* with the addition of degrees. +* +* - Floating-point quantities may be given to a different decimal precision. +* +* - The original keycomments will be lost, although wcshdo() tries hard to +* write meaningful comments. +* +* - Keyword order will almost certainly be changed. +* +* Keywords can be translated between the image array, binary table, and pixel +* lists forms by manipulating the colnum or colax[] members of the wcsprm +* struct. +* +* Given: +* ctrl int Vector of flag bits that controls the degree of +* permissiveness in departing from the published WCS +* standard, and also controls the formatting of +* floating-point keyvalues. Set it to zero to get the +* default behaviour. +* +* Flag bits for the degree of permissiveness: +* WCSHDO_none: Recognize only FITS keywords defined by +* the published WCS standard. +* WCSHDO_all: Admit all recognized informal extensions +* of the WCS standard. +* Fine-grained control of the degree of permissiveness +* is also possible as explained in the notes below. +* +* As for controlling floating-point formatting, by +* default wcshdo() uses "%20.12G" for non-parameterized +* keywords such as LONPOLEa, and attempts to make the +* header more human-readable by using the same "%f" +* format for all values of each of the following +* parameterized keywords: CRPIXja, PCi_ja, and CDELTia +* (n.b. excluding CRVALia). Each has the same field +* width and precision so that the decimal points line +* up. The precision, allowing for up to 15 significant +* digits, is chosen so that there are no excess trailing +* zeroes. A similar formatting scheme applies by +* default for distortion function parameters. +* +* However, where the values of, for example, CDELTia +* differ by many orders of magnitude, the default +* formatting scheme may cause unacceptable loss of +* precision for the lower-valued keyvalues. Thus the +* default behaviour may be overridden: +* WCSHDO_P12: Use "%20.12G" format for all floating- +* point keyvalues (12 significant digits). +* WCSHDO_P13: Use "%21.13G" format for all floating- +* point keyvalues (13 significant digits). +* WCSHDO_P14: Use "%22.14G" format for all floating- +* point keyvalues (14 significant digits). +* WCSHDO_P15: Use "%23.15G" format for all floating- +* point keyvalues (15 significant digits). +* WCSHDO_P16: Use "%24.16G" format for all floating- +* point keyvalues (16 significant digits). +* WCSHDO_P17: Use "%25.17G" format for all floating- +* point keyvalues (17 significant digits). +* If more than one of the above flags are set, the +* highest number of significant digits prevails. In +* addition, there is an anciliary flag: +* WCSHDO_EFMT: Use "%E" format instead of the default +* "%G" format above. +* Note that excess trailing zeroes are stripped off the +* fractional part with "%G" (which never occurs with +* "%E"). Note also that the higher-precision options +* eat into the keycomment area. In this regard, +* WCSHDO_P14 causes minimal disruption with "%G" format, +* while WCSHDO_P13 is appropriate with "%E". +* +* Given and returned: +* wcs struct wcsprm* +* Pointer to a wcsprm struct containing coordinate +* transformation parameters. Will be initialized if +* necessary. +* +* Returned: +* nkeyrec int* Number of FITS header keyrecords returned in the +* "header" array. +* +* header char** Pointer to an array of char holding the header. +* Storage for the array is allocated by wcshdo() in +* blocks of 2880 bytes (32 x 80-character keyrecords) +* and must be freed by the user to avoid memory leaks. +* See wcsdealloc(). +* +* Each keyrecord is 80 characters long and is *NOT* +* null-terminated, so the first keyrecord starts at +* (*header)[0], the second at (*header)[80], etc. +* +* Function return value: +* int Status return value (associated with wcs_errmsg[]): +* 0: Success. +* 1: Null wcsprm pointer passed. +* 2: Memory allocation failed. +* 3: Linear transformation matrix is singular. +* 4: Inconsistent or unrecognized coordinate axis +* types. +* 5: Invalid parameter value. +* 6: Invalid coordinate transformation parameters. +* 7: Ill-conditioned coordinate transformation +* parameters. +* +* For returns > 1, a detailed error message is set in +* wcsprm::err if enabled, see wcserr_enable(). +* +* Notes: +* 1: wcshdo() interprets the "relax" argument as a vector of flag bits to +* provide fine-grained control over what non-standard WCS keywords to +* write. The flag bits are subject to change in future and should be set +* by using the preprocessor macros (see below) for the purpose. +* +* - WCSHDO_none: Don't use any extensions. +* +* - WCSHDO_all: Write all recognized extensions, equivalent to setting +* each flag bit. +* +* - WCSHDO_safe: Write all extensions that are considered to be safe and +* recommended. +* +* - WCSHDO_DOBSn: Write DOBSn, the column-specific analogue of DATE-OBS +* for use in binary tables and pixel lists. WCS Paper III +* introduced DATE-AVG and DAVGn but by an oversight DOBSn (the +* obvious analogy) was never formally defined by the standard. +* The alternative to using DOBSn is to write DATE-OBS which +* applies to the whole table. This usage is considered to be +* safe and is recommended. +* +* - WCSHDO_TPCn_ka: WCS Paper I defined +* +* - TPn_ka and TCn_ka for pixel lists +* +* but WCS Paper II uses TPCn_ka in one example and subsequently +* the errata for the WCS papers legitimized the use of +* +* - TPCn_ka and TCDn_ka for pixel lists +* +* provided that the keyword does not exceed eight characters. +* This usage is considered to be safe and is recommended because +* of the non-mnemonic terseness of the shorter forms. +* +* - WCSHDO_PVn_ma: WCS Paper I defined +* +* - iVn_ma and iSn_ma for bintables and +* - TVn_ma and TSn_ma for pixel lists +* +* but WCS Paper II uses iPVn_ma and TPVn_ma in the examples and +* subsequently the errata for the WCS papers legitimized the use +* of +* +* - iPVn_ma and iPSn_ma for bintables and +* - TPVn_ma and TPSn_ma for pixel lists +* +* provided that the keyword does not exceed eight characters. +* This usage is considered to be safe and is recommended because +* of the non-mnemonic terseness of the shorter forms. +* +* - WCSHDO_CRPXna: For historical reasons WCS Paper I defined +* +* - jCRPXn, iCDLTn, iCUNIn, iCTYPn, and iCRVLn for bintables and +* - TCRPXn, TCDLTn, TCUNIn, TCTYPn, and TCRVLn for pixel lists +* +* for use without an alternate version specifier. However, +* because of the eight-character keyword constraint, in order to +* accommodate column numbers greater than 99 WCS Paper I also +* defined +* +* - jCRPna, iCDEna, iCUNna, iCTYna and iCRVna for bintables and +* - TCRPna, TCDEna, TCUNna, TCTYna and TCRVna for pixel lists +* +* for use with an alternate version specifier (the "a"). Like +* the PC, CD, PV, and PS keywords there is an obvious tendency to +* confuse these two forms for column numbers up to 99. It is +* very unlikely that any parser would reject keywords in the +* first set with a non-blank alternate version specifier so this +* usage is considered to be safe and is recommended. +* +* - WCSHDO_CNAMna: WCS Papers I and III defined +* +* - iCNAna, iCRDna, and iCSYna for bintables and +* - TCNAna, TCRDna, and TCSYna for pixel lists +* +* By analogy with the above, the long forms would be +* +* - iCNAMna, iCRDEna, and iCSYEna for bintables and +* - TCNAMna, TCRDEna, and TCSYEna for pixel lists +* +* Note that these keywords provide auxiliary information only, +* none of them are needed to compute world coordinates. This +* usage is potentially unsafe and is not recommended at this +* time. +* +* - WCSHDO_WCSNna: In light of wcsbth() note 4, write WCSNna instead of +* TWCSna for pixel lists. While wcsbth() treats WCSNna and +* TWCSna as equivalent, other parsers may not. Consequently, +* this usage is potentially unsafe and is not recommended at this +* time. +* +* +* Global variable: const char *wcshdr_errmsg[] - Status return messages +* --------------------------------------------------------------------- +* Error messages to match the status value returned from each function. +* Use wcs_errmsg[] for status returns from wcshdo(). +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSHDR +#define WCSLIB_WCSHDR + +#include "wcs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define WCSHDR_none 0x00000000 +#define WCSHDR_all 0x000FFFFF +#define WCSHDR_reject 0x10000000 +#define WCSHDR_strict 0x20000000 + +#define WCSHDR_CROTAia 0x00000001 +#define WCSHDR_VELREFa 0x00000002 +#define WCSHDR_CD00i00j 0x00000004 +#define WCSHDR_PC00i00j 0x00000008 +#define WCSHDR_PROJPn 0x00000010 +#define WCSHDR_CD0i_0ja 0x00000020 +#define WCSHDR_PC0i_0ja 0x00000040 +#define WCSHDR_PV0i_0ma 0x00000080 +#define WCSHDR_PS0i_0ma 0x00000100 +#define WCSHDR_DOBSn 0x00000200 +#define WCSHDR_OBSGLBHn 0x00000400 +#define WCSHDR_RADECSYS 0x00000800 +#define WCSHDR_EPOCHa 0x00001000 +#define WCSHDR_VSOURCE 0x00002000 +#define WCSHDR_DATEREF 0x00004000 +#define WCSHDR_LONGKEY 0x00008000 +#define WCSHDR_CNAMn 0x00010000 +#define WCSHDR_AUXIMG 0x00020000 +#define WCSHDR_ALLIMG 0x00040000 + +#define WCSHDR_IMGHEAD 0x00100000 +#define WCSHDR_BIMGARR 0x00200000 +#define WCSHDR_PIXLIST 0x00400000 + +#define WCSHDO_none 0x00000 +#define WCSHDO_all 0x000FF +#define WCSHDO_safe 0x0000F +#define WCSHDO_DOBSn 0x00001 +#define WCSHDO_TPCn_ka 0x00002 +#define WCSHDO_PVn_ma 0x00004 +#define WCSHDO_CRPXna 0x00008 +#define WCSHDO_CNAMna 0x00010 +#define WCSHDO_WCSNna 0x00020 +#define WCSHDO_P12 0x01000 +#define WCSHDO_P13 0x02000 +#define WCSHDO_P14 0x04000 +#define WCSHDO_P15 0x08000 +#define WCSHDO_P16 0x10000 +#define WCSHDO_P17 0x20000 +#define WCSHDO_EFMT 0x40000 + + +extern const char *wcshdr_errmsg[]; + +enum wcshdr_errmsg_enum { + WCSHDRERR_SUCCESS = 0, // Success. + WCSHDRERR_NULL_POINTER = 1, // Null wcsprm pointer passed. + WCSHDRERR_MEMORY = 2, // Memory allocation failed. + WCSHDRERR_BAD_COLUMN = 3, // Invalid column selection. + WCSHDRERR_PARSER = 4, // Fatal error returned by Flex + // parser. + WCSHDRERR_BAD_TABULAR_PARAMS = 5 // Invalid tabular parameters. +}; + +int wcspih(char *header, int nkeyrec, int relax, int ctrl, int *nreject, + int *nwcs, struct wcsprm **wcs); + +int wcsbth(char *header, int nkeyrec, int relax, int ctrl, int keysel, + int *colsel, int *nreject, int *nwcs, struct wcsprm **wcs); + +int wcstab(struct wcsprm *wcs); + +int wcsidx(int nwcs, struct wcsprm **wcs, int alts[27]); + +int wcsbdx(int nwcs, struct wcsprm **wcs, int type, short alts[1000][28]); + +int wcsvfree(int *nwcs, struct wcsprm **wcs); + +int wcshdo(int ctrl, struct wcsprm *wcs, int *nkeyrec, char **header); + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_WCSHDR diff --git a/deps/wcslib/C/wcslib.h b/deps/wcslib/C/wcslib.h new file mode 100644 index 0000000..bfe155b --- /dev/null +++ b/deps/wcslib/C/wcslib.h @@ -0,0 +1,60 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcslib.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* Summary of wcslib.h +* ------------------- +* This header file is provided purely for convenience. Use it to include all +* of the separate WCSLIB headers. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSLIB +#define WCSLIB_WCSLIB + +#include "cel.h" +#include "dis.h" +#include "fitshdr.h" +#include "lin.h" +#include "log.h" +#include "prj.h" +#include "spc.h" +#include "sph.h" +#include "spx.h" +#include "tab.h" +#include "wcs.h" +#include "wcserr.h" +#include "wcsfix.h" +#include "wcshdr.h" +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcstrig.h" +#include "wcsunits.h" +#include "wcsutil.h" +#include "wtbarr.h" + +#endif // WCSLIB_WCSLIB diff --git a/deps/wcslib/C/wcsmath.h b/deps/wcslib/C/wcsmath.h new file mode 100644 index 0000000..e98f8e4 --- /dev/null +++ b/deps/wcslib/C/wcsmath.h @@ -0,0 +1,72 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsmath.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of wcsmath.h +* -------------------- +* Definition of mathematical constants used by WCSLIB. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSMATH +#define WCSLIB_WCSMATH + +#ifdef PI +#undef PI +#endif + +#ifdef D2R +#undef D2R +#endif + +#ifdef R2D +#undef R2D +#endif + +#ifdef SQRT2 +#undef SQRT2 +#endif + +#ifdef SQRT2INV +#undef SQRT2INV +#endif + +#define PI 3.141592653589793238462643 +#define D2R PI/180.0 +#define R2D 180.0/PI +#define SQRT2 1.4142135623730950488 +#define SQRT2INV 1.0/SQRT2 + +#ifdef UNDEFINED +#undef UNDEFINED +#endif + +#define UNDEFINED 987654321.0e99 +#define undefined(value) (value == UNDEFINED) + +#endif // WCSLIB_WCSMATH diff --git a/deps/wcslib/C/wcspih.c b/deps/wcslib/C/wcspih.c new file mode 100644 index 0000000..89c0713 --- /dev/null +++ b/deps/wcslib/C/wcspih.c @@ -0,0 +1,26681 @@ +#line 1 "wcspih.c" + +#line 3 "wcspih.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define wcspih_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wcspih_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wcspih_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wcspih_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wcspih_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wcspih_scan_buffer +#endif + +#ifdef yy_scan_string +#define wcspih_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wcspih_scan_string +#endif + +#ifdef yy_scan_bytes +#define wcspih_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wcspih_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wcspih_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wcspih_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wcspih_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wcspih_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wcspih_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wcspih_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wcspih_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wcspih_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wcspihpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wcspihpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wcspihpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wcspihpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wcspihensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wcspihensure_buffer_stack +#endif + +#ifdef yylex +#define wcspihlex_ALREADY_DEFINED +#else +#define yylex wcspihlex +#endif + +#ifdef yyrestart +#define wcspihrestart_ALREADY_DEFINED +#else +#define yyrestart wcspihrestart +#endif + +#ifdef yylex_init +#define wcspihlex_init_ALREADY_DEFINED +#else +#define yylex_init wcspihlex_init +#endif + +#ifdef yylex_init_extra +#define wcspihlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wcspihlex_init_extra +#endif + +#ifdef yylex_destroy +#define wcspihlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wcspihlex_destroy +#endif + +#ifdef yyget_debug +#define wcspihget_debug_ALREADY_DEFINED +#else +#define yyget_debug wcspihget_debug +#endif + +#ifdef yyset_debug +#define wcspihset_debug_ALREADY_DEFINED +#else +#define yyset_debug wcspihset_debug +#endif + +#ifdef yyget_extra +#define wcspihget_extra_ALREADY_DEFINED +#else +#define yyget_extra wcspihget_extra +#endif + +#ifdef yyset_extra +#define wcspihset_extra_ALREADY_DEFINED +#else +#define yyset_extra wcspihset_extra +#endif + +#ifdef yyget_in +#define wcspihget_in_ALREADY_DEFINED +#else +#define yyget_in wcspihget_in +#endif + +#ifdef yyset_in +#define wcspihset_in_ALREADY_DEFINED +#else +#define yyset_in wcspihset_in +#endif + +#ifdef yyget_out +#define wcspihget_out_ALREADY_DEFINED +#else +#define yyget_out wcspihget_out +#endif + +#ifdef yyset_out +#define wcspihset_out_ALREADY_DEFINED +#else +#define yyset_out wcspihset_out +#endif + +#ifdef yyget_leng +#define wcspihget_leng_ALREADY_DEFINED +#else +#define yyget_leng wcspihget_leng +#endif + +#ifdef yyget_text +#define wcspihget_text_ALREADY_DEFINED +#else +#define yyget_text wcspihget_text +#endif + +#ifdef yyget_lineno +#define wcspihget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wcspihget_lineno +#endif + +#ifdef yyset_lineno +#define wcspihset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wcspihset_lineno +#endif + +#ifdef yyget_column +#define wcspihget_column_ALREADY_DEFINED +#else +#define yyget_column wcspihget_column +#endif + +#ifdef yyset_column +#define wcspihset_column_ALREADY_DEFINED +#else +#define yyset_column wcspihset_column +#endif + +#ifdef yywrap +#define wcspihwrap_ALREADY_DEFINED +#else +#define yywrap wcspihwrap +#endif + +#ifdef yyalloc +#define wcspihalloc_ALREADY_DEFINED +#else +#define yyalloc wcspihalloc +#endif + +#ifdef yyrealloc +#define wcspihrealloc_ALREADY_DEFINED +#else +#define yyrealloc wcspihrealloc +#endif + +#ifdef yyfree +#define wcspihfree_ALREADY_DEFINED +#else +#define yyfree wcspihfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define wcspihwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 55, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 58, 59, 60, 61, 62, + 57, 57, 63, 57, 64, 57, 65, 66, 67, 68, + 69, 57, 70, 71, 72, 57, 73, 74, 75, 76, + 77, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, + 57, 57, 57, 57, 57, 57, 57, 57 + }, + + { + 55, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 56, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 79, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78 + }, + + { + 55, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 56, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 79, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, + 78, 78, 78, 78, 78, 78, 78, 78 + }, + + { + 55, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 56, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 82, 83, + + 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81 + }, + + { + 55, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 56, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 82, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, + + 81, 81, 81, 81, 81, 81, 81, 81 + }, + + { + 55, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 56, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 85, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84 + }, + + { + 55, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 56, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 85, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 84, 84, + + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84 + }, + + { + 55, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 56, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 88, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + + }, + + { + 55, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 56, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 88, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + }, + + { + 55, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 56, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 91, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, + + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90 + }, + + { + 55, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 56, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 91, 90, 90, 90, 90, 90, 90, 90, + + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90 + }, + + { + 55, 92, 92, 92, 92, 92, 92, 92, 92, 92, + + 56, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92 + }, + + { + 55, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 56, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92 + }, + + { + 55, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 56, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, + + 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93 + }, + + { + 55, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 56, 93, 93, 93, 93, 93, 93, 93, 93, 93, + + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + + 93, 93, 93, 93, 93, 93, 93, 93 + }, + + { + 55, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 56, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95 + }, + + { + 55, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 56, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, + + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95 + }, + + { + 55, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 56, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97 + + }, + + { + 55, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 56, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97 + }, + + { + 55, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 56, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + }, + + { + 55, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 56, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + + 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99 + }, + + { + 55, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 56, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101 + }, + + { + 55, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 56, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101 + }, + + { + 55, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 56, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 104, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103 + }, + + { + 55, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 56, 103, 103, 103, 103, 103, 103, 103, 103, 103, + + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 104, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + + 103, 103, 103, 103, 103, 103, 103, 103 + }, + + { + 55, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 56, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 106, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105 + }, + + { + 55, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 56, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + + 105, 106, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105 + }, + + { + 55, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 56, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 108, 107, 108, 107, 107, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107 + + }, + + { + 55, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 56, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 108, 107, 108, 107, 107, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107 + }, + + { + 55, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 56, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 111, 110, 111, 112, 110, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 55, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 56, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + + 110, 110, 110, 111, 110, 111, 112, 110, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110 + }, + + { + 55, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 56, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 115, 114, 115, 116, 114, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 55, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 56, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 115, 114, 115, 116, 114, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 117, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114 + }, + + { + 55, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 56, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118 + }, + + { + 55, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 56, 118, 118, 118, 118, 118, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, + + 118, 118, 118, 118, 118, 118, 118, 118 + }, + + { + 55, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 56, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120 + }, + + { + 55, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 56, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 121, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120 + }, + + { + 55, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 56, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 122, 122, 122, 122, 123, 122, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 122, 122, 122, 122, 122 + + }, + + { + 55, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 56, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 122, 122, 122, 122, 123, 122, 123, 123, 123, + + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 122, 122, 122, 122, 122 + }, + + { + 55, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 56, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 125, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 55, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 56, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 125, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 124, 124, 124 + }, + + { + 55, 126, 126, 126, 126, 126, 126, 126, 126, 126, + + 56, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 127, 126, 127, 128, 126, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126 + }, + + { + 55, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 56, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 127, 126, 127, 128, 126, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 126, 126, 126, 126 + }, + + { + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 130, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 130, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + + 56, 56, 56, 56, 56, 56, 56, 56 + }, + + { + 55, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 133, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 134, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131 + }, + + { + 55, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 132, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 133, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 134, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131 + }, + + { + 55, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135 + + }, + + { + 55, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 136, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135 + }, + + { + 55, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 + }, + + { + 55, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 138, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 + }, + + { + 55, 139, 139, 139, 139, 139, 139, 139, 139, 139, + + 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139 + }, + + { + 55, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 140, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139 + }, + + { + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55 + }, + + { + 55, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56 + }, + + { + 55, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57 + }, + + { + 55, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, 141, -58, -58, + 142, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, 143, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58 + }, + + { + 55, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, 144, 145, + -59, -59, -59, -59, -59, -59, 146, -59, -59, -59, + 147, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, 148, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59 + + }, + + { + 55, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, 149, -60, + -60, -60, -60, -60, -60, -60, -60, -60, 150, -60, + 151, 152, 153, 154, 155, 156, -60, -60, -60, -60, + 157, -60, -60, -60, -60, 158, -60, -60, -60, -60, + + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60 + }, + + { + 55, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, 159, -61, -61, -61, -61, + + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + 160, 161, -61, 162, -61, -61, 163, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61 + }, + + { + 55, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, 164, -62, + 165, 166, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62 + }, + + { + 55, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, 167, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63 + }, + + { + 55, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, 168, 169, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64 + }, + + { + 55, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, 170, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, 171, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65 + }, + + { + 55, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, 172, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66 + }, + + { + 55, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, 173, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67 + }, + + { + 55, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + + -68, -68, -68, -68, -68, -68, 174, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68 + }, + + { + 55, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, 175, -69, -69, + -69, -69, -69, -69, -69, -69, 176, -69, -69, -69, + 177, -69, 178, 179, -69, -69, 180, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69 + + }, + + { + 55, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, 181, -70, -70, -70, 182, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, 183, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70 + }, + + { + 55, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + 184, -71, -71, 185, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71 + }, + + { + 55, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, 186, + -72, -72, -72, 187, -72, -72, -72, -72, -72, -72, + -72, -72, 188, 189, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72 + }, + + { + 55, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, 190, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, 191, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73 + }, + + { + 55, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, 192, -74, 193, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74 + }, + + { + 55, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + 194, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75 + }, + + { + 55, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + 195, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76 + }, + + { + 55, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, 196, -77, -77, -77, -77, -77, -77, + + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77 + }, + + { + 55, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78 + }, + + { + 55, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + + -79, -79, 197, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, 198, 199, + 199, 199, 199, 199, 199, 199, 199, 199, -79, -79, + -79, -79, -79, -79, -79, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, + 197, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79 + + }, + + { + 55, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, 200, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, 201, 201, + 201, 201, 201, 201, 201, 201, 201, 201, -80, -80, + -80, -80, -80, -80, -80, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, -80, -80, -80, -80, -80, -80, -80, -80, -80, + + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80 + }, + + { + 55, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81 + }, + + { + 55, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, 202, -82, -82, 203, 204, + 204, 204, 204, 204, 204, 204, 204, 204, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, 205, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 55, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, 202, -83, -83, 206, 206, + 206, 206, 206, 206, 206, 206, 206, 206, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, 207, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83 + }, + + { + 55, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84, -84, -84, + -84, -84, -84, -84, -84, -84, -84, -84 + }, + + { + 55, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, 208, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, 209, 210, + + 210, 210, 210, 210, 210, 210, 210, 210, -85, -85, + -85, -85, -85, -85, -85, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, + 208, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 55, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, 211, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, -86, -86, + -86, -86, -86, -86, -86, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86 + }, + + { + 55, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87, -87, -87, + -87, -87, -87, -87, -87, -87, -87, -87 + }, + + { + 55, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, 213, -88, -88, 214, 215, + 215, 215, 215, 215, 215, 215, 215, 215, -88, -88, + + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, 216, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88 + }, + + { + 55, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, 213, -89, -89, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, 218, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89 + + }, + + { + 55, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90 + }, + + { + 55, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91 + }, + + { + 55, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92 + }, + + { + 55, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93 + }, + + { + 55, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, 219, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, 220, 220, + 220, 220, 220, 220, 220, 220, 220, 220, -94, -94, + -94, -94, -94, -94, -94, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94 + }, + + { + 55, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95 + }, + + { + 55, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, 221, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, 222, 222, + 222, 222, 222, 222, 222, 222, 222, 222, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96 + }, + + { + 55, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97 + }, + + { + 55, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, 223, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98 + }, + + { + 55, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99 + + }, + + { + 55, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, 224, -100, -100, -100, -100, + + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100 + }, + + { + 55, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101 + }, + + { + 55, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, 225, -102, -102, -102, -102, -102, -102, -102, + + -102, -102, -102, -102, -102, -102, -102, -102, 226, 226, + 226, 226, 226, 226, 226, 226, 226, 226, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102 + }, + + { + 55, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103 + }, + + { + 55, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, 227, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104 + }, + + { + 55, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105 + }, + + { + 55, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, 228, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106 + }, + + { + 55, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107 + }, + + { + 55, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -108, -108, + + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108 + }, + + { + 55, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109 + + }, + + { + 55, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110 + }, + + { + 55, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, 230, -111, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111 + }, + + { + 55, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, -112, -112, -112, -112, -112, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112 + }, + + { + 55, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, 233, -113, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, 235, 235, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + 235, 235, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113 + }, + + { + 55, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114 + }, + + { + 55, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, 236, -115, 237, 237, + + 237, 237, 237, 237, 237, 237, 237, 237, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115 + }, + + { + 55, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116 + }, + + { + 55, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, 239, -117, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, 241, 241, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + 241, 241, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117 + }, + + { + 55, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118 + }, + + { + 55, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + + 242, 242, 242, 242, 242, 242, 242, 242, 242, 243, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242 + + }, + + { + 55, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120 + }, + + { + 55, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244 + }, + + { + 55, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122 + }, + + { + 55, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, 246, -123, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, -123, -123, + -123, -123, -123, -123, -123, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, -123, -123, -123, -123, 246, -123, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, -123, -123, -123, -123, -123 + }, + + { + 55, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124 + }, + + { + 55, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, 247, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125 + }, + + { + 55, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126 + }, + + { + 55, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, 248, -127, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127 + }, + + { + 55, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -128, -128, + + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128 + }, + + { + 55, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, 251, -129, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, 253, 253, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + 253, 253, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129 + + }, + + { + 55, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130 + }, + + { + 55, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 256, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 257, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254 + }, + + { + 55, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132 + }, + + { + 55, 258, 258, 258, 258, 258, 258, 258, 258, 258, + + 259, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 260, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 261, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + + 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, + 258, 258, 258, 258, 258, 258, 258, 258 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 267, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266 + }, + + { + 55, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136 + }, + + { + 55, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268 + }, + + { + 55, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138 + }, + + { + 55, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 271, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270 + + }, + + { + 55, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140 + }, + + { + 55, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, 272, -141, + + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141 + }, + + { + 55, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, 273, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142 + }, + + { + 55, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, 274, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, 275, + -143, -143, 276, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143 + }, + + { + 55, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, 277, -144, -144, -144, -144, -144, -144, + + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144 + }, + + { + 55, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + 278, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145 + }, + + { + 55, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, 279, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, 280, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146 + }, + + { + 55, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + + -147, -147, -147, -147, -147, 281, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147 + }, + + { + 55, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + + -148, -148, -148, -148, -148, -148, -148, -148, 282, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, 283, + -148, -148, 284, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148 + }, + + { + 55, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, 285, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149 + + }, + + { + 55, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, 286, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + 287, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150 + }, + + { + 55, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, 288, 289, + + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151 + }, + + { + 55, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, 290, 291, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152 + }, + + { + 55, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, 292, -153, + -153, -153, -153, -153, -153, -153, 293, -153, -153, 294, + 295, -153, -153, -153, -153, -153, 296, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153 + }, + + { + 55, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + + -154, -154, -154, -154, -154, -154, -154, -154, -154, 297, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154 + }, + + { + 55, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, 298, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155 + }, + + { + 55, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, 299, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156 + }, + + { + 55, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + 300, -157, -157, -157, -157, -157, -157, -157, -157, -157, + + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157 + }, + + { + 55, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, 301, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158 + }, + + { + 55, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, 302, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159 + + }, + + { + 55, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160 + }, + + { + 55, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161 + }, + + { + 55, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, 303, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162 + }, + + { + 55, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, 304, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163 + }, + + { + 55, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, 305, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164 + }, + + { + 55, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, 306, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165 + }, + + { + 55, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, 307, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166 + }, + + { + 55, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, 308, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167 + }, + + { + 55, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, 309, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, 310, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168 + }, + + { + 55, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + 311, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169 + + }, + + { + 55, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, 312, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170 + }, + + { + 55, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + + -171, -171, -171, -171, -171, -171, -171, -171, 313, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171 + }, + + { + 55, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, 314, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172 + }, + + { + 55, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, 315, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173 + }, + + { + 55, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + + -174, -174, -174, 316, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174 + }, + + { + 55, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175 + }, + + { + 55, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, 317, -176, -176, -176, 318, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, 319, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176 + }, + + { + 55, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, 320, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177 + }, + + { + 55, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, 321, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178 + }, + + { + 55, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179 + + }, + + { + 55, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180 + }, + + { + 55, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, 322, -181, + + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181 + }, + + { + 55, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, 323, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182 + }, + + { + 55, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, 324, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183 + }, + + { + 55, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, 325, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184 + }, + + { + 55, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, 326, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185 + }, + + { + 55, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, 327, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186 + }, + + { + 55, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, 328, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187 + }, + + { + 55, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + + -188, -188, -188, -188, -188, -188, -188, -188, -188, 329, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188 + }, + + { + 55, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, 330, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189 + + }, + + { + 55, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, 331, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190 + }, + + { + 55, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + + -191, -191, -191, -191, -191, -191, -191, -191, -191, 332, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191 + }, + + { + 55, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, 333, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192 + }, + + { + 55, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, 334, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193 + }, + + { + 55, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, 335, -194, -194, -194, -194, -194, 336, + + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194 + }, + + { + 55, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, 337, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195 + }, + + { + 55, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, 338, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196 + }, + + { + 55, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, 339, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197 + }, + + { + 55, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, 340, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, 341, 342, + 342, 342, 342, 342, 342, 342, 342, 342, -198, -198, + + -198, -198, -198, -198, -198, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198 + }, + + { + 55, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, 343, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, 341, 342, + 342, 342, 342, 342, 342, 342, 342, 342, -199, -199, + -199, -199, -199, -199, -199, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, 343, 343, 343, 343, 343, 343, 343, 343, 343, + 343, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199 + + }, + + { + 55, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, 344, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200 + }, + + { + 55, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, 345, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, 346, 346, + 346, 346, 346, 346, 346, 346, 346, 346, -201, -201, + -201, -201, -201, -201, -201, 345, 345, 345, 345, 345, + + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, 345, 345, 345, 345, 345, 345, 345, 345, 345, + 345, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201 + }, + + { + 55, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, -202, -202, 347, 347, + 347, 347, 347, 347, 347, 347, 347, 347, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202 + }, + + { + 55, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, 348, -203, -203, 349, 350, + 350, 350, 350, 350, 350, 350, 350, 350, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, 351, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203 + }, + + { + 55, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, 348, -204, -204, 352, 353, + 353, 353, 353, 353, 353, 353, 353, 353, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, 354, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204 + }, + + { + 55, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, 355, 355, + + 355, 355, 355, 355, 355, 355, 355, 355, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205 + }, + + { + 55, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 348, -206, -206, 356, 357, + 357, 357, 357, 357, 357, 357, 357, 357, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 358, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206 + }, + + { + 55, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, 359, 360, + 360, 360, 360, 360, 360, 360, 360, 360, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207 + }, + + { + 55, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, 361, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208 + }, + + { + 55, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, 362, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, 363, 364, + 364, 364, 364, 364, 364, 364, 364, 364, -209, -209, + -209, -209, -209, -209, -209, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, 362, 362, 362, 362, 362, 362, 362, 362, 362, + 362, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209 + + }, + + { + 55, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, 365, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, 363, 364, + 364, 364, 364, 364, 364, 364, 364, 364, -210, -210, + -210, -210, -210, -210, -210, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, -210, -210, -210, -210, -210, -210, -210, -210, -210, + + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210 + }, + + { + 55, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, 366, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211 + }, + + { + 55, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, 367, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, 363, 363, + 363, 363, 363, 363, 363, 363, 363, 363, -212, -212, + -212, -212, -212, -212, -212, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, 367, 367, 367, 367, 367, 367, 367, 367, 367, + 367, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212 + }, + + { + 55, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, 368, 368, + 368, 368, 368, 368, 368, 368, 368, 368, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213 + }, + + { + 55, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, 369, -214, -214, 370, 371, + 371, 371, 371, 371, 371, 371, 371, 371, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, 372, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214 + }, + + { + 55, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 369, -215, -215, 373, 373, + + 373, 373, 373, 373, 373, 373, 373, 373, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 374, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215 + }, + + { + 55, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, 375, 375, + 375, 375, 375, 375, 375, 375, 375, 375, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216 + }, + + { + 55, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, 369, -217, -217, 376, 376, + 376, 376, 376, 376, 376, 376, 376, 376, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + + -217, -217, -217, -217, -217, 377, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217, -217, -217, + -217, -217, -217, -217, -217, -217, -217, -217 + }, + + { + 55, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, 378, 379, + 379, 379, 379, 379, 379, 379, 379, 379, -218, -218, + + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218, -218, -218, + -218, -218, -218, -218, -218, -218, -218, -218 + }, + + { + 55, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + + -219, -219, 380, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219 + + }, + + { + 55, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, 381, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, 382, 382, + 382, 382, 382, 382, 382, 382, 382, 382, -220, -220, + -220, -220, -220, -220, -220, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, + 381, -220, -220, -220, -220, -220, -220, -220, -220, -220, + + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220, -220, -220, + -220, -220, -220, -220, -220, -220, -220, -220 + }, + + { + 55, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, 383, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221, -221, -221, + -221, -221, -221, -221, -221, -221, -221, -221 + }, + + { + 55, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, 384, -222, -222, -222, -222, -222, -222, -222, + + -222, -222, -222, -222, -222, -222, -222, -222, 385, 385, + 385, 385, 385, 385, 385, 385, 385, 385, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222, -222, -222, + -222, -222, -222, -222, -222, -222, -222, -222 + }, + + { + 55, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, 386, 386, + 386, 386, 386, 386, 386, 386, 386, 386, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + + -223, -223, -223, -223, -223, -223, -223, -223, -223, -223, + -223, -223, -223, -223, -223, -223, -223, -223 + }, + + { + 55, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, 387, 387, + 387, 387, 387, 387, 387, 387, 387, 387, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224, -224, -224, + -224, -224, -224, -224, -224, -224, -224, -224 + }, + + { + 55, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, 388, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225, -225, -225, + -225, -225, -225, -225, -225, -225, -225, -225 + }, + + { + 55, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, 389, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + -226, -226, -226, -226, -226, -226, -226, -226, -226, -226, + + -226, -226, -226, -226, -226, -226, -226, -226 + }, + + { + 55, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, 227, -227, -227, -227, -227, -227, -227, 390, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227, -227, -227, + -227, -227, -227, -227, -227, -227, -227, -227 + }, + + { + 55, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, 228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228, -228, -228, + -228, -228, -228, -228, -228, -228, -228, -228 + }, + + { + 55, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229, -229, -229, + -229, -229, -229, -229, -229, -229, -229, -229 + + }, + + { + 55, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230, -230, -230, + -230, -230, -230, -230, -230, -230, -230, -230 + }, + + { + 55, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, 233, -231, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, 235, 235, + + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + 235, 235, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231, -231, -231, + -231, -231, -231, -231, -231, -231, -231, -231 + }, + + { + 55, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + + -232, -232, -232, -232, -232, -232, -232, -232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, 235, 235, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + 235, 235, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, + -232, -232, -232, -232, -232, -232, -232, -232 + }, + + { + 55, -233, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 391, 391, + 391, 391, 391, 391, 391, 391, 391, 391, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, 235, 235, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + 235, 235, -233, -233, -233, -233, -233, -233, -233, -233, + + -233, -233, -233, -233, -233, -233, -233, -233, -233, -233, + -233, -233, -233, -233, -233, -233, -233, -233 + }, + + { + 55, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, 233, -234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, 235, 235, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + 235, 235, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234, -234, -234, + -234, -234, -234, -234, -234, -234, -234, -234 + }, + + { + 55, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, 392, -235, 392, -235, -235, 393, 393, + + 393, 393, 393, 393, 393, 393, 393, 393, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235, -235, -235, + -235, -235, -235, -235, -235, -235, -235, -235 + }, + + { + 55, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + -236, -236, -236, -236, -236, -236, -236, -236, -236, -236, + + -236, -236, -236, -236, -236, -236, -236, -236 + }, + + { + 55, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, 239, -237, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, 241, 241, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + 241, 241, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237 + }, + + { + 55, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, 238, 238, + 238, 238, 238, 238, 238, 238, 238, 238, -238, -238, + + -238, -238, -238, -238, -238, -238, -238, -238, 241, 241, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + 241, 241, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238, -238, -238, + -238, -238, -238, -238, -238, -238, -238, -238 + }, + + { + 55, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, 241, 241, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + 241, 241, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239, -239, -239, + -239, -239, -239, -239, -239, -239, -239, -239 + + }, + + { + 55, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, 239, -240, 240, 240, + 240, 240, 240, 240, 240, 240, 240, 240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, 241, 241, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + + 241, 241, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240, -240, -240, + -240, -240, -240, -240, -240, -240, -240, -240 + }, + + { + 55, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, 395, -241, 395, -241, -241, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241, -241, -241, + -241, -241, -241, -241, -241, -241, -241, -241 + }, + + { + 55, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 243, + + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, + 242, 242, 242, 242, 242, 242, 242, 242 + }, + + { + 55, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, 242, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + + -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, + -243, -243, -243, -243, -243, -243, -243, -243 + }, + + { + 55, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 245, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244 + }, + + { + 55, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245, -245, -245, + -245, -245, -245, -245, -245, -245, -245, -245 + }, + + { + 55, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, + -246, -246, -246, -246, -246, -246, 246, -246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, -246, -246, + -246, -246, -246, -246, -246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, -246, -246, -246, -246, 246, -246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, + + 246, 246, 246, -246, -246, -246, -246, -246 + }, + + { + 55, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, 247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247, -247, -247, + -247, -247, -247, -247, -247, -247, -247, -247 + }, + + { + 55, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -248, -248, + + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248, -248, -248, + -248, -248, -248, -248, -248, -248, -248, -248 + }, + + { + 55, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, 251, -249, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, 253, 253, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + 253, 253, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, + -249, -249, -249, -249, -249, -249, -249, -249 + + }, + + { + 55, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, 253, 253, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + + 253, 253, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250, -250, -250, + -250, -250, -250, -250, -250, -250, -250, -250 + }, + + { + 55, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, 253, 253, + + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + 253, 253, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251, -251, -251, + -251, -251, -251, -251, -251, -251, -251, -251 + }, + + { + 55, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + + -252, -252, -252, -252, -252, -252, 251, -252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, 253, 253, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + 253, 253, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, + -252, -252, -252, -252, -252, -252, -252, -252 + }, + + { + 55, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, 398, -253, 398, -253, -253, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + + -253, -253, -253, -253, -253, -253, -253, -253, -253, -253, + -253, -253, -253, -253, -253, -253, -253, -253 + }, + + { + 55, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 255, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 256, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 257, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254 + }, + + { + 55, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255, -255, -255, + -255, -255, -255, -255, -255, -255, -255, -255 + }, + + { + 55, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 255, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 256, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 257, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + }, + + { + 55, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259, -259, -259, + -259, -259, -259, -259, -259, -259, -259, -259 + + }, + + { + 55, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 410, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 411, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 412, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + + -263, -263, -263, -263, -263, -263, -263, -263, -263, -263, + -263, -263, -263, -263, -263, -263, -263, -263 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 263, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 264, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 265, 262, 262, + + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262, 262, 262, + 262, 262, 262, 262, 262, 262, 262, 262 + }, + + { + 55, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 267, 266, 266, 266, 266, 266, 266, 266, 266, 266, + + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, + + 266, 266, 266, 266, 266, 266, 266, 266 + }, + + { + 55, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267, -267, -267, + -267, -267, -267, -267, -267, -267, -267, -267 + }, + + { + 55, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 269, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 268, 268 + }, + + { + 55, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269, -269, -269, + -269, -269, -269, -269, -269, -269, -269, -269 + + }, + + { + 55, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 271, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, + 270, 270, 270, 270, 270, 270, 270, 270 + }, + + { + 55, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, + -271, -271, -271, -271, -271, -271, -271, -271 + }, + + { + 55, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, 413, 414, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272, -272, -272, + -272, -272, -272, -272, -272, -272, -272, -272 + }, + + { + 55, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, 415, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + + -273, -273, -273, -273, -273, -273, -273, -273, -273, -273, + -273, -273, -273, -273, -273, -273, -273, -273 + }, + + { + 55, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, 416, -274, -274, + + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, + -274, -274, -274, -274, -274, -274, -274, -274 + }, + + { + 55, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, 417, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275, -275, -275, + -275, -275, -275, -275, -275, -275, -275, -275 + }, + + { + 55, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, 418, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + -276, -276, -276, -276, -276, -276, -276, -276, -276, -276, + + -276, -276, -276, -276, -276, -276, -276, -276 + }, + + { + 55, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, 419, -277, -277, -277, -277, -277, -277, + + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, + -277, -277, -277, -277, -277, -277, -277, -277 + }, + + { + 55, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, 420, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278, -278, -278, + -278, -278, -278, -278, -278, -278, -278, -278 + }, + + { + 55, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, 421, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, + -279, -279, -279, -279, -279, -279, -279, -279 + + }, + + { + 55, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, 422, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, + -280, -280, -280, -280, -280, -280, -280, -280 + }, + + { + 55, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + + -281, -281, -281, -281, -281, -281, -281, -281, -281, 423, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, + -281, -281, -281, -281, -281, -281, -281, -281 + }, + + { + 55, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, 424, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282, -282, -282, + -282, -282, -282, -282, -282, -282, -282, -282 + }, + + { + 55, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, 425, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + + -283, -283, -283, -283, -283, -283, -283, -283, -283, -283, + -283, -283, -283, -283, -283, -283, -283, -283 + }, + + { + 55, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, 426, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284, -284, -284, + -284, -284, -284, -284, -284, -284, -284, -284 + }, + + { + 55, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, 427, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, + -285, -285, -285, -285, -285, -285, -285, -285 + }, + + { + 55, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, 428, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, + + -286, -286, -286, -286, -286, -286, -286, -286 + }, + + { + 55, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, 429, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287, -287, -287, + -287, -287, -287, -287, -287, -287, -287, -287 + }, + + { + 55, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, 430, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, + -288, -288, -288, -288, -288, -288, -288, -288 + }, + + { + 55, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, 431, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, + -289, -289, -289, -289, -289, -289, -289, -289 + + }, + + { + 55, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, 432, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, + -290, -290, -290, -290, -290, -290, -290, -290 + }, + + { + 55, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, 433, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291, -291, -291, + -291, -291, -291, -291, -291, -291, -291, -291 + }, + + { + 55, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, 434, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292, -292, -292, + -292, -292, -292, -292, -292, -292, -292, -292 + }, + + { + 55, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, 435, -293, + -293, -293, -293, -293, 436, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + + -293, -293, -293, -293, -293, -293, -293, -293, -293, -293, + -293, -293, -293, -293, -293, -293, -293, -293 + }, + + { + 55, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + + -294, -294, -294, -294, 437, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, + -294, -294, -294, -294, -294, -294, -294, -294 + }, + + { + 55, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, 438, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295, -295, -295, + -295, -295, -295, -295, -295, -295, -295, -295 + }, + + { + 55, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, 439, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, + + -296, -296, -296, -296, -296, -296, -296, -296 + }, + + { + 55, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, 440, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297, -297, -297, + -297, -297, -297, -297, -297, -297, -297, -297 + }, + + { + 55, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + 441, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, + -298, -298, -298, -298, -298, -298, -298, -298 + }, + + { + 55, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, 442, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299, -299, -299, + -299, -299, -299, -299, -299, -299, -299, -299 + + }, + + { + 55, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, 443, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300, -300, -300, + -300, -300, -300, -300, -300, -300, -300, -300 + }, + + { + 55, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, 444, -301, -301, -301, -301, + + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, + -301, -301, -301, -301, -301, -301, -301, -301 + }, + + { + 55, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, 445, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302, -302, -302, + -302, -302, -302, -302, -302, -302, -302, -302 + }, + + { + 55, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, 446, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + + -303, -303, -303, -303, -303, -303, -303, -303, -303, -303, + -303, -303, -303, -303, -303, -303, -303, -303 + }, + + { + 55, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + + -304, -304, 447, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, + -304, -304, -304, -304, -304, -304, -304, -304 + }, + + { + 55, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, 448, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305, -305, -305, + -305, -305, -305, -305, -305, -305, -305, -305 + }, + + { + 55, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, 449, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + -306, -306, -306, -306, -306, -306, -306, -306, -306, -306, + + -306, -306, -306, -306, -306, -306, -306, -306 + }, + + { + 55, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, 450, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307, -307, -307, + -307, -307, -307, -307, -307, -307, -307, -307 + }, + + { + 55, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, 451, -308, + -308, -308, -308, -308, 452, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308, -308, -308, + -308, -308, -308, -308, -308, -308, -308, -308 + }, + + { + 55, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, 453, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309 + + }, + + { + 55, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, 454, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310, -310, -310, + -310, -310, -310, -310, -310, -310, -310, -310 + }, + + { + 55, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + + -311, -311, -311, -311, -311, -311, -311, -311, -311, 455, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311, -311, -311, + -311, -311, -311, -311, -311, -311, -311, -311 + }, + + { + 55, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + 456, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312, -312, -312, + -312, -312, -312, -312, -312, -312, -312, -312 + }, + + { + 55, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + 457, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + + -313, -313, -313, -313, -313, -313, -313, -313, -313, -313, + -313, -313, -313, -313, -313, -313, -313, -313 + }, + + { + 55, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, 458, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + + -314, -314, 459, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, + -314, -314, -314, -314, -314, -314, -314, -314 + }, + + { + 55, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, 460, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315, -315, -315, + -315, -315, -315, -315, -315, -315, -315, -315 + }, + + { + 55, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, 461, -316, -316, -316, -316, -316, -316, -316, 462, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + -316, -316, -316, -316, -316, -316, -316, -316, -316, -316, + + -316, -316, -316, -316, -316, -316, -316, -316 + }, + + { + 55, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, 463, -317, -317, -317, -317, -317, + + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317, -317, -317, + -317, -317, -317, -317, -317, -317, -317, -317 + }, + + { + 55, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + 464, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318, -318, -318, + -318, -318, -318, -318, -318, -318, -318, -318 + }, + + { + 55, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, 465, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, 466, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319, -319, -319, + -319, -319, -319, -319, -319, -319, -319, -319 + + }, + + { + 55, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, 467, -320, -320, 468, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, + -320, -320, -320, -320, -320, -320, -320, -320 + }, + + { + 55, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + + -321, -321, -321, -321, 469, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, + -321, -321, -321, -321, -321, -321, -321, -321 + }, + + { + 55, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, 470, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, + -322, -322, -322, -322, -322, -322, -322, -322 + }, + + { + 55, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, 471, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + + -323, -323, -323, -323, -323, -323, -323, -323, -323, -323, + -323, -323, -323, -323, -323, -323, -323, -323 + }, + + { + 55, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, 472, -324, + + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324, -324, -324, + -324, -324, -324, -324, -324, -324, -324, -324 + }, + + { + 55, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, 473, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325, -325, -325, + -325, -325, -325, -325, -325, -325, -325, -325 + }, + + { + 55, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, 474, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + -326, -326, -326, -326, -326, -326, -326, -326, -326, -326, + + -326, -326, -326, -326, -326, -326, -326, -326 + }, + + { + 55, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, 475, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327, -327, -327, + -327, -327, -327, -327, -327, -327, -327, -327 + }, + + { + 55, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + + -328, -328, -328, -328, -328, -328, -328, -328, -328, 476, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, 477, 478, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328, -328, -328, + -328, -328, -328, -328, -328, -328, -328, -328 + }, + + { + 55, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + 479, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329, -329, -329, + -329, -329, -329, -329, -329, -329, -329, -329 + + }, + + { + 55, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, 480, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, 481, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330, -330, -330, + -330, -330, -330, -330, -330, -330, -330, -330 + }, + + { + 55, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, 482, -331, -331, -331, -331, + + -331, -331, -331, -331, -331, -331, -331, -331, -331, 483, + -331, -331, 484, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331, -331, -331, + -331, -331, -331, -331, -331, -331, -331, -331 + }, + + { + 55, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, 485, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332, -332, -332, + -332, -332, -332, -332, -332, -332, -332, -332 + }, + + { + 55, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, 486, + 486, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + + -333, -333, -333, -333, -333, -333, -333, -333, -333, -333, + -333, -333, -333, -333, -333, -333, -333, -333 + }, + + { + 55, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, 487, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, 488, -334, + + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334, -334, -334, + -334, -334, -334, -334, -334, -334, -334, -334 + }, + + { + 55, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, 489, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335, -335, -335, + -335, -335, -335, -335, -335, -335, -335, -335 + }, + + { + 55, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, 490, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + -336, -336, -336, -336, -336, -336, -336, -336, -336, -336, + + -336, -336, -336, -336, -336, -336, -336, -336 + }, + + { + 55, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, 491, -337, + + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337, -337, -337, + -337, -337, -337, -337, -337, -337, -337, -337 + }, + + { + 55, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, 492, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338, -338, -338, + -338, -338, -338, -338, -338, -338, -338, -338 + }, + + { + 55, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + + -339, -339, 493, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339, -339, -339, + -339, -339, -339, -339, -339, -339, -339, -339 + + }, + + { + 55, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, 494, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340, -340, -340, + -340, -340, -340, -340, -340, -340, -340, -340 + }, + + { + 55, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, 495, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, 496, 497, + 497, 497, 497, 497, 497, 497, 497, 497, -341, -341, + -341, -341, -341, -341, -341, 495, 495, 495, 495, 495, + + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341, -341, -341, + -341, -341, -341, -341, -341, -341, -341, -341 + }, + + { + 55, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, 498, -342, -342, -342, -342, -342, -342, -342, + + -342, -342, -342, -342, -342, -342, -342, -342, 496, 497, + 497, 497, 497, 497, 497, 497, 497, 497, -342, -342, + -342, -342, -342, -342, -342, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342, -342, -342, + -342, -342, -342, -342, -342, -342, -342, -342 + }, + + { + 55, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, 499, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + + -343, -343, -343, -343, -343, -343, -343, -343, -343, -343, + -343, -343, -343, -343, -343, -343, -343, -343 + }, + + { + 55, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, 500, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344, -344, -344, + -344, -344, -344, -344, -344, -344, -344, -344 + }, + + { + 55, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, 501, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345, -345, -345, + -345, -345, -345, -345, -345, -345, -345, -345 + }, + + { + 55, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, 495, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 502, -346, -346, + -346, -346, -346, -346, -346, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + -346, -346, -346, -346, -346, -346, -346, -346, -346, -346, + + -346, -346, -346, -346, -346, -346, -346, -346 + }, + + { + 55, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, 503, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, -347, -347, + -347, -347, -347, -347, -347, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + + 503, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347, -347, -347, + -347, -347, -347, -347, -347, -347, -347, -347 + }, + + { + 55, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, 505, 505, + 505, 505, 505, 505, 505, 505, 505, 505, -348, -348, + + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348, -348, -348, + -348, -348, -348, -348, -348, -348, -348, -348 + }, + + { + 55, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, 506, -349, -349, 507, 508, + 508, 508, 508, 508, 508, 508, 508, 508, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, 509, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349, -349, -349, + -349, -349, -349, -349, -349, -349, -349, -349 + + }, + + { + 55, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, 506, -350, -350, 510, 510, + 510, 510, 510, 510, 510, 510, 510, 510, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, 511, -350, -350, -350, -350, + + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350, -350, -350, + -350, -350, -350, -350, -350, -350, -350, -350 + }, + + { + 55, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, 512, 512, + 512, 512, 512, 512, 512, 512, 512, 512, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351, -351, -351, + -351, -351, -351, -351, -351, -351, -351, -351 + }, + + { + 55, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + + -352, -352, -352, -352, -352, 506, -352, -352, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, 513, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352, -352, -352, + -352, -352, -352, -352, -352, -352, -352, -352 + }, + + { + 55, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, 506, -353, -353, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, 513, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + + -353, -353, -353, -353, -353, -353, -353, -353, -353, -353, + -353, -353, -353, -353, -353, -353, -353, -353 + }, + + { + 55, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, 515, 516, + 516, 516, 516, 516, 516, 516, 516, 516, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354, -354, -354, + -354, -354, -354, -354, -354, -354, -354, -354 + }, + + { + 55, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, 517, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, 518, 518, + + 518, 518, 518, 518, 518, 518, 518, 518, -355, -355, + -355, -355, -355, -355, -355, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355, -355, -355, + -355, -355, -355, -355, -355, -355, -355, -355 + }, + + { + 55, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, 506, -356, -356, 507, 507, + 507, 507, 507, 507, 507, 507, 507, 507, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, 509, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + -356, -356, -356, -356, -356, -356, -356, -356, -356, -356, + + -356, -356, -356, -356, -356, -356, -356, -356 + }, + + { + 55, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, 506, -357, -357, 514, 514, + 514, 514, 514, 514, 514, 514, 514, 514, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + + -357, -357, -357, -357, -357, 509, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357, -357, -357, + -357, -357, -357, -357, -357, -357, -357, -357 + }, + + { + 55, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, 519, 520, + 520, 520, 520, 520, 520, 520, 520, 520, -358, -358, + + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358, -358, -358, + -358, -358, -358, -358, -358, -358, -358, -358 + }, + + { + 55, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + + -359, -359, 517, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, 521, 522, + 522, 522, 522, 522, 522, 522, 522, 522, -359, -359, + -359, -359, -359, -359, -359, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359, -359, -359, + -359, -359, -359, -359, -359, -359, -359, -359 + + }, + + { + 55, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, 523, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, 524, 524, + 524, 524, 524, 524, 524, 524, 524, 524, -360, -360, + -360, -360, -360, -360, -360, 523, 523, 523, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, + 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, + 523, -360, -360, -360, -360, -360, -360, -360, -360, -360, + + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360, -360, -360, + -360, -360, -360, -360, -360, -360, -360, -360 + }, + + { + 55, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361, -361, -361, + -361, -361, -361, -361, -361, -361, -361, -361 + }, + + { + 55, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362, -362, -362, + -362, -362, -362, -362, -362, -362, -362, -362 + }, + + { + 55, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + + -363, -363, -363, -363, -363, -363, -363, -363, -363, -363, + -363, -363, -363, -363, -363, -363, -363, -363 + }, + + { + 55, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364, -364, -364, + -364, -364, -364, -364, -364, -364, -364, -364 + }, + + { + 55, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365, -365, -365, + -365, -365, -365, -365, -365, -365, -365, -365 + }, + + { + 55, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + -366, -366, -366, -366, -366, -366, -366, -366, -366, -366, + + -366, -366, -366, -366, -366, -366, -366, -366 + }, + + { + 55, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367, -367, -367, + -367, -367, -367, -367, -367, -367, -367, -367 + }, + + { + 55, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, 525, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, -368, -368, + + -368, -368, -368, -368, -368, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368, -368, -368, + -368, -368, -368, -368, -368, -368, -368, -368 + }, + + { + 55, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, 527, 527, + 527, 527, 527, 527, 527, 527, 527, 527, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, -369 + + }, + + { + 55, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, 528, -370, -370, 529, 530, + 530, 530, 530, 530, 530, 530, 530, 530, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, 531, -370, -370, -370, -370, + + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370, -370, -370, + -370, -370, -370, -370, -370, -370, -370, -370 + }, + + { + 55, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, 528, -371, -371, 532, 532, + 532, 532, 532, 532, 532, 532, 532, 532, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, 533, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371, -371, -371, + -371, -371, -371, -371, -371, -371, -371, -371 + }, + + { + 55, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + + -372, -372, -372, -372, -372, -372, -372, -372, 534, 534, + 534, 534, 534, 534, 534, 534, 534, 534, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372, -372, -372, + -372, -372, -372, -372, -372, -372, -372, -372 + }, + + { + 55, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, 528, -373, -373, 529, 529, + 529, 529, 529, 529, 529, 529, 529, 529, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, 535, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + + -373, -373, -373, -373, -373, -373, -373, -373, -373, -373, + -373, -373, -373, -373, -373, -373, -373, -373 + }, + + { + 55, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, 536, 537, + 537, 537, 537, 537, 537, 537, 537, 537, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374, -374, -374, + -374, -374, -374, -374, -374, -374, -374, -374 + }, + + { + 55, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, 538, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, 539, 539, + + 539, 539, 539, 539, 539, 539, 539, 539, -375, -375, + -375, -375, -375, -375, -375, 538, 538, 538, 538, 538, + 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, + 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, + 538, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375, -375, -375, + -375, -375, -375, -375, -375, -375, -375, -375 + }, + + { + 55, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, 528, -376, -376, 529, 529, + 529, 529, 529, 529, 529, 529, 529, 529, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, 531, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + -376, -376, -376, -376, -376, -376, -376, -376, -376, -376, + + -376, -376, -376, -376, -376, -376, -376, -376 + }, + + { + 55, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, 540, 541, + 541, 541, 541, 541, 541, 541, 541, 541, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377, -377, -377, + -377, -377, -377, -377, -377, -377, -377, -377 + }, + + { + 55, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, 542, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, 543, 544, + 544, 544, 544, 544, 544, 544, 544, 544, -378, -378, + + -378, -378, -378, -378, -378, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378, -378, -378, + -378, -378, -378, -378, -378, -378, -378, -378 + }, + + { + 55, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + + -379, -379, 542, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, 545, 545, + 545, 545, 545, 545, 545, 545, 545, 545, -379, -379, + -379, -379, -379, -379, -379, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, + 542, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379, -379, -379, + -379, -379, -379, -379, -379, -379, -379, -379 + + }, + + { + 55, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380, -380, -380, + -380, -380, -380, -380, -380, -380, -380, -380 + }, + + { + 55, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381, -381, -381, + -381, -381, -381, -381, -381, -381, -381, -381 + }, + + { + 55, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382, -382, -382, + -382, -382, -382, -382, -382, -382, -382, -382 + }, + + { + 55, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + + -383, -383, -383, -383, -383, -383, -383, -383, -383, -383, + -383, -383, -383, -383, -383, -383, -383, -383 + }, + + { + 55, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384, -384, -384, + -384, -384, -384, -384, -384, -384, -384, -384 + }, + + { + 55, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385, -385, -385, + -385, -385, -385, -385, -385, -385, -385, -385 + }, + + { + 55, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, 546, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + -386, -386, -386, -386, -386, -386, -386, -386, -386, -386, + + -386, -386, -386, -386, -386, -386, -386, -386 + }, + + { + 55, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, 547, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387, -387, -387, + -387, -387, -387, -387, -387, -387, -387, -387 + }, + + { + 55, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, 548, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388, -388, -388, + -388, -388, -388, -388, -388, -388, -388, -388 + }, + + { + 55, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + + -389, -389, 549, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389, -389, -389, + -389, -389, -389, -389, -389, -389, -389, -389 + + }, + + { + 55, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 551, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550 + }, + + { + 55, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, 391, 391, + 391, 391, 391, 391, 391, 391, 391, 391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, 235, 235, + + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + 235, 235, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391, -391, -391, + -391, -391, -391, -391, -391, -391, -391, -391 + }, + + { + 55, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + + -392, -392, -392, -392, -392, -392, -392, -392, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392, -392, -392, + -392, -392, -392, -392, -392, -392, -392, -392 + }, + + { + 55, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, 393, 393, + 393, 393, 393, 393, 393, 393, 393, 393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + + -393, -393, -393, -393, -393, -393, -393, -393, -393, -393, + -393, -393, -393, -393, -393, -393, -393, -393 + }, + + { + 55, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, 394, 394, + 394, 394, 394, 394, 394, 394, 394, 394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, 241, 241, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + 241, 241, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394, -394, -394, + -394, -394, -394, -394, -394, -394, -394, -394 + }, + + { + 55, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, 396, 396, + + 396, 396, 396, 396, 396, 396, 396, 396, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395, -395, -395, + -395, -395, -395, -395, -395, -395, -395, -395 + }, + + { + 55, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, 396, 396, + 396, 396, 396, 396, 396, 396, 396, 396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, + + -396, -396, -396, -396, -396, -396, -396, -396 + }, + + { + 55, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, 397, 397, + 397, 397, 397, 397, 397, 397, 397, 397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, 253, 253, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + 253, 253, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397, -397, -397, + -397, -397, -397, -397, -397, -397, -397, -397 + }, + + { + 55, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -398, -398, + + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, + -398, -398, -398, -398, -398, -398, -398, -398 + }, + + { + 55, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, 399, 399, + 399, 399, 399, 399, 399, 399, 399, 399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399, -399, -399, + -399, -399, -399, -399, -399, -399, -399, -399 + + }, + + { + 55, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 552, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 553, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 554, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402, -402, -402, + -402, -402, -402, -402, -402, -402, -402, -402 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 402, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 403, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 404, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401, 401, 401, + 401, 401, 401, 401, 401, 401, 401, 401 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + }, + + { + 55, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + -406, -406, -406, -406, -406, -406, -406, -406, -406, -406, + + -406, -406, -406, -406, -406, -406, -406, -406 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 406, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + + 405, 405, 407, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 408, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, + 405, 405, 405, 405, 405, 405, 405, 405 + + }, + + { + 55, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410, -410, -410, + -410, -410, -410, -410, -410, -410, -410, -410 + }, + + { + 55, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 410, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 411, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 412, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, + 409, 409, 409, 409, 409, 409, 409, 409 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + }, + + { + 55, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + + -413, -413, -413, -413, -413, -413, -413, -413, -413, -413, + -413, -413, -413, -413, -413, -413, -413, -413 + }, + + { + 55, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, + -414, -414, -414, -414, -414, -414, -414, -414 + }, + + { + 55, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, 563, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415, -415, -415, + -415, -415, -415, -415, -415, -415, -415, -415 + }, + + { + 55, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, 564, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + -416, -416, -416, -416, -416, -416, -416, -416, -416, -416, + + -416, -416, -416, -416, -416, -416, -416, -416 + }, + + { + 55, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, 565, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417, -417, -417, + -417, -417, -417, -417, -417, -417, -417, -417 + }, + + { + 55, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + + -418, -418, -418, -418, -418, -418, -418, -418, 566, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418, -418, -418, + -418, -418, -418, -418, -418, -418, -418, -418 + }, + + { + 55, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, 567, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419, -419, -419, + -419, -419, -419, -419, -419, -419, -419, -419 + + }, + + { + 55, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, 568, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420, -420, -420, + -420, -420, -420, -420, -420, -420, -420, -420 + }, + + { + 55, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, 569, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421, -421, -421, + -421, -421, -421, -421, -421, -421, -421, -421 + }, + + { + 55, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, 570, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, + -422, -422, -422, -422, -422, -422, -422, -422 + }, + + { + 55, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, 571, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + + -423, -423, -423, -423, -423, -423, -423, -423, -423, -423, + -423, -423, -423, -423, -423, -423, -423, -423 + }, + + { + 55, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, 572, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424, -424, -424, + -424, -424, -424, -424, -424, -424, -424, -424 + }, + + { + 55, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, 573, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425, -425, -425, + -425, -425, -425, -425, -425, -425, -425, -425 + }, + + { + 55, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, 574, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + -426, -426, -426, -426, -426, -426, -426, -426, -426, -426, + + -426, -426, -426, -426, -426, -426, -426, -426 + }, + + { + 55, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, 575, -427, -427, -427, -427, -427, + + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427, -427, -427, + -427, -427, -427, -427, -427, -427, -427, -427 + }, + + { + 55, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + + -428, -428, -428, -428, -428, -428, -428, -428, -428, 576, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428, -428, -428, + -428, -428, -428, -428, -428, -428, -428, -428 + }, + + { + 55, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, 577, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429, -429, -429, + -429, -429, -429, -429, -429, -429, -429, -429 + + }, + + { + 55, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, 578, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430, -430, -430, + -430, -430, -430, -430, -430, -430, -430, -430 + }, + + { + 55, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + + -431, -431, -431, 579, -431, -431, -431, -431, -431, -431, + -431, -431, 580, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431, -431, -431, + -431, -431, -431, -431, -431, -431, -431, -431 + }, + + { + 55, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, 581, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, + -432, -432, -432, -432, -432, -432, -432, -432 + }, + + { + 55, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, 582, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + + -433, -433, -433, -433, -433, -433, -433, -433, -433, -433, + -433, -433, -433, -433, -433, -433, -433, -433 + }, + + { + 55, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + + -434, -434, 583, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434, -434, -434, + -434, -434, -434, -434, -434, -434, -434, -434 + }, + + { + 55, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, 584, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435, -435, -435, + -435, -435, -435, -435, -435, -435, -435, -435 + }, + + { + 55, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, 585, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + -436, -436, -436, -436, -436, -436, -436, -436, -436, -436, + + -436, -436, -436, -436, -436, -436, -436, -436 + }, + + { + 55, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, 586, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437, -437, -437, + -437, -437, -437, -437, -437, -437, -437, -437 + }, + + { + 55, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, 587, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438, -438, -438, + -438, -438, -438, -438, -438, -438, -438, -438 + }, + + { + 55, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, 588, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439, -439, -439, + -439, -439, -439, -439, -439, -439, -439, -439 + + }, + + { + 55, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, 589, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440, -440, -440, + -440, -440, -440, -440, -440, -440, -440, -440 + }, + + { + 55, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, 590, + + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441, -441, -441, + -441, -441, -441, -441, -441, -441, -441, -441 + }, + + { + 55, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, 591, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442, -442, -442, + -442, -442, -442, -442, -442, -442, -442, -442 + }, + + { + 55, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, 592, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + + -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, + -443, -443, -443, -443, -443, -443, -443, -443 + }, + + { + 55, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, 593, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444, -444, -444, + -444, -444, -444, -444, -444, -444, -444, -444 + }, + + { + 55, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, 594, -445, -445, -445, -445, + + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, 595, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445, -445, -445, + -445, -445, -445, -445, -445, -445, -445, -445 + }, + + { + 55, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, 596, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + -446, -446, -446, -446, -446, -446, -446, -446, -446, -446, + + -446, -446, -446, -446, -446, -446, -446, -446 + }, + + { + 55, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, 597, -447, -447, -447, -447, -447, -447, -447, + + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447, -447, -447, + -447, -447, -447, -447, -447, -447, -447, -447 + }, + + { + 55, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, 598, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448, -448, -448, + -448, -448, -448, -448, -448, -448, -448, -448 + }, + + { + 55, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, 599, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449, -449, -449, + -449, -449, -449, -449, -449, -449, -449, -449 + + }, + + { + 55, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, 600, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450, -450, -450, + -450, -450, -450, -450, -450, -450, -450, -450 + }, + + { + 55, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, 601, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451, -451, -451, + -451, -451, -451, -451, -451, -451, -451, -451 + }, + + { + 55, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, 602, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452 + }, + + { + 55, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, 603, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + + -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -453, -453 + }, + + { + 55, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + 604, -454, -454, -454, -454, -454, -454, -454, -454, -454, + + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454, -454, -454, + -454, -454, -454, -454, -454, -454, -454, -454 + }, + + { + 55, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, 605, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, + -455, -455, -455, -455, -455, -455, -455, -455 + }, + + { + 55, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, 606, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, + + -456, -456, -456, -456, -456, -456, -456, -456 + }, + + { + 55, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, 607, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, + -457, -457, -457, -457, -457, -457, -457, -457 + }, + + { + 55, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + + -458, -458, -458, -458, -458, 608, 609, -458, -458, 610, + -458, -458, -458, -458, -458, -458, -458, -458, -458, 611, + -458, -458, 612, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, + -458, -458, -458, -458, -458, -458, -458, -458 + }, + + { + 55, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, 613, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459, -459, -459, + -459, -459, -459, -459, -459, -459, -459, -459 + + }, + + { + 55, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, 614, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, + -460, -460, -460, -460, -460, -460, -460, -460 + }, + + { + 55, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, 615, + + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461, -461, -461, + -461, -461, -461, -461, -461, -461, -461, -461 + }, + + { + 55, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, 616, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462, -462, -462, + -462, -462, -462, -462, -462, -462, -462, -462 + }, + + { + 55, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, 617, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + + -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, + -463, -463, -463, -463, -463, -463, -463, -463 + }, + + { + 55, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, 618, -464, -464, -464, -464, -464, -464, -464, + + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464, -464, -464, + -464, -464, -464, -464, -464, -464, -464, -464 + }, + + { + 55, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, 619, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465, -465, -465, + -465, -465, -465, -465, -465, -465, -465, -465 + }, + + { + 55, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, 620, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + -466, -466, -466, -466, -466, -466, -466, -466, -466, -466, + + -466, -466, -466, -466, -466, -466, -466, -466 + }, + + { + 55, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, 621, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467, -467, -467, + -467, -467, -467, -467, -467, -467, -467, -467 + }, + + { + 55, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, 622, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468, -468, -468, + -468, -468, -468, -468, -468, -468, -468, -468 + }, + + { + 55, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + 623, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469, -469, -469, + -469, -469, -469, -469, -469, -469, -469, -469 + + }, + + { + 55, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, 624, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, 625, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470, -470, -470, + -470, -470, -470, -470, -470, -470, -470, -470 + }, + + { + 55, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + + 626, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, 627, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471, -471, -471, + -471, -471, -471, -471, -471, -471, -471, -471 + }, + + { + 55, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, 628, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472, -472, -472, + -472, -472, -472, -472, -472, -472, -472, -472 + }, + + { + 55, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, 629, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + + -473, -473, -473, -473, -473, -473, -473, -473, -473, -473, + -473, -473, -473, -473, -473, -473, -473, -473 + }, + + { + 55, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, 630, + + -474, -474, -474, 631, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474, -474, -474, + -474, -474, -474, -474, -474, -474, -474, -474 + }, + + { + 55, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + 632, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475, -475, -475, + -475, -475, -475, -475, -475, -475, -475, -475 + }, + + { + 55, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, 633, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, 634, + 635, -476, -476, 636, -476, 637, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, + + -476, -476, -476, -476, -476, -476, -476, -476 + }, + + { + 55, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, 638, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477, -477, -477, + -477, -477, -477, -477, -477, -477, -477, -477 + }, + + { + 55, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, 639, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478, -478, -478, + -478, -478, -478, -478, -478, -478, -478, -478 + }, + + { + 55, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, 640, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + 641, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479 + + }, + + { + 55, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, 642, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, + -480, -480, -480, -480, -480, -480, -480, -480 + }, + + { + 55, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + 643, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, + -481, -481, -481, -481, -481, -481, -481, -481 + }, + + { + 55, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, 644, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, + -482, -482, -482, -482, -482, -482, -482, -482 + }, + + { + 55, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, 645, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + + -483, -483, -483, -483, -483, -483, -483, -483, -483, -483, + -483, -483, -483, -483, -483, -483, -483, -483 + }, + + { + 55, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, 646, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484, -484, -484, + -484, -484, -484, -484, -484, -484, -484, -484 + }, + + { + 55, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, 647, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, + -485, -485, -485, -485, -485, -485, -485, -485 + }, + + { + 55, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, 648, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, + + -486, -486, -486, -486, -486, -486, -486, -486 + }, + + { + 55, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, 649, -487, + + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487, -487, -487, + -487, -487, -487, -487, -487, -487, -487, -487 + }, + + { + 55, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + + -488, -488, -488, -488, -488, 650, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, + -488, -488, -488, -488, -488, -488, -488, -488 + }, + + { + 55, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, 651, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, + -489, -489, -489, -489, -489, -489, -489, -489 + + }, + + { + 55, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, 652, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490, -490, -490, + -490, -490, -490, -490, -490, -490, -490, -490 + }, + + { + 55, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, 653, + + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491, -491, -491, + -491, -491, -491, -491, -491, -491, -491, -491 + }, + + { + 55, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, 654, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, + -492, -492, -492, -492, -492, -492, -492, -492 + }, + + { + 55, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, 655, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + + -493, -493, -493, -493, -493, -493, -493, -493, -493, -493, + -493, -493, -493, -493, -493, -493, -493, -493 + }, + + { + 55, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, 656, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494, -494, -494, + -494, -494, -494, -494, -494, -494, -494, -494 + }, + + { + 55, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, 657, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495, -495, -495, + -495, -495, -495, -495, -495, -495, -495, -495 + }, + + { + 55, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, 658, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, 659, 660, + 660, 660, 660, 660, 660, 660, 660, 660, -496, -496, + -496, -496, -496, -496, -496, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + -496, -496, -496, -496, -496, -496, -496, -496, -496, -496, + + -496, -496, -496, -496, -496, -496, -496, -496 + }, + + { + 55, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, 661, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, 659, 660, + 660, 660, 660, 660, 660, 660, 660, 660, -497, -497, + -497, -497, -497, -497, -497, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + 661, 661, 661, 661, 661, 661, 661, 661, 661, 661, + + 661, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497, -497, -497, + -497, -497, -497, -497, -497, -497, -497, -497 + }, + + { + 55, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, 662, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498 + }, + + { + 55, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + + -499, -499, 663, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, + -499, -499, -499, -499, -499, -499, -499, -499 + + }, + + { + 55, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, 664, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500, -500, -500, + -500, -500, -500, -500, -500, -500, -500, -500 + }, + + { + 55, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, 665, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501, -501, -501, + -501, -501, -501, -501, -501, -501, -501, -501 + }, + + { + 55, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, 658, -502, -502, -502, -502, -502, -502, -502, + + -502, -502, -502, -502, -502, -502, -502, -502, 666, 666, + 666, 666, 666, 666, 666, 666, 666, 666, -502, -502, + -502, -502, -502, -502, -502, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, 658, 658, 658, 658, 658, 658, 658, 658, 658, + 658, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502, -502, -502, + -502, -502, -502, -502, -502, -502, -502, -502 + }, + + { + 55, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, 667, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + + -503, -503, -503, -503, -503, -503, -503, -503, -503, -503, + -503, -503, -503, -503, -503, -503, -503, -503 + }, + + { + 55, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, 668, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, 669, 669, + 669, 669, 669, 669, 669, 669, 669, 669, -504, -504, + -504, -504, -504, -504, -504, 668, 668, 668, 668, 668, + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + + 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, + 668, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504, -504, -504, + -504, -504, -504, -504, -504, -504, -504, -504 + }, + + { + 55, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, 670, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, 671, 671, + + 671, 671, 671, 671, 671, 671, 671, 671, -505, -505, + -505, -505, -505, -505, -505, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, + 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, + 670, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, + -505, -505, -505, -505, -505, -505, -505, -505 + }, + + { + 55, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, 672, 672, + 672, 672, 672, 672, 672, 672, 672, 672, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + -506, -506, -506, -506, -506, -506, -506, -506, -506, -506, + + -506, -506, -506, -506, -506, -506, -506, -506 + }, + + { + 55, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, 673, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + + -507, -507, -507, -507, -507, 674, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507, -507, -507, + -507, -507, -507, -507, -507, -507, -507, -507 + }, + + { + 55, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, 673, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, 675, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, + -508, -508, -508, -508, -508, -508, -508, -508 + }, + + { + 55, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, 676, 676, + 676, 676, 676, 676, 676, 676, 676, 676, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509, -509, -509, + -509, -509, -509, -509, -509, -509, -509, -509 + + }, + + { + 55, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, 673, -510, -510, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, 678, -510, -510, -510, -510, + + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510, -510, -510, + -510, -510, -510, -510, -510, -510, -510, -510 + }, + + { + 55, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, 679, 680, + 680, 680, 680, 680, 680, 680, 680, 680, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511, -511, -511, + -511, -511, -511, -511, -511, -511, -511, -511 + }, + + { + 55, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, 681, -512, -512, -512, -512, -512, -512, -512, + + -512, -512, -512, -512, -512, -512, -512, -512, 682, 682, + 682, 682, 682, 682, 682, 682, 682, 682, -512, -512, + -512, -512, -512, -512, -512, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512, -512, -512, + -512, -512, -512, -512, -512, -512, -512, -512 + }, + + { + 55, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, 683, 684, + 684, 684, 684, 684, 684, 684, 684, 684, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + + -513, -513, -513, -513, -513, -513, -513, -513, -513, -513, + -513, -513, -513, -513, -513, -513, -513, -513 + }, + + { + 55, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, 673, -514, -514, 677, 677, + 677, 677, 677, 677, 677, 677, 677, 677, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, 674, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514, -514, -514, + -514, -514, -514, -514, -514, -514, -514, -514 + }, + + { + 55, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, 681, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, 685, 686, + + 686, 686, 686, 686, 686, 686, 686, 686, -515, -515, + -515, -515, -515, -515, -515, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515, -515, -515, + -515, -515, -515, -515, -515, -515, -515, -515 + }, + + { + 55, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, 687, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, 688, 688, + 688, 688, 688, 688, 688, 688, 688, 688, -516, -516, + -516, -516, -516, -516, -516, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, + 687, 687, 687, 687, 687, 687, 687, 687, 687, 687, + 687, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + -516, -516, -516, -516, -516, -516, -516, -516, -516, -516, + + -516, -516, -516, -516, -516, -516, -516, -516 + }, + + { + 55, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, 689, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517, -517, -517, + -517, -517, -517, -517, -517, -517, -517, -517 + }, + + { + 55, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, 690, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, 691, 691, + 691, 691, 691, 691, 691, 691, 691, 691, -518, -518, + + -518, -518, -518, -518, -518, 690, 690, 690, 690, 690, + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518, -518, -518, + -518, -518, -518, -518, -518, -518, -518, -518 + }, + + { + 55, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + + -519, -519, 681, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, 692, 693, + 693, 693, 693, 693, 693, 693, 693, 693, -519, -519, + -519, -519, -519, -519, -519, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, 681, 681, 681, 681, 681, 681, 681, 681, 681, + 681, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519, -519, -519, + -519, -519, -519, -519, -519, -519, -519, -519 + + }, + + { + 55, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, 694, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, 695, 695, + 695, 695, 695, 695, 695, 695, 695, 695, -520, -520, + -520, -520, -520, -520, -520, 694, 694, 694, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, + 694, -520, -520, -520, -520, -520, -520, -520, -520, -520, + + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520, -520, -520, + -520, -520, -520, -520, -520, -520, -520, -520 + }, + + { + 55, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, 690, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, 696, 697, + 697, 697, 697, 697, 697, 697, 697, 697, -521, -521, + -521, -521, -521, -521, -521, 690, 690, 690, 690, 690, + + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, + 690, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, + -521, -521, -521, -521, -521, -521, -521, -521 + }, + + { + 55, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, 698, -522, -522, -522, -522, -522, -522, -522, + + -522, -522, -522, -522, -522, -522, -522, -522, 699, 699, + 699, 699, 699, 699, 699, 699, 699, 699, -522, -522, + -522, -522, -522, -522, -522, 698, 698, 698, 698, 698, + 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 698, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522, -522, -522, + -522, -522, -522, -522, -522, -522, -522, -522 + }, + + { + 55, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, 700, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + + -523, -523, -523, -523, -523, -523, -523, -523, -523, -523, + -523, -523, -523, -523, -523, -523, -523, -523 + }, + + { + 55, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, 701, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, 691, 691, + 691, 691, 691, 691, 691, 691, 691, 691, -524, -524, + -524, -524, -524, -524, -524, 701, 701, 701, 701, 701, + 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, + + 701, 701, 701, 701, 701, 701, 701, 701, 701, 701, + 701, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524, -524, -524, + -524, -524, -524, -524, -524, -524, -524, -524 + }, + + { + 55, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, 702, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525, -525, -525, + -525, -525, -525, -525, -525, -525, -525, -525 + }, + + { + 55, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, 703, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, 704, 704, + 704, 704, 704, 704, 704, 704, 704, 704, -526, -526, + -526, -526, -526, -526, -526, 703, 703, 703, 703, 703, + 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, + 703, 703, 703, 703, 703, 703, 703, 703, 703, 703, + 703, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + -526, -526, -526, -526, -526, -526, -526, -526, -526, -526, + + -526, -526, -526, -526, -526, -526, -526, -526 + }, + + { + 55, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, 705, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, 706, 706, + 706, 706, 706, 706, 706, 706, 706, 706, -527, -527, + -527, -527, -527, -527, -527, 705, 705, 705, 705, 705, + 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, + 705, 705, 705, 705, 705, 705, 705, 705, 705, 705, + + 705, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527, -527, -527, + -527, -527, -527, -527, -527, -527, -527, -527 + }, + + { + 55, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, 707, 707, + 707, 707, 707, 707, 707, 707, 707, 707, -528, -528, + + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528, -528, -528, + -528, -528, -528, -528, -528, -528, -528, -528 + }, + + { + 55, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, 708, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, 709, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529, -529, -529, + -529, -529, -529, -529, -529, -529, -529, -529 + + }, + + { + 55, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, 708, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, 710, -530, -530, -530, -530, + + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530, -530, -530, + -530, -530, -530, -530, -530, -530, -530, -530 + }, + + { + 55, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, 711, 711, + 711, 711, 711, 711, 711, 711, 711, 711, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, + -531, -531, -531, -531, -531, -531, -531, -531 + }, + + { + 55, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + + -532, -532, -532, -532, -532, 708, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, 712, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532, -532, -532, + -532, -532, -532, -532, -532, -532, -532, -532 + }, + + { + 55, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, 713, 714, + 714, 714, 714, 714, 714, 714, 714, 714, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + + -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, + -533, -533, -533, -533, -533, -533, -533, -533 + }, + + { + 55, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, 715, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, -534, -534, + -534, -534, -534, -534, -534, 715, 715, 715, 715, 715, + 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, + + 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, + 715, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, + -534, -534, -534, -534, -534, -534, -534, -534 + }, + + { + 55, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, 717, 718, + + 718, 718, 718, 718, 718, 718, 718, 718, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, + -535, -535, -535, -535, -535, -535, -535, -535 + }, + + { + 55, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, 719, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, 720, 721, + 721, 721, 721, 721, 721, 721, 721, 721, -536, -536, + -536, -536, -536, -536, -536, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + -536, -536, -536, -536, -536, -536, -536, -536, -536, -536, + + -536, -536, -536, -536, -536, -536, -536, -536 + }, + + { + 55, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, 719, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, 722, 722, + 722, 722, 722, 722, 722, 722, 722, 722, -537, -537, + -537, -537, -537, -537, -537, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, + + 719, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537, -537, -537, + -537, -537, -537, -537, -537, -537, -537, -537 + }, + + { + 55, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, 723, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, + -538, -538, -538, -538, -538, -538, -538, -538 + }, + + { + 55, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + + -539, -539, 724, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, 725, 725, + 725, 725, 725, 725, 725, 725, 725, 725, -539, -539, + -539, -539, -539, -539, -539, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, + 724, 724, 724, 724, 724, 724, 724, 724, 724, 724, + 724, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, + -539, -539, -539, -539, -539, -539, -539, -539 + + }, + + { + 55, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, 726, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, 727, 728, + 728, 728, 728, 728, 728, 728, 728, 728, -540, -540, + -540, -540, -540, -540, -540, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, -540, -540, -540, -540, -540, -540, -540, -540, -540, + + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, + -540, -540, -540, -540, -540, -540, -540, -540 + }, + + { + 55, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, 726, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, 729, 729, + 729, 729, 729, 729, 729, 729, 729, 729, -541, -541, + -541, -541, -541, -541, -541, 726, 726, 726, 726, 726, + + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, 726, 726, 726, 726, 726, 726, 726, 726, 726, + 726, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, + -541, -541, -541, -541, -541, -541, -541, -541 + }, + + { + 55, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, 730, -542, -542, -542, -542, -542, -542, -542, + + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542, -542, -542, + -542, -542, -542, -542, -542, -542, -542, -542 + }, + + { + 55, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, 731, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, 732, 733, + 733, 733, 733, 733, 733, 733, 733, 733, -543, -543, + -543, -543, -543, -543, -543, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + + -543, -543, -543, -543, -543, -543, -543, -543, -543, -543, + -543, -543, -543, -543, -543, -543, -543, -543 + }, + + { + 55, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, 731, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, 734, 734, + 734, 734, 734, 734, 734, 734, 734, 734, -544, -544, + -544, -544, -544, -544, -544, 731, 731, 731, 731, 731, + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + + 731, 731, 731, 731, 731, 731, 731, 731, 731, 731, + 731, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544, -544, -544, + -544, -544, -544, -544, -544, -544, -544, -544 + }, + + { + 55, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, 735, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, 725, 725, + + 725, 725, 725, 725, 725, 725, 725, 725, -545, -545, + -545, -545, -545, -545, -545, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, + 735, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, + -545, -545, -545, -545, -545, -545, -545, -545 + }, + + { + 55, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, 736, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + -546, -546, -546, -546, -546, -546, -546, -546, -546, -546, + + -546, -546, -546, -546, -546, -546, -546, -546 + }, + + { + 55, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, 737, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547, -547, -547, + -547, -547, -547, -547, -547, -547, -547, -547 + }, + + { + 55, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548, -548, -548, + -548, -548, -548, -548, -548, -548, -548, -548 + }, + + { + 55, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549, -549, -549, + -549, -549, -549, -549, -549, -549, -549, -549 + + }, + + { + 55, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 551, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, + 550, 550, 550, 550, 550, 550, 550, 550 + }, + + { + 55, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, 550, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, + -551, -551, -551, -551, -551, -551, -551, -551 + }, + + { + 55, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, + -552, -552, -552, -552, -552, -552, -552, -552 + }, + + { + 55, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 552, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 553, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 554, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + + 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, + 400, 400, 400, 400, 400, 400, 400, 400 + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + -556, -556, -556, -556, -556, -556, -556, -556, -556, -556, + + -556, -556, -556, -556, -556, -556, -556, -556 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 556, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 557, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 558, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + + }, + + { + 55, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560, -560, -560, + -560, -560, -560, -560, -560, -560, -560, -560 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + }, + + { + 55, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 560, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 561, 559, 559, 559, 559, 559, 559, 559, + + 559, 559, 559, 559, 559, 559, 559, 562, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, + 559, 559, 559, 559, 559, 559, 559, 559 + }, + + { + 55, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, 742, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + + -563, -563, -563, -563, -563, -563, -563, -563, -563, -563, + -563, -563, -563, -563, -563, -563, -563, -563 + }, + + { + 55, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + + -564, -564, -564, -564, -564, -564, -564, -564, 743, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564, -564, -564, + -564, -564, -564, -564, -564, -564, -564, -564 + }, + + { + 55, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, 744, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565, -565, -565, + -565, -565, -565, -565, -565, -565, -565, -565 + }, + + { + 55, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, 745, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + -566, -566, -566, -566, -566, -566, -566, -566, -566, -566, + + -566, -566, -566, -566, -566, -566, -566, -566 + }, + + { + 55, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, 746, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567, -567, -567, + -567, -567, -567, -567, -567, -567, -567, -567 + }, + + { + 55, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, 747, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568, -568, -568, + -568, -568, -568, -568, -568, -568, -568, -568 + }, + + { + 55, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, 748, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569, -569, -569, + -569, -569, -569, -569, -569, -569, -569, -569 + + }, + + { + 55, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, 749, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570, -570, -570, + -570, -570, -570, -570, -570, -570, -570, -570 + }, + + { + 55, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, 750, -571, + + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571, -571, -571, + -571, -571, -571, -571, -571, -571, -571, -571 + }, + + { + 55, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, 751, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572, -572, -572, + -572, -572, -572, -572, -572, -572, -572, -572 + }, + + { + 55, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, 752, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + + -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, + -573, -573, -573, -573, -573, -573, -573, -573 + }, + + { + 55, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, 753, -574, -574, -574, -574, -574, -574, + + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574, -574, -574, + -574, -574, -574, -574, -574, -574, -574, -574 + }, + + { + 55, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575, -575, -575, + -575, -575, -575, -575, -575, -575, -575, -575 + }, + + { + 55, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + -576, -576, -576, -576, -576, -576, -576, -576, -576, -576, + + -576, -576, -576, -576, -576, -576, -576, -576 + }, + + { + 55, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, 754, + 755, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577, -577, -577, + -577, -577, -577, -577, -577, -577, -577, -577 + }, + + { + 55, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578, -578, -578, + -578, -578, -578, -578, -578, -578, -578, -578 + }, + + { + 55, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, + -579, -579, -579, -579, -579, -579, -579, -579 + + }, + + { + 55, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, + -580, -580, -580, -580, -580, -580, -580, -580 + }, + + { + 55, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, + -581, -581, -581, -581, -581, -581, -581, -581 + }, + + { + 55, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, + -582, -582, -582, -582, -582, -582, -582, -582 + }, + + { + 55, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + + -583, -583, -583, -583, -583, -583, -583, -583, -583, -583, + -583, -583, -583, -583, -583, -583, -583, -583 + }, + + { + 55, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, 756, + + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584, -584, -584, + -584, -584, -584, -584, -584, -584, -584, -584 + }, + + { + 55, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, 757, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585, -585, -585, + -585, -585, -585, -585, -585, -585, -585, -585 + }, + + { + 55, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, + + -586, -586, -586, -586, -586, -586, -586, -586 + }, + + { + 55, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, + -587, -587, -587, -587, -587, -587, -587, -587 + }, + + { + 55, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, + -588, -588, -588, -588, -588, -588, -588, -588 + }, + + { + 55, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, + -589, -589, -589, -589, -589, -589, -589, -589 + + }, + + { + 55, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, + -590, -590, -590, -590, -590, -590, -590, -590 + }, + + { + 55, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, + -591, -591, -591, -591, -591, -591, -591, -591 + }, + + { + 55, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, + -592, -592, -592, -592, -592, -592, -592, -592 + }, + + { + 55, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, 758, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + + -593, -593, -593, -593, -593, -593, -593, -593, -593, -593, + -593, -593, -593, -593, -593, -593, -593, -593 + }, + + { + 55, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, 759, 760, -594, -594, 761, + -594, -594, -594, -594, -594, -594, -594, -594, -594, 762, + + -594, -594, 763, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594, -594, -594, + -594, -594, -594, -594, -594, -594, -594, -594 + }, + + { + 55, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, 764, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595, -595, -595, + -595, -595, -595, -595, -595, -595, -595, -595 + }, + + { + 55, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, 765, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + -596, -596, -596, -596, -596, -596, -596, -596, -596, -596, + + -596, -596, -596, -596, -596, -596, -596, -596 + }, + + { + 55, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597, -597, -597, + -597, -597, -597, -597, -597, -597, -597, -597 + }, + + { + 55, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, 766, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, + -598, -598, -598, -598, -598, -598, -598, -598 + }, + + { + 55, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + + -599, -599, 767, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, + 767, 767, 767, 767, 767, 767, 767, 767, 767, 767, + 767, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, + -599, -599, -599, -599, -599, -599, -599, -599 + + }, + + { + 55, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, 768, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, + -600, -600, -600, -600, -600, -600, -600, -600 + }, + + { + 55, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + + -601, -601, -601, -601, -601, -601, -601, -601, -601, 769, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, + -601, -601, -601, -601, -601, -601, -601, -601 + }, + + { + 55, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, 770, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, + -602, -602, -602, -602, -602, -602, -602, -602 + }, + + { + 55, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + 771, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + + -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, + -603, -603, -603, -603, -603, -603, -603, -603 + }, + + { + 55, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, 772, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + 773, -604, -604, 774, -604, -604, -604, -604, -604, -604, + + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, + -604, -604, -604, -604, -604, -604, -604, -604 + }, + + { + 55, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, 775, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605, -605, -605, + -605, -605, -605, -605, -605, -605, -605, -605 + }, + + { + 55, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, 776, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + -606, -606, -606, -606, -606, -606, -606, -606, -606, -606, + + -606, -606, -606, -606, -606, -606, -606, -606 + }, + + { + 55, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, 777, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, + -607, -607, -607, -607, -607, -607, -607, -607 + }, + + { + 55, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, 778, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, + -608, -608, -608, -608, -608, -608, -608, -608 + }, + + { + 55, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, 779, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609, -609, -609, + -609, -609, -609, -609, -609, -609, -609, -609 + + }, + + { + 55, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, 780, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610, -610, -610, + -610, -610, -610, -610, -610, -610, -610, -610 + }, + + { + 55, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, 781, -611, -611, -611, + + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, + -611, -611, -611, -611, -611, -611, -611, -611 + }, + + { + 55, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, 782, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612, -612, -612, + -612, -612, -612, -612, -612, -612, -612, -612 + }, + + { + 55, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + 783, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + + -613, -613, -613, -613, -613, -613, -613, -613, -613, -613, + -613, -613, -613, -613, -613, -613, -613, -613 + }, + + { + 55, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, 784, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, + -614, -614, -614, -614, -614, -614, -614, -614 + }, + + { + 55, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, 785, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, + -615, -615, -615, -615, -615, -615, -615, -615 + }, + + { + 55, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, 786, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, + + -616, -616, -616, -616, -616, -616, -616, -616 + }, + + { + 55, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, 787, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, + -617, -617, -617, -617, -617, -617, -617, -617 + }, + + { + 55, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + + -618, -618, -618, -618, -618, -618, -618, -618, -618, 788, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618, -618, -618, + -618, -618, -618, -618, -618, -618, -618, -618 + }, + + { + 55, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, 789, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619, -619, -619, + -619, -619, -619, -619, -619, -619, -619, -619 + + }, + + { + 55, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, 790, -620, -620, -620, -620, 791, -620, -620, + -620, -620, -620, 792, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, + -620, -620, -620, -620, -620, -620, -620, -620 + }, + + { + 55, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, 793, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621, -621, -621, + -621, -621, -621, -621, -621, -621, -621, -621 + }, + + { + 55, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, 794, -622, -622, -622, -622, -622, -622, -622, + + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622, -622, -622, + -622, -622, -622, -622, -622, -622, -622, -622 + }, + + { + 55, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + + -623, -623, -623, -623, -623, -623, -623, -623, -623, -623, + -623, -623, -623, -623, -623, -623, -623, -623 + }, + + { + 55, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + + -624, -624, -624, 795, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, + -624, -624, -624, -624, -624, -624, -624, -624 + }, + + { + 55, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, 796, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625, -625, -625, + -625, -625, -625, -625, -625, -625, -625, -625 + }, + + { + 55, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, 797, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + -626, -626, -626, -626, -626, -626, -626, -626, -626, -626, + + -626, -626, -626, -626, -626, -626, -626, -626 + }, + + { + 55, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, 798, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, + -627, -627, -627, -627, -627, -627, -627, -627 + }, + + { + 55, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, 799, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, + -628, -628, -628, -628, -628, -628, -628, -628 + }, + + { + 55, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, 800, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629, -629, -629, + -629, -629, -629, -629, -629, -629, -629, -629 + + }, + + { + 55, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, 801, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630, -630, -630, + -630, -630, -630, -630, -630, -630, -630, -630 + }, + + { + 55, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, 802, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631, -631, -631, + -631, -631, -631, -631, -631, -631, -631, -631 + }, + + { + 55, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, 803, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632, -632, -632, + -632, -632, -632, -632, -632, -632, -632, -632 + }, + + { + 55, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, 804, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + + -633, -633, -633, -633, -633, -633, -633, -633, -633, -633, + -633, -633, -633, -633, -633, -633, -633, -633 + }, + + { + 55, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + 805, -634, -634, -634, -634, -634, -634, -634, -634, -634, + + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634, -634, -634, + -634, -634, -634, -634, -634, -634, -634, -634 + }, + + { + 55, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, 806, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635, -635, -635, + -635, -635, -635, -635, -635, -635, -635, -635 + }, + + { + 55, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, 807, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + -636, -636, -636, -636, -636, -636, -636, -636, -636, -636, + + -636, -636, -636, -636, -636, -636, -636, -636 + }, + + { + 55, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, 808, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637, -637, -637, + -637, -637, -637, -637, -637, -637, -637, -637 + }, + + { + 55, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + + -638, -638, -638, -638, -638, -638, -638, -638, -638, 809, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638, -638, -638, + -638, -638, -638, -638, -638, -638, -638, -638 + }, + + { + 55, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, 810, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639, -639, -639, + -639, -639, -639, -639, -639, -639, -639, -639 + + }, + + { + 55, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, 811, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640, -640, -640, + -640, -640, -640, -640, -640, -640, -640, -640 + }, + + { + 55, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + + -641, -641, -641, -641, -641, -641, -641, -641, -641, 812, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641, -641, -641, + -641, -641, -641, -641, -641, -641, -641, -641 + }, + + { + 55, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, 813, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642, -642, -642, + -642, -642, -642, -642, -642, -642, -642, -642 + }, + + { + 55, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, 814, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + + -643, -643, -643, -643, -643, -643, -643, -643, -643, -643, + -643, -643, -643, -643, -643, -643, -643, -643 + }, + + { + 55, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, 815, -644, -644, -644, -644, -644, -644, -644, -644, + + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644, -644, -644, + -644, -644, -644, -644, -644, -644, -644, -644 + }, + + { + 55, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, 816, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645, -645, -645, + -645, -645, -645, -645, -645, -645, -645, -645 + }, + + { + 55, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + 817, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + -646, -646, -646, -646, -646, -646, -646, -646, -646, -646, + + -646, -646, -646, -646, -646, -646, -646, -646 + }, + + { + 55, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, 818, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647, -647, -647, + -647, -647, -647, -647, -647, -647, -647, -647 + }, + + { + 55, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, 819, 819, + 819, 819, 819, 819, 819, 819, 819, 819, -648, -648, + + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648, -648, -648, + -648, -648, -648, -648, -648, -648, -648, -648 + }, + + { + 55, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, 820, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649, -649, -649, + -649, -649, -649, -649, -649, -649, -649, -649 + + }, + + { + 55, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, 821, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650, -650, -650, + -650, -650, -650, -650, -650, -650, -650, -650 + }, + + { + 55, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + + -651, -651, -651, -651, -651, -651, 822, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651, -651, -651, + -651, -651, -651, -651, -651, -651, -651, -651 + }, + + { + 55, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, 823, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652, -652, -652, + -652, -652, -652, -652, -652, -652, -652, -652 + }, + + { + 55, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, 824, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + + -653, -653, -653, -653, -653, -653, -653, -653, -653, -653, + -653, -653, -653, -653, -653, -653, -653, -653 + }, + + { + 55, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, 825, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654, -654, -654, + -654, -654, -654, -654, -654, -654, -654, -654 + }, + + { + 55, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, 826, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655, -655, -655, + -655, -655, -655, -655, -655, -655, -655, -655 + }, + + { + 55, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, 827, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + -656, -656, -656, -656, -656, -656, -656, -656, -656, -656, + + -656, -656, -656, -656, -656, -656, -656, -656 + }, + + { + 55, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, 828, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657, -657, -657, + -657, -657, -657, -657, -657, -657, -657, -657 + }, + + { + 55, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, 829, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658, -658, -658, + -658, -658, -658, -658, -658, -658, -658, -658 + }, + + { + 55, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + + -659, -659, 830, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, 831, 832, + 832, 832, 832, 832, 832, 832, 832, 832, -659, -659, + -659, -659, -659, -659, -659, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659, -659, -659, + -659, -659, -659, -659, -659, -659, -659, -659 + + }, + + { + 55, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, 833, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, 831, 832, + 832, 832, 832, 832, 832, 832, 832, 832, -660, -660, + -660, -660, -660, -660, -660, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 833, 833, 833, + 833, -660, -660, -660, -660, -660, -660, -660, -660, -660, + + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660, -660, -660, + -660, -660, -660, -660, -660, -660, -660, -660 + }, + + { + 55, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, 834, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661, -661, -661, + -661, -661, -661, -661, -661, -661, -661, -661 + }, + + { + 55, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, 835, -662, -662, -662, -662, -662, -662, -662, + + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662, -662, -662, + -662, -662, -662, -662, -662, -662, -662, -662 + }, + + { + 55, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, 836, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + + -663, -663, -663, -663, -663, -663, -663, -663, -663, -663, + -663, -663, -663, -663, -663, -663, -663, -663 + }, + + { + 55, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, 837, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664, -664, -664, + -664, -664, -664, -664, -664, -664, -664, -664 + }, + + { + 55, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, 838, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665, -665, -665, + -665, -665, -665, -665, -665, -665, -665, -665 + }, + + { + 55, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, 830, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, 831, 831, + 831, 831, 831, 831, 831, 831, 831, 831, -666, -666, + -666, -666, -666, -666, -666, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, + 830, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + -666, -666, -666, -666, -666, -666, -666, -666, -666, -666, + + -666, -666, -666, -666, -666, -666, -666, -666 + }, + + { + 55, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, 839, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667, -667, -667, + -667, -667, -667, -667, -667, -667, -667, -667 + }, + + { + 55, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, 840, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668, -668, -668, + -668, -668, -668, -668, -668, -668, -668, -668 + }, + + { + 55, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + + -669, -669, 841, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, 842, 842, + 842, 842, 842, 842, 842, 842, 842, 842, -669, -669, + -669, -669, -669, -669, -669, 841, 841, 841, 841, 841, + 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, + 841, 841, 841, 841, 841, 841, 841, 841, 841, 841, + 841, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669, -669, -669, + -669, -669, -669, -669, -669, -669, -669, -669 + + }, + + { + 55, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, 843, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670, -670, -670, + -670, -670, -670, -670, -670, -670, -670, -670 + }, + + { + 55, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, 844, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, 845, 845, + 845, 845, 845, 845, 845, 845, 845, 845, -671, -671, + -671, -671, -671, -671, -671, 844, 844, 844, 844, 844, + + 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, + 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, + 844, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671, -671, -671, + -671, -671, -671, -671, -671, -671, -671, -671 + }, + + { + 55, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, 846, -672, -672, -672, -672, -672, -672, -672, + + -672, -672, -672, -672, -672, -672, -672, -672, 847, 847, + 847, 847, 847, 847, 847, 847, 847, 847, -672, -672, + -672, -672, -672, -672, -672, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, + 846, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672, -672, -672, + -672, -672, -672, -672, -672, -672, -672, -672 + }, + + { + 55, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, 848, 848, + 848, 848, 848, 848, 848, 848, 848, 848, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + + -673, -673, -673, -673, -673, -673, -673, -673, -673, -673, + -673, -673, -673, -673, -673, -673, -673, -673 + }, + + { + 55, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, 849, 849, + 849, 849, 849, 849, 849, 849, 849, 849, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674, -674, -674, + -674, -674, -674, -674, -674, -674, -674, -674 + }, + + { + 55, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, 849, 850, + + 850, 850, 850, 850, 850, 850, 850, 850, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675, -675, -675, + -675, -675, -675, -675, -675, -675, -675, -675 + }, + + { + 55, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, 851, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, 852, 852, + 852, 852, 852, 852, 852, 852, 852, 852, -676, -676, + -676, -676, -676, -676, -676, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + -676, -676, -676, -676, -676, -676, -676, -676, -676, -676, + + -676, -676, -676, -676, -676, -676, -676, -676 + }, + + { + 55, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, 853, + 853, 853, 853, 853, 853, 853, 853, 853, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677, -677, -677, + -677, -677, -677, -677, -677, -677, -677, -677 + }, + + { + 55, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, 849, 854, + 854, 854, 854, 854, 854, 854, 854, 854, -678, -678, + + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678, -678, -678, + -678, -678, -678, -678, -678, -678, -678, -678 + }, + + { + 55, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + + -679, -679, 851, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, 852, 855, + 855, 855, 855, 855, 855, 855, 855, 855, -679, -679, + -679, -679, -679, -679, -679, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679, -679, -679, + -679, -679, -679, -679, -679, -679, -679, -679 + + }, + + { + 55, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, 856, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, 857, 857, + 857, 857, 857, 857, 857, 857, 857, 857, -680, -680, + -680, -680, -680, -680, -680, 856, 856, 856, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 856, 856, 856, + 856, -680, -680, -680, -680, -680, -680, -680, -680, -680, + + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680, -680, -680, + -680, -680, -680, -680, -680, -680, -680, -680 + }, + + { + 55, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, 858, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681, -681, -681, + -681, -681, -681, -681, -681, -681, -681, -681 + }, + + { + 55, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, 859, -682, -682, -682, -682, -682, -682, -682, + + -682, -682, -682, -682, -682, -682, -682, -682, 860, 860, + 860, 860, 860, 860, 860, 860, 860, 860, -682, -682, + -682, -682, -682, -682, -682, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682, -682, -682, + -682, -682, -682, -682, -682, -682, -682, -682 + }, + + { + 55, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, 851, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, 852, 861, + 861, 861, 861, 861, 861, 861, 861, 861, -683, -683, + -683, -683, -683, -683, -683, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 851, + 851, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + + -683, -683, -683, -683, -683, -683, -683, -683, -683, -683, + -683, -683, -683, -683, -683, -683, -683, -683 + }, + + { + 55, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, 862, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 863, -684, -684, + -684, -684, -684, -684, -684, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + 862, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684, -684, -684, + -684, -684, -684, -684, -684, -684, -684, -684 + }, + + { + 55, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, 859, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, 860, 864, + + 864, 864, 864, 864, 864, 864, 864, 864, -685, -685, + -685, -685, -685, -685, -685, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685, -685, -685, + -685, -685, -685, -685, -685, -685, -685, -685 + }, + + { + 55, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, 865, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, 866, 866, + 866, 866, 866, 866, 866, 866, 866, 866, -686, -686, + -686, -686, -686, -686, -686, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, + 865, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + -686, -686, -686, -686, -686, -686, -686, -686, -686, -686, + + -686, -686, -686, -686, -686, -686, -686, -686 + }, + + { + 55, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, 867, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687, -687, -687, + -687, -687, -687, -687, -687, -687, -687, -687 + }, + + { + 55, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, 868, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, 860, 860, + 860, 860, 860, 860, 860, 860, 860, 860, -688, -688, + + -688, -688, -688, -688, -688, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, 868, 868, 868, 868, 868, 868, 868, 868, 868, + 868, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688, -688, -688, + -688, -688, -688, -688, -688, -688, -688, -688 + }, + + { + 55, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + + -689, -689, 869, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689, -689, -689, + -689, -689, -689, -689, -689, -689, -689, -689 + + }, + + { + 55, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, 870, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690, -690, -690, + -690, -690, -690, -690, -690, -690, -690, -690 + }, + + { + 55, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, 871, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, -691, -691, + -691, -691, -691, -691, -691, 871, 871, 871, 871, 871, + + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691, -691, -691, + -691, -691, -691, -691, -691, -691, -691, -691 + }, + + { + 55, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, 859, -692, -692, -692, -692, -692, -692, -692, + + -692, -692, -692, -692, -692, -692, -692, -692, 860, 873, + 873, 873, 873, 873, 873, 873, 873, 873, -692, -692, + -692, -692, -692, -692, -692, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 859, + 859, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692, -692, -692, + -692, -692, -692, -692, -692, -692, -692, -692 + }, + + { + 55, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, 874, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, 875, 875, + 875, 875, 875, 875, 875, 875, 875, 875, -693, -693, + -693, -693, -693, -693, -693, 874, 874, 874, 874, 874, + 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, + 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, + 874, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + + -693, -693, -693, -693, -693, -693, -693, -693, -693, -693, + -693, -693, -693, -693, -693, -693, -693, -693 + }, + + { + 55, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, 876, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, + -694, -694, -694, -694, -694, -694, -694, -694 + }, + + { + 55, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, 877, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, 860, 860, + + 860, 860, 860, 860, 860, 860, 860, 860, -695, -695, + -695, -695, -695, -695, -695, 877, 877, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, + 877, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695, -695, -695, + -695, -695, -695, -695, -695, -695, -695, -695 + }, + + { + 55, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, 871, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, 872, 878, + 878, 878, 878, 878, 878, 878, 878, 878, -696, -696, + -696, -696, -696, -696, -696, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, + 871, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, + + -696, -696, -696, -696, -696, -696, -696, -696 + }, + + { + 55, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, 879, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, 880, 880, + 880, 880, 880, 880, 880, 880, 880, 880, -697, -697, + -697, -697, -697, -697, -697, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, + 879, 879, 879, 879, 879, 879, 879, 879, 879, 879, + + 879, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697, -697, -697, + -697, -697, -697, -697, -697, -697, -697, -697 + }, + + { + 55, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, 881, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698, -698, -698, + -698, -698, -698, -698, -698, -698, -698, -698 + }, + + { + 55, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + + -699, -699, 882, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, 872, 872, + 872, 872, 872, 872, 872, 872, 872, 872, -699, -699, + -699, -699, -699, -699, -699, 882, 882, 882, 882, 882, + 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 882, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699, -699, -699, + -699, -699, -699, -699, -699, -699, -699, -699 + + }, + + { + 55, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, 883, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700, -700, -700, + -700, -700, -700, -700, -700, -700, -700, -700 + }, + + { + 55, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, 884, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701, -701, -701, + -701, -701, -701, -701, -701, -701, -701, -701 + }, + + { + 55, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, 885, -702, -702, -702, -702, -702, -702, -702, + + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702, -702, -702, + -702, -702, -702, -702, -702, -702, -702, -702 + }, + + { + 55, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, 886, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + + -703, -703, -703, -703, -703, -703, -703, -703, -703, -703, + -703, -703, -703, -703, -703, -703, -703, -703 + }, + + { + 55, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, 887, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, 888, 888, + 888, 888, 888, 888, 888, 888, 888, 888, -704, -704, + -704, -704, -704, -704, -704, 887, 887, 887, 887, 887, + 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, + + 887, 887, 887, 887, 887, 887, 887, 887, 887, 887, + 887, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704, -704, -704, + -704, -704, -704, -704, -704, -704, -704, -704 + }, + + { + 55, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, 889, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705, -705, -705, + -705, -705, -705, -705, -705, -705, -705, -705 + }, + + { + 55, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, 890, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, 891, 891, + 891, 891, 891, 891, 891, 891, 891, 891, -706, -706, + -706, -706, -706, -706, -706, 890, 890, 890, 890, 890, + 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, + 890, 890, 890, 890, 890, 890, 890, 890, 890, 890, + 890, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + -706, -706, -706, -706, -706, -706, -706, -706, -706, -706, + + -706, -706, -706, -706, -706, -706, -706, -706 + }, + + { + 55, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, 892, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, 893, 893, + 893, 893, 893, 893, 893, 893, 893, 893, -707, -707, + -707, -707, -707, -707, -707, 892, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, + 892, 892, 892, 892, 892, 892, 892, 892, 892, 892, + + 892, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, + -707, -707, -707, -707, -707, -707, -707, -707 + }, + + { + 55, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, -708, -708, + + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708, -708, -708, + -708, -708, -708, -708, -708, -708, -708, -708 + }, + + { + 55, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, 895, 895, + 895, 895, 895, 895, 895, 895, 895, 895, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, + -709, -709, -709, -709, -709, -709, -709, -709 + + }, + + { + 55, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, 896, 896, + 896, 896, 896, 896, 896, 896, 896, 896, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710, -710, -710, + -710, -710, -710, -710, -710, -710, -710, -710 + }, + + { + 55, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, 897, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, 898, 898, + 898, 898, 898, 898, 898, 898, 898, 898, -711, -711, + -711, -711, -711, -711, -711, 897, 897, 897, 897, 897, + + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, + 897, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711, -711, -711, + -711, -711, -711, -711, -711, -711, -711, -711 + }, + + { + 55, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + + -712, -712, -712, -712, -712, -712, -712, -712, 899, 899, + 899, 899, 899, 899, 899, 899, 899, 899, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712, -712, -712, + -712, -712, -712, -712, -712, -712, -712, -712 + }, + + { + 55, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, 900, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, 901, 901, + 901, 901, 901, 901, 901, 901, 901, 901, -713, -713, + -713, -713, -713, -713, -713, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + + -713, -713, -713, -713, -713, -713, -713, -713, -713, -713, + -713, -713, -713, -713, -713, -713, -713, -713 + }, + + { + 55, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, 900, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, 902, 902, + 902, 902, 902, 902, 902, 902, 902, 902, -714, -714, + -714, -714, -714, -714, -714, 900, 900, 900, 900, 900, + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + + 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, + 900, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714, -714, -714, + -714, -714, -714, -714, -714, -714, -714, -714 + }, + + { + 55, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, 903, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715, -715, -715, + -715, -715, -715, -715, -715, -715, -715, -715 + }, + + { + 55, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, 904, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, 905, 905, + 905, 905, 905, 905, 905, 905, 905, 905, -716, -716, + -716, -716, -716, -716, -716, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, + 904, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, + + -716, -716, -716, -716, -716, -716, -716, -716 + }, + + { + 55, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, 906, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, 907, 907, + 907, 907, 907, 907, 907, 907, 907, 907, -717, -717, + -717, -717, -717, -717, -717, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + + 906, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717, -717, -717, + -717, -717, -717, -717, -717, -717, -717, -717 + }, + + { + 55, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, 906, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, 908, 908, + 908, 908, 908, 908, 908, 908, 908, 908, -718, -718, + + -718, -718, -718, -718, -718, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, 906, 906, 906, 906, 906, 906, 906, 906, 906, + 906, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718, -718, -718, + -718, -718, -718, -718, -718, -718, -718, -718 + }, + + { + 55, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + + -719, -719, 909, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719, -719, -719, + -719, -719, -719, -719, -719, -719, -719, -719 + + }, + + { + 55, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, 910, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, 911, 911, + 911, 911, 911, 911, 911, 911, 911, 911, -720, -720, + -720, -720, -720, -720, -720, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, -720, -720, -720, -720, -720, -720, -720, -720, -720, + + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, + -720, -720, -720, -720, -720, -720, -720, -720 + }, + + { + 55, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, 910, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, 912, 912, + 912, 912, 912, 912, 912, 912, 912, 912, -721, -721, + -721, -721, -721, -721, -721, 910, 910, 910, 910, 910, + + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, 910, 910, 910, 910, 910, 910, 910, 910, 910, + 910, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, + -721, -721, -721, -721, -721, -721, -721, -721 + }, + + { + 55, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, 913, -722, -722, -722, -722, -722, -722, -722, + + -722, -722, -722, -722, -722, -722, -722, -722, 905, 905, + 905, 905, 905, 905, 905, 905, 905, 905, -722, -722, + -722, -722, -722, -722, -722, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, + 913, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, + -722, -722, -722, -722, -722, -722, -722, -722 + }, + + { + 55, -723, -723, -723, -723, -723, -723, -723, -723, -723, + + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, 914, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + + -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, + -723, -723, -723, -723, -723, -723, -723, -723 + }, + + { + 55, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, 915, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724, -724, -724, + -724, -724, -724, -724, -724, -724, -724, -724 + }, + + { + 55, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, 916, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, 917, 917, + + 917, 917, 917, 917, 917, 917, 917, 917, -725, -725, + -725, -725, -725, -725, -725, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, + 916, 916, 916, 916, 916, 916, 916, 916, 916, 916, + 916, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, + -725, -725, -725, -725, -725, -725, -725, -725 + }, + + { + 55, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, 918, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, + + -726, -726, -726, -726, -726, -726, -726, -726 + }, + + { + 55, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, 919, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, 920, 920, + 920, 920, 920, 920, 920, 920, 920, 920, -727, -727, + -727, -727, -727, -727, -727, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + + 919, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727, -727, -727, + -727, -727, -727, -727, -727, -727, -727, -727 + }, + + { + 55, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, 919, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, 921, 921, + 921, 921, 921, 921, 921, 921, 921, 921, -728, -728, + + -728, -728, -728, -728, -728, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, + 919, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728 + }, + + { + 55, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + + -729, -729, 922, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, 905, 905, + 905, 905, 905, 905, 905, 905, 905, 905, -729, -729, + -729, -729, -729, -729, -729, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, 922, 922, 922, 922, 922, 922, 922, 922, 922, + 922, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, + -729, -729, -729, -729, -729, -729, -729, -729 + + }, + + { + 55, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, 923, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730, -730, -730, + -730, -730, -730, -730, -730, -730, -730, -730 + }, + + { + 55, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, 924, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731, -731, -731, + -731, -731, -731, -731, -731, -731, -731, -731 + }, + + { + 55, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, 925, -732, -732, -732, -732, -732, -732, -732, + + -732, -732, -732, -732, -732, -732, -732, -732, 926, 926, + 926, 926, 926, 926, 926, 926, 926, 926, -732, -732, + -732, -732, -732, -732, -732, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732 + }, + + { + 55, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, 925, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, 927, 927, + 927, 927, 927, 927, 927, 927, 927, 927, -733, -733, + -733, -733, -733, -733, -733, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, 925, 925, 925, 925, 925, 925, 925, 925, 925, + 925, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733 + }, + + { + 55, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, 928, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, 917, 917, + 917, 917, 917, 917, 917, 917, 917, 917, -734, -734, + -734, -734, -734, -734, -734, 928, 928, 928, 928, 928, + 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, + + 928, 928, 928, 928, 928, 928, 928, 928, 928, 928, + 928, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734, -734, -734, + -734, -734, -734, -734, -734, -734, -734, -734 + }, + + { + 55, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, 929, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735, -735, -735, + -735, -735, -735, -735, -735, -735, -735, -735 + }, + + { + 55, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, 930, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + -736, -736, -736, -736, -736, -736, -736, -736, -736, -736, + + -736, -736, -736, -736, -736, -736, -736, -736 + }, + + { + 55, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737, -737, -737, + -737, -737, -737, -737, -737, -737, -737, -737 + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739, -739, -739, + -739, -739, -739, -739, -739, -739, -739, -739 + + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 739, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 740, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 741, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, + 738, 738, 738, 738, 738, 738, 738, 738 + }, + + { + 55, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, 931, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, + -742, -742, -742, -742, -742, -742, -742, -742 + }, + + { + 55, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, 932, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + + -743, -743, -743, -743, -743, -743, -743, -743, -743, -743, + -743, -743, -743, -743, -743, -743, -743, -743 + }, + + { + 55, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + + -744, -744, 933, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744, -744, -744, + -744, -744, -744, -744, -744, -744, -744, -744 + }, + + { + 55, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, 934, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, + -745, -745, -745, -745, -745, -745, -745, -745 + }, + + { + 55, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, 935, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + -746, -746, -746, -746, -746, -746, -746, -746, -746, -746, + + -746, -746, -746, -746, -746, -746, -746, -746 + }, + + { + 55, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, 936, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, + -747, -747, -747, -747, -747, -747, -747, -747 + }, + + { + 55, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + + -748, -748, -748, -748, -748, -748, 937, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748, -748, -748, + -748, -748, -748, -748, -748, -748, -748, -748 + }, + + { + 55, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, 938, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749 + + }, + + { + 55, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, 939, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750, -750, -750, + -750, -750, -750, -750, -750, -750, -750, -750 + }, + + { + 55, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, 940, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751, -751, -751, + -751, -751, -751, -751, -751, -751, -751, -751 + }, + + { + 55, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, 941, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752, -752, -752, + -752, -752, -752, -752, -752, -752, -752, -752 + }, + + { + 55, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, 942, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + + -753, -753, -753, -753, -753, -753, -753, -753, -753, -753, + -753, -753, -753, -753, -753, -753, -753, -753 + }, + + { + 55, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, 943, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754, -754, -754, + -754, -754, -754, -754, -754, -754, -754, -754 + }, + + { + 55, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, 944, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755, -755, -755, + -755, -755, -755, -755, -755, -755, -755, -755 + }, + + { + 55, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, 945, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + -756, -756, -756, -756, -756, -756, -756, -756, -756, -756, + + -756, -756, -756, -756, -756, -756, -756, -756 + }, + + { + 55, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, 946, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757, -757, -757, + -757, -757, -757, -757, -757, -757, -757, -757 + }, + + { + 55, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, 947, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758, -758, -758, + -758, -758, -758, -758, -758, -758, -758, -758 + }, + + { + 55, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, 948, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759, -759, -759, + -759, -759, -759, -759, -759, -759, -759, -759 + + }, + + { + 55, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, 949, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760, -760, -760, + -760, -760, -760, -760, -760, -760, -760, -760 + }, + + { + 55, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + + -761, -761, -761, -761, -761, -761, -761, -761, 950, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761, -761, -761, + -761, -761, -761, -761, -761, -761, -761, -761 + }, + + { + 55, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, 951, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762, -762, -762, + -762, -762, -762, -762, -762, -762, -762, -762 + }, + + { + 55, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, 952, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + + -763, -763, -763, -763, -763, -763, -763, -763, -763, -763, + -763, -763, -763, -763, -763, -763, -763, -763 + }, + + { + 55, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + 953, -764, -764, -764, -764, -764, -764, -764, -764, -764, + + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764, -764, -764, + -764, -764, -764, -764, -764, -764, -764, -764 + }, + + { + 55, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, 954, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765, -765, -765, + -765, -765, -765, -765, -765, -765, -765, -765 + }, + + { + 55, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, 955, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + -766, -766, -766, -766, -766, -766, -766, -766, -766, -766, + + -766, -766, -766, -766, -766, -766, -766, -766 + }, + + { + 55, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, 956, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767, -767, -767, + -767, -767, -767, -767, -767, -767, -767, -767 + }, + + { + 55, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, 957, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768, -768, -768, + -768, -768, -768, -768, -768, -768, -768, -768 + }, + + { + 55, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, 958, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769, -769, -769, + -769, -769, -769, -769, -769, -769, -769, -769 + + }, + + { + 55, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, 959, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770, -770, -770, + -770, -770, -770, -770, -770, -770, -770, -770 + }, + + { + 55, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, 960, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + + 961, -771, -771, 962, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771, -771, -771, + -771, -771, -771, -771, -771, -771, -771, -771 + }, + + { + 55, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, 963, -772, -772, -772, -772, -772, -772, -772, + + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772, -772, -772, + -772, -772, -772, -772, -772, -772, -772, -772 + }, + + { + 55, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, 964, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + + -773, -773, -773, -773, -773, -773, -773, -773, -773, -773, + -773, -773, -773, -773, -773, -773, -773, -773 + }, + + { + 55, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, 965, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774, -774, -774, + -774, -774, -774, -774, -774, -774, -774, -774 + }, + + { + 55, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, 966, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, + -775, -775, -775, -775, -775, -775, -775, -775 + }, + + { + 55, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, 967, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + -776, -776, -776, -776, -776, -776, -776, -776, -776, -776, + + -776, -776, -776, -776, -776, -776, -776, -776 + }, + + { + 55, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, 968, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777, -777, -777, + -777, -777, -777, -777, -777, -777, -777, -777 + }, + + { + 55, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, 969, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, + -778, -778, -778, -778, -778, -778, -778, -778 + }, + + { + 55, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, 970, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779, -779, -779, + -779, -779, -779, -779, -779, -779, -779, -779 + + }, + + { + 55, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, 971, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780, -780, -780, + -780, -780, -780, -780, -780, -780, -780, -780 + }, + + { + 55, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, 972, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781, -781, -781, + -781, -781, -781, -781, -781, -781, -781, -781 + }, + + { + 55, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + 973, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782, -782, -782, + -782, -782, -782, -782, -782, -782, -782, -782 + }, + + { + 55, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, 974, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + 975, -783, -783, 976, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + + -783, -783, -783, -783, -783, -783, -783, -783, -783, -783, + -783, -783, -783, -783, -783, -783, -783, -783 + }, + + { + 55, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, 977, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784, -784, -784, + -784, -784, -784, -784, -784, -784, -784, -784 + }, + + { + 55, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, 978, -785, -785, -785, -785, + + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785, -785, -785, + -785, -785, -785, -785, -785, -785, -785, -785 + }, + + { + 55, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, 979, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + -786, -786, -786, -786, -786, -786, -786, -786, -786, -786, + + -786, -786, -786, -786, -786, -786, -786, -786 + }, + + { + 55, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, 980, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787, -787, -787, + -787, -787, -787, -787, -787, -787, -787, -787 + }, + + { + 55, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, 981, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788, -788, -788, + -788, -788, -788, -788, -788, -788, -788, -788 + }, + + { + 55, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, 982, -789, + -789, -789, -789, -789, -789, -789, -789, 983, -789, -789, + -789, -789, -789, 984, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789, -789, -789, + -789, -789, -789, -789, -789, -789, -789, -789 + + }, + + { + 55, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, 985, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790, -790, -790, + -790, -790, -790, -790, -790, -790, -790, -790 + }, + + { + 55, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, 986, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791, -791, -791, + -791, -791, -791, -791, -791, -791, -791, -791 + }, + + { + 55, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, 987, -792, -792, -792, -792, -792, -792, -792, + + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792, -792, -792, + -792, -792, -792, -792, -792, -792, -792, -792 + }, + + { + 55, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, 988, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + + -793, -793, -793, -793, -793, -793, -793, -793, -793, -793, + -793, -793, -793, -793, -793, -793, -793, -793 + }, + + { + 55, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, 989, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794, -794, -794, + -794, -794, -794, -794, -794, -794, -794, -794 + }, + + { + 55, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, 990, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795, -795, -795, + -795, -795, -795, -795, -795, -795, -795, -795 + }, + + { + 55, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, 991, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + -796, -796, -796, -796, -796, -796, -796, -796, -796, -796, + + -796, -796, -796, -796, -796, -796, -796, -796 + }, + + { + 55, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, 992, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, 993, -797, -797, -797, -797, -797, -797, -797, -797, + + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797, -797, -797, + -797, -797, -797, -797, -797, -797, -797, -797 + }, + + { + 55, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, 994, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798, -798, -798, + -798, -798, -798, -798, -798, -798, -798, -798 + }, + + { + 55, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, 995, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799, -799, -799, + -799, -799, -799, -799, -799, -799, -799, -799 + + }, + + { + 55, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, 996, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800, -800, -800, + -800, -800, -800, -800, -800, -800, -800, -800 + }, + + { + 55, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, 997, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801, -801, -801, + -801, -801, -801, -801, -801, -801, -801, -801 + }, + + { + 55, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, 998, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802, -802, -802, + -802, -802, -802, -802, -802, -802, -802, -802 + }, + + { + 55, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, 999, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + + -803, -803, -803, -803, -803, -803, -803, -803, -803, -803, + -803, -803, -803, -803, -803, -803, -803, -803 + }, + + { + 55, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, 1000, -804, -804, -804, + + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804, -804, -804, + -804, -804, -804, -804, -804, -804, -804, -804 + }, + + { + 55, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + 1001, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805, -805, -805, + -805, -805, -805, -805, -805, -805, -805, -805 + }, + + { + 55, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, 1002, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + -806, -806, -806, -806, -806, -806, -806, -806, -806, -806, + + -806, -806, -806, -806, -806, -806, -806, -806 + }, + + { + 55, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, 1003, -807, -807, -807, -807, -807, -807, + + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807, -807, -807, + -807, -807, -807, -807, -807, -807, -807, -807 + }, + + { + 55, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, 1004, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, + -808, -808, -808, -808, -808, -808, -808, -808 + }, + + { + 55, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, 1005, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809, -809, -809, + -809, -809, -809, -809, -809, -809, -809, -809 + + }, + + { + 55, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, 1006, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810, -810, -810, + -810, -810, -810, -810, -810, -810, -810, -810 + }, + + { + 55, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, 1007, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811, -811, -811, + -811, -811, -811, -811, -811, -811, -811, -811 + }, + + { + 55, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, 1008, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812, -812, -812, + -812, -812, -812, -812, -812, -812, -812, -812 + }, + + { + 55, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, 1009, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + + -813, -813, -813, -813, -813, -813, -813, -813, -813, -813, + -813, -813, -813, -813, -813, -813, -813, -813 + }, + + { + 55, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, 1010, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814, -814, -814, + -814, -814, -814, -814, -814, -814, -814, -814 + }, + + { + 55, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, 1011, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815, -815, -815, + -815, -815, -815, -815, -815, -815, -815, -815 + }, + + { + 55, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, 1012, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + -816, -816, -816, -816, -816, -816, -816, -816, -816, -816, + + -816, -816, -816, -816, -816, -816, -816, -816 + }, + + { + 55, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, 1013, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, + + 1013, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817, -817, -817, + -817, -817, -817, -817, -817, -817, -817, -817 + }, + + { + 55, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + + -818, -818, -818, -818, -818, -818, -818, -818, -818, 1014, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818, -818, -818, + -818, -818, -818, -818, -818, -818, -818, -818 + }, + + { + 55, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, 1015, 1015, + 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819, -819, -819, + -819, -819, -819, -819, -819, -819, -819, -819 + + }, + + { + 55, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, 1016, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820, -820, -820, + -820, -820, -820, -820, -820, -820, -820, -820 + }, + + { + 55, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, 1017, + + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821, -821, -821, + -821, -821, -821, -821, -821, -821, -821, -821 + }, + + { + 55, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, 1018, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822, -822, -822, + -822, -822, -822, -822, -822, -822, -822, -822 + }, + + { + 55, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, 1019, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + + -823, -823, -823, -823, -823, -823, -823, -823, -823, -823, + -823, -823, -823, -823, -823, -823, -823, -823 + }, + + { + 55, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + + -824, -824, -824, 1020, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824, -824, -824, + -824, -824, -824, -824, -824, -824, -824, -824 + }, + + { + 55, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, 1021, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825, -825, -825, + -825, -825, -825, -825, -825, -825, -825, -825 + }, + + { + 55, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + -826, -826, -826, -826, -826, -826, -826, -826, -826, -826, + + -826, -826, -826, -826, -826, -826, -826, -826 + }, + + { + 55, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827, -827, -827, + -827, -827, -827, -827, -827, -827, -827, -827 + }, + + { + 55, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828, -828, -828, + -828, -828, -828, -828, -828, -828, -828, -828 + }, + + { + 55, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829, -829, -829, + -829, -829, -829, -829, -829, -829, -829, -829 + + }, + + { + 55, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830, -830, -830, + -830, -830, -830, -830, -830, -830, -830, -830 + }, + + { + 55, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831, -831, -831, + -831, -831, -831, -831, -831, -831, -831, -831 + }, + + { + 55, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832, -832, -832, + -832, -832, -832, -832, -832, -832, -832, -832 + }, + + { + 55, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + + -833, -833, -833, -833, -833, -833, -833, -833, -833, -833, + -833, -833, -833, -833, -833, -833, -833, -833 + }, + + { + 55, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834, -834, -834, + -834, -834, -834, -834, -834, -834, -834, -834 + }, + + { + 55, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835, -835, -835, + -835, -835, -835, -835, -835, -835, -835, -835 + }, + + { + 55, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + -836, -836, -836, -836, -836, -836, -836, -836, -836, -836, + + -836, -836, -836, -836, -836, -836, -836, -836 + }, + + { + 55, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837, -837, -837, + -837, -837, -837, -837, -837, -837, -837, -837 + }, + + { + 55, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, + -838, -838, -838, -838, -838, -838, -838, -838 + }, + + { + 55, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839, -839, -839, + -839, -839, -839, -839, -839, -839, -839, -839 + + }, + + { + 55, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840, -840, -840, + -840, -840, -840, -840, -840, -840, -840, -840 + }, + + { + 55, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841, -841, -841, + -841, -841, -841, -841, -841, -841, -841, -841 + }, + + { + 55, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842, -842, -842, + -842, -842, -842, -842, -842, -842, -842, -842 + }, + + { + 55, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + + -843, -843, -843, -843, -843, -843, -843, -843, -843, -843, + -843, -843, -843, -843, -843, -843, -843, -843 + }, + + { + 55, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844, -844, -844, + -844, -844, -844, -844, -844, -844, -844, -844 + }, + + { + 55, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845, -845, -845, + -845, -845, -845, -845, -845, -845, -845, -845 + }, + + { + 55, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + -846, -846, -846, -846, -846, -846, -846, -846, -846, -846, + + -846, -846, -846, -846, -846, -846, -846, -846 + }, + + { + 55, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847, -847, -847, + -847, -847, -847, -847, -847, -847, -847, -847 + }, + + { + 55, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848, -848, -848, + -848, -848, -848, -848, -848, -848, -848, -848 + }, + + { + 55, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, + -849, -849, -849, -849, -849, -849, -849, -849 + + }, + + { + 55, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850, -850, -850, + -850, -850, -850, -850, -850, -850, -850, -850 + }, + + { + 55, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851, -851, -851, + -851, -851, -851, -851, -851, -851, -851, -851 + }, + + { + 55, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852, -852, -852, + -852, -852, -852, -852, -852, -852, -852, -852 + }, + + { + 55, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + + -853, -853, -853, -853, -853, -853, -853, -853, -853, -853, + -853, -853, -853, -853, -853, -853, -853, -853 + }, + + { + 55, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854, -854, -854, + -854, -854, -854, -854, -854, -854, -854, -854 + }, + + { + 55, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855, -855, -855, + -855, -855, -855, -855, -855, -855, -855, -855 + }, + + { + 55, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + -856, -856, -856, -856, -856, -856, -856, -856, -856, -856, + + -856, -856, -856, -856, -856, -856, -856, -856 + }, + + { + 55, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857, -857, -857, + -857, -857, -857, -857, -857, -857, -857, -857 + }, + + { + 55, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858, -858, -858, + -858, -858, -858, -858, -858, -858, -858, -858 + }, + + { + 55, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859 + + }, + + { + 55, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860, -860, -860, + -860, -860, -860, -860, -860, -860, -860, -860 + }, + + { + 55, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861, -861, -861, + -861, -861, -861, -861, -861, -861, -861, -861 + }, + + { + 55, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862, -862, -862, + -862, -862, -862, -862, -862, -862, -862, -862 + }, + + { + 55, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863 + }, + + { + 55, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864, -864, -864, + -864, -864, -864, -864, -864, -864, -864, -864 + }, + + { + 55, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865 + }, + + { + 55, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + -866, -866, -866, -866, -866, -866, -866, -866, -866, -866, + + -866, -866, -866, -866, -866, -866, -866, -866 + }, + + { + 55, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867, -867, -867, + -867, -867, -867, -867, -867, -867, -867, -867 + }, + + { + 55, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868, -868, -868, + -868, -868, -868, -868, -868, -868, -868, -868 + }, + + { + 55, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869, -869, -869, + -869, -869, -869, -869, -869, -869, -869, -869 + + }, + + { + 55, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870, -870, -870, + -870, -870, -870, -870, -870, -870, -870, -870 + }, + + { + 55, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871, -871, -871, + -871, -871, -871, -871, -871, -871, -871, -871 + }, + + { + 55, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872, -872, -872, + -872, -872, -872, -872, -872, -872, -872, -872 + }, + + { + 55, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + + -873, -873, -873, -873, -873, -873, -873, -873, -873, -873, + -873, -873, -873, -873, -873, -873, -873, -873 + }, + + { + 55, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874, -874, -874, + -874, -874, -874, -874, -874, -874, -874, -874 + }, + + { + 55, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875, -875, -875 + }, + + { + 55, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + -876, -876, -876, -876, -876, -876, -876, -876, -876, -876, + + -876, -876, -876, -876, -876, -876, -876, -876 + }, + + { + 55, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877, -877, -877, + -877, -877, -877, -877, -877, -877, -877, -877 + }, + + { + 55, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878 + }, + + { + 55, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879, -879, -879, + -879, -879, -879, -879, -879, -879, -879, -879 + + }, + + { + 55, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880, -880, -880, + -880, -880, -880, -880, -880, -880, -880, -880 + }, + + { + 55, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881, -881, -881, + -881, -881, -881, -881, -881, -881, -881, -881 + }, + + { + 55, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882, -882, -882, + -882, -882, -882, -882, -882, -882, -882, -882 + }, + + { + 55, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + + -883, -883, -883, -883, -883, -883, -883, -883, -883, -883, + -883, -883, -883, -883, -883, -883, -883, -883 + }, + + { + 55, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884, -884, -884, + -884, -884, -884, -884, -884, -884, -884, -884 + }, + + { + 55, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885, -885, -885, + -885, -885, -885, -885, -885, -885, -885, -885 + }, + + { + 55, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + -886, -886, -886, -886, -886, -886, -886, -886, -886, -886, + + -886, -886, -886, -886, -886, -886, -886, -886 + }, + + { + 55, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887, -887, -887, + -887, -887, -887, -887, -887, -887, -887, -887 + }, + + { + 55, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888, -888, -888, + -888, -888, -888, -888, -888, -888, -888, -888 + }, + + { + 55, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889, -889, -889, + -889, -889, -889, -889, -889, -889, -889, -889 + + }, + + { + 55, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890, -890, -890, + -890, -890, -890, -890, -890, -890, -890, -890 + }, + + { + 55, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891, -891, -891, + -891, -891, -891, -891, -891, -891, -891, -891 + }, + + { + 55, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892, -892, -892, + -892, -892, -892, -892, -892, -892, -892, -892 + }, + + { + 55, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + + -893, -893, -893, -893, -893, -893, -893, -893, -893, -893, + -893, -893, -893, -893, -893, -893, -893, -893 + }, + + { + 55, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894, -894, -894, + -894, -894, -894, -894, -894, -894, -894, -894 + }, + + { + 55, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895, -895, -895, + -895, -895, -895, -895, -895, -895, -895, -895 + }, + + { + 55, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + -896, -896, -896, -896, -896, -896, -896, -896, -896, -896, + + -896, -896, -896, -896, -896, -896, -896, -896 + }, + + { + 55, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897, -897, -897, + -897, -897, -897, -897, -897, -897, -897, -897 + }, + + { + 55, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898, -898, -898, + -898, -898, -898, -898, -898, -898, -898, -898 + }, + + { + 55, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899, -899, -899, + -899, -899, -899, -899, -899, -899, -899, -899 + + }, + + { + 55, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900, -900, -900, + -900, -900, -900, -900, -900, -900, -900, -900 + }, + + { + 55, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901 + }, + + { + 55, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902, -902, -902, + -902, -902, -902, -902, -902, -902, -902, -902 + }, + + { + 55, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + + -903, -903, -903, -903, -903, -903, -903, -903, -903, -903, + -903, -903, -903, -903, -903, -903, -903, -903 + }, + + { + 55, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904, -904, -904, + -904, -904, -904, -904, -904, -904, -904, -904 + }, + + { + 55, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905, -905, -905, + -905, -905, -905, -905, -905, -905, -905, -905 + }, + + { + 55, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + -906, -906, -906, -906, -906, -906, -906, -906, -906, -906, + + -906, -906, -906, -906, -906, -906, -906, -906 + }, + + { + 55, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, + -907, -907, -907, -907, -907, -907, -907, -907 + }, + + { + 55, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908, -908, -908, + -908, -908, -908, -908, -908, -908, -908, -908 + }, + + { + 55, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909, -909, -909, + -909, -909, -909, -909, -909, -909, -909, -909 + + }, + + { + 55, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910, -910, -910, + -910, -910, -910, -910, -910, -910, -910, -910 + }, + + { + 55, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911, -911, -911, + -911, -911, -911, -911, -911, -911, -911, -911 + }, + + { + 55, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912, -912, -912, + -912, -912, -912, -912, -912, -912, -912, -912 + }, + + { + 55, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + + -913, -913, -913, -913, -913, -913, -913, -913, -913, -913, + -913, -913, -913, -913, -913, -913, -913, -913 + }, + + { + 55, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914, -914, -914, + -914, -914, -914, -914, -914, -914, -914, -914 + }, + + { + 55, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915, -915, -915, + -915, -915, -915, -915, -915, -915, -915, -915 + }, + + { + 55, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + -916, -916, -916, -916, -916, -916, -916, -916, -916, -916, + + -916, -916, -916, -916, -916, -916, -916, -916 + }, + + { + 55, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917, -917, -917, + -917, -917, -917, -917, -917, -917, -917, -917 + }, + + { + 55, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918, -918, -918, + -918, -918, -918, -918, -918, -918, -918, -918 + }, + + { + 55, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919, -919, -919, + -919, -919, -919, -919, -919, -919, -919, -919 + + }, + + { + 55, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920, -920, -920, + -920, -920, -920, -920, -920, -920, -920, -920 + }, + + { + 55, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921, -921, -921, + -921, -921, -921, -921, -921, -921, -921, -921 + }, + + { + 55, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922, -922, -922, + -922, -922, -922, -922, -922, -922, -922, -922 + }, + + { + 55, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + + -923, -923, -923, -923, -923, -923, -923, -923, -923, -923, + -923, -923, -923, -923, -923, -923, -923, -923 + }, + + { + 55, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924, -924, -924, + -924, -924, -924, -924, -924, -924, -924, -924 + }, + + { + 55, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925, -925, -925, + -925, -925, -925, -925, -925, -925, -925, -925 + }, + + { + 55, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + -926, -926, -926, -926, -926, -926, -926, -926, -926, -926, + + -926, -926, -926, -926, -926, -926, -926, -926 + }, + + { + 55, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927, -927, -927, + -927, -927, -927, -927, -927, -927, -927, -927 + }, + + { + 55, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928, -928, -928, + -928, -928, -928, -928, -928, -928, -928, -928 + }, + + { + 55, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929, -929, -929, + -929, -929, -929, -929, -929, -929, -929, -929 + + }, + + { + 55, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930, -930, -930, + -930, -930, -930, -930, -930, -930, -930, -930 + }, + + { + 55, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, 1022, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931, -931, -931, + -931, -931, -931, -931, -931, -931, -931, -931 + }, + + { + 55, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, 1023, -932, -932, -932, -932, -932, -932, -932, + + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932, -932, -932, + -932, -932, -932, -932, -932, -932, -932, -932 + }, + + { + 55, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, 1024, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + + -933, -933, -933, -933, -933, -933, -933, -933, -933, -933, + -933, -933, -933, -933, -933, -933, -933, -933 + }, + + { + 55, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + + -934, -934, -934, 1025, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934, -934, -934, + -934, -934, -934, -934, -934, -934, -934, -934 + }, + + { + 55, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, 1026, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935, -935, -935, + -935, -935, -935, -935, -935, -935, -935, -935 + }, + + { + 55, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, 1027, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + -936, -936, -936, -936, -936, -936, -936, -936, -936, -936, + + -936, -936, -936, -936, -936, -936, -936, -936 + }, + + { + 55, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, 1028, -937, -937, -937, -937, -937, -937, + + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937, -937, -937, + -937, -937, -937, -937, -937, -937, -937, -937 + }, + + { + 55, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, 1029, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938, -938, -938, + -938, -938, -938, -938, -938, -938, -938, -938 + }, + + { + 55, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, 1030, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939, -939, -939, + -939, -939, -939, -939, -939, -939, -939, -939 + + }, + + { + 55, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, 1031, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940, -940, -940, + -940, -940, -940, -940, -940, -940, -940, -940 + }, + + { + 55, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, 1032, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941, -941, -941, + -941, -941, -941, -941, -941, -941, -941, -941 + }, + + { + 55, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, 1033, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942, -942, -942, + -942, -942, -942, -942, -942, -942, -942, -942 + }, + + { + 55, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, 1034, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + + -943, -943, -943, -943, -943, -943, -943, -943, -943, -943, + -943, -943, -943, -943, -943, -943, -943, -943 + }, + + { + 55, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, 1035, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944, -944, -944, + -944, -944, -944, -944, -944, -944, -944, -944 + }, + + { + 55, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, 1036, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945, -945, -945, + -945, -945, -945, -945, -945, -945, -945, -945 + }, + + { + 55, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, 1037, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + -946, -946, -946, -946, -946, -946, -946, -946, -946, -946, + + -946, -946, -946, -946, -946, -946, -946, -946 + }, + + { + 55, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, 1038, -947, -947, -947, -947, -947, -947, + + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947, -947, -947, + -947, -947, -947, -947, -947, -947, -947, -947 + }, + + { + 55, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, 1039, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948, -948, -948, + -948, -948, -948, -948, -948, -948, -948, -948 + }, + + { + 55, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, 1040, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949, -949, -949, + -949, -949, -949, -949, -949, -949, -949, -949 + + }, + + { + 55, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, 1041, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950, -950, -950, + -950, -950, -950, -950, -950, -950, -950, -950 + }, + + { + 55, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, 1042, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951, -951, -951, + -951, -951, -951, -951, -951, -951, -951, -951 + }, + + { + 55, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + 1043, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952, -952, -952, + -952, -952, -952, -952, -952, -952, -952, -952 + }, + + { + 55, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, 1044, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + + -953, -953, -953, -953, -953, -953, -953, -953, -953, -953, + -953, -953, -953, -953, -953, -953, -953, -953 + }, + + { + 55, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + + -954, -954, -954, 1045, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954, -954, -954, + -954, -954, -954, -954, -954, -954, -954, -954 + }, + + { + 55, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, 1046, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955, -955, -955, + -955, -955, -955, -955, -955, -955, -955, -955 + }, + + { + 55, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, 1047, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + -956, -956, -956, -956, -956, -956, -956, -956, -956, -956, + + -956, -956, -956, -956, -956, -956, -956, -956 + }, + + { + 55, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957, -957, -957, + -957, -957, -957, -957, -957, -957, -957, -957 + }, + + { + 55, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, 1048, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958, -958, -958, + -958, -958, -958, -958, -958, -958, -958, -958 + }, + + { + 55, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, 1049, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959, -959, -959, + -959, -959, -959, -959, -959, -959, -959, -959 + + }, + + { + 55, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, 1050, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960, -960, -960, + -960, -960, -960, -960, -960, -960, -960, -960 + }, + + { + 55, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961, -961, -961, + -961, -961, -961, -961, -961, -961, -961, -961 + }, + + { + 55, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962, -962, -962, + -962, -962, -962, -962, -962, -962, -962, -962 + }, + + { + 55, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, 1051, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + + -963, -963, -963, -963, -963, -963, -963, -963, -963, -963, + -963, -963, -963, -963, -963, -963, -963, -963 + }, + + { + 55, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, 1052, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964, -964, -964, + -964, -964, -964, -964, -964, -964, -964, -964 + }, + + { + 55, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, 1053, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965, -965, -965, + -965, -965, -965, -965, -965, -965, -965, -965 + }, + + { + 55, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, 1054, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + -966, -966, -966, -966, -966, -966, -966, -966, -966, -966, + + -966, -966, -966, -966, -966, -966, -966, -966 + }, + + { + 55, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967, -967, -967, + -967, -967, -967, -967, -967, -967, -967, -967 + }, + + { + 55, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968, -968, -968, + -968, -968, -968, -968, -968, -968, -968, -968 + }, + + { + 55, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + + -969, -969, 1055, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969, -969, -969, + -969, -969, -969, -969, -969, -969, -969, -969 + + }, + + { + 55, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, 1056, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970, -970, -970, + -970, -970, -970, -970, -970, -970, -970, -970 + }, + + { + 55, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, 1057, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971, -971, -971, + -971, -971, -971, -971, -971, -971, -971, -971 + }, + + { + 55, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, 1058, -972, -972, -972, -972, -972, -972, -972, + + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972, -972, -972, + -972, -972, -972, -972, -972, -972, -972, -972 + }, + + { + 55, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, 1059, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + 1060, -973, -973, 1061, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + + -973, -973, -973, -973, -973, -973, -973, -973, -973, -973, + -973, -973, -973, -973, -973, -973, -973, -973 + }, + + { + 55, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, 1062, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974, -974, -974, + -974, -974, -974, -974, -974, -974, -974, -974 + }, + + { + 55, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, 1063, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975, -975, -975, + -975, -975, -975, -975, -975, -975, -975, -975 + }, + + { + 55, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, 1064, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + -976, -976, -976, -976, -976, -976, -976, -976, -976, -976, + + -976, -976, -976, -976, -976, -976, -976, -976 + }, + + { + 55, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, 1065, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977, -977, -977, + -977, -977, -977, -977, -977, -977, -977, -977 + }, + + { + 55, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + + -978, -978, -978, -978, -978, -978, 1066, -978, -978, -978, + -978, -978, 1067, -978, -978, -978, 1068, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, 1069, 1070, + 1071, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978, -978, -978, + -978, -978, -978, -978, -978, -978, -978, -978 + }, + + { + 55, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, 1072, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979, -979, -979, + -979, -979, -979, -979, -979, -979, -979, -979 + + }, + + { + 55, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, 1073, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980, -980, -980, + -980, -980, -980, -980, -980, -980, -980, -980 + }, + + { + 55, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, 1074, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981, -981, -981, + -981, -981, -981, -981, -981, -981, -981, -981 + }, + + { + 55, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, 1075, -982, -982, -982, -982, -982, -982, -982, + + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982, -982, -982, + -982, -982, -982, -982, -982, -982, -982, -982 + }, + + { + 55, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, 1076, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + + -983, -983, -983, -983, -983, -983, -983, -983, -983, -983, + -983, -983, -983, -983, -983, -983, -983, -983 + }, + + { + 55, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, 1077, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, 1078, -984, + + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984, -984, -984, + -984, -984, -984, -984, -984, -984, -984, -984 + }, + + { + 55, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, 1079, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985, -985, -985, + -985, -985, -985, -985, -985, -985, -985, -985 + }, + + { + 55, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, 1080, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + -986, -986, -986, -986, -986, -986, -986, -986, -986, -986, + + -986, -986, -986, -986, -986, -986, -986, -986 + }, + + { + 55, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, 1081, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987, -987, -987, + -987, -987, -987, -987, -987, -987, -987, -987 + }, + + { + 55, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, 1082, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988, -988, -988, + -988, -988, -988, -988, -988, -988, -988, -988 + }, + + { + 55, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + + -989, -989, 1083, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989, -989, -989, + -989, -989, -989, -989, -989, -989, -989, -989 + + }, + + { + 55, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, 1084, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990, -990, -990, + -990, -990, -990, -990, -990, -990, -990, -990 + }, + + { + 55, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991, -991, -991, + -991, -991, -991, -991, -991, -991, -991, -991 + }, + + { + 55, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, 1085, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992, -992, -992, + -992, -992, -992, -992, -992, -992, -992, -992 + }, + + { + 55, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + + -993, -993, -993, -993, -993, -993, -993, -993, -993, -993, + -993, -993, -993, -993, -993, -993, -993, -993 + }, + + { + 55, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994, -994, -994, + -994, -994, -994, -994, -994, -994, -994, -994 + }, + + { + 55, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + 1086, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995, -995, -995, + -995, -995, -995, -995, -995, -995, -995, -995 + }, + + { + 55, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + -996, -996, -996, -996, -996, -996, -996, -996, -996, -996, + + -996, -996, -996, -996, -996, -996, -996, -996 + }, + + { + 55, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997, -997, -997, + -997, -997, -997, -997, -997, -997, -997, -997 + }, + + { + 55, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998, -998, -998, + -998, -998, -998, -998, -998, -998, -998, -998 + }, + + { + 55, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + + -999, -999, 1087, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999, -999, -999, + -999, -999, -999, -999, -999, -999, -999, -999 + + }, + + { + 55,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000, 1088,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, + -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000 + }, + + { + 55,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001, 1089,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001, + -1001,-1001,-1001,-1001,-1001,-1001,-1001,-1001 + }, + + { + 55,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002, 1090,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002, + -1002,-1002,-1002,-1002,-1002,-1002,-1002,-1002 + }, + + { + 55,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003, 1091,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003, + -1003,-1003,-1003,-1003,-1003,-1003,-1003,-1003 + }, + + { + 55,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + + -1004,-1004,-1004,-1004, 1092,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004, + -1004,-1004,-1004,-1004,-1004,-1004,-1004,-1004 + }, + + { + 55,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005, 1093,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005, + -1005,-1005,-1005,-1005,-1005,-1005,-1005,-1005 + }, + + { + 55,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006, 1094,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006, + + -1006,-1006,-1006,-1006,-1006,-1006,-1006,-1006 + }, + + { + 55,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007, 1095,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007, + -1007,-1007,-1007,-1007,-1007,-1007,-1007,-1007 + }, + + { + 55,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008, 1096,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008, + -1008,-1008,-1008,-1008,-1008,-1008,-1008,-1008 + }, + + { + 55,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + + -1009,-1009, 1097,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009, + -1009,-1009,-1009,-1009,-1009,-1009,-1009,-1009 + + }, + + { + 55,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010, 1098,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010, + -1010,-1010,-1010,-1010,-1010,-1010,-1010,-1010 + }, + + { + 55,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011, + -1011,-1011,-1011,-1011,-1011,-1011,-1011,-1011 + }, + + { + 55,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012, + -1012,-1012,-1012,-1012,-1012,-1012,-1012,-1012 + }, + + { + 55,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013, 1099,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013, + -1013,-1013,-1013,-1013,-1013,-1013,-1013,-1013 + }, + + { + 55,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014, 1100,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014, 1100, 1100, 1100, 1100, 1100, + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + + 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, 1100, + 1100,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014, + -1014,-1014,-1014,-1014,-1014,-1014,-1014,-1014 + }, + + { + 55,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, 1101, 1101, + + 1101, 1101, 1101, 1101, 1101, 1101, 1101, 1101,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015, + -1015,-1015,-1015,-1015,-1015,-1015,-1015,-1015 + }, + + { + 55,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016, 1102,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, + 1102,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016, + + -1016,-1016,-1016,-1016,-1016,-1016,-1016,-1016 + }, + + { + 55,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017, + -1017,-1017,-1017,-1017,-1017,-1017,-1017,-1017 + }, + + { + 55,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + 1103,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018, + -1018,-1018,-1018,-1018,-1018,-1018,-1018,-1018 + }, + + { + 55,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + + -1019,-1019, 1104,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019, + -1019,-1019,-1019,-1019,-1019,-1019,-1019,-1019 + + }, + + { + 55,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + 1105,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020, + -1020,-1020,-1020,-1020,-1020,-1020,-1020,-1020 + }, + + { + 55,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021, + -1021,-1021,-1021,-1021,-1021,-1021,-1021,-1021 + }, + + { + 55,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022, + -1022,-1022,-1022,-1022,-1022,-1022,-1022,-1022 + }, + + { + 55,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023, + -1023,-1023,-1023,-1023,-1023,-1023,-1023,-1023 + }, + + { + 55,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024, + -1024,-1024,-1024,-1024,-1024,-1024,-1024,-1024 + }, + + { + 55,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025, + -1025,-1025,-1025,-1025,-1025,-1025,-1025,-1025 + }, + + { + 55,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026, + + -1026,-1026,-1026,-1026,-1026,-1026,-1026,-1026 + }, + + { + 55,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027, + -1027,-1027,-1027,-1027,-1027,-1027,-1027,-1027 + }, + + { + 55,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028, + -1028,-1028,-1028,-1028,-1028,-1028,-1028,-1028 + }, + + { + 55,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029, + -1029,-1029,-1029,-1029,-1029,-1029,-1029,-1029 + + }, + + { + 55,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030, + -1030,-1030,-1030,-1030,-1030,-1030,-1030,-1030 + }, + + { + 55,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031, + -1031,-1031,-1031,-1031,-1031,-1031,-1031,-1031 + }, + + { + 55,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032, + -1032,-1032,-1032,-1032,-1032,-1032,-1032,-1032 + }, + + { + 55,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033, + -1033,-1033,-1033,-1033,-1033,-1033,-1033,-1033 + }, + + { + 55,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034, + -1034,-1034,-1034,-1034,-1034,-1034,-1034,-1034 + }, + + { + 55,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035, + -1035,-1035,-1035,-1035,-1035,-1035,-1035,-1035 + }, + + { + 55,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036, + + -1036,-1036,-1036,-1036,-1036,-1036,-1036,-1036 + }, + + { + 55,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037, + -1037,-1037,-1037,-1037,-1037,-1037,-1037,-1037 + }, + + { + 55,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038, + -1038,-1038,-1038,-1038,-1038,-1038,-1038,-1038 + }, + + { + 55,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039, + -1039,-1039,-1039,-1039,-1039,-1039,-1039,-1039 + + }, + + { + 55,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040, + -1040,-1040,-1040,-1040,-1040,-1040,-1040,-1040 + }, + + { + 55,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041, + -1041,-1041,-1041,-1041,-1041,-1041,-1041,-1041 + }, + + { + 55,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042, + -1042,-1042,-1042,-1042,-1042,-1042,-1042,-1042 + }, + + { + 55,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043, + -1043,-1043,-1043,-1043,-1043,-1043,-1043,-1043 + }, + + { + 55,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044, + -1044,-1044,-1044,-1044,-1044,-1044,-1044,-1044 + }, + + { + 55,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045, + -1045,-1045,-1045,-1045,-1045,-1045,-1045,-1045 + }, + + { + 55,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046, 1106,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046, + + -1046,-1046,-1046,-1046,-1046,-1046,-1046,-1046 + }, + + { + 55,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047, + -1047,-1047,-1047,-1047,-1047,-1047,-1047,-1047 + }, + + { + 55,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048, + -1048,-1048,-1048,-1048,-1048,-1048,-1048,-1048 + }, + + { + 55,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049, + -1049,-1049,-1049,-1049,-1049,-1049,-1049,-1049 + + }, + + { + 55,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050, + -1050,-1050,-1050,-1050,-1050,-1050,-1050,-1050 + }, + + { + 55,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051, + -1051,-1051,-1051,-1051,-1051,-1051,-1051,-1051 + }, + + { + 55,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052, + -1052,-1052,-1052,-1052,-1052,-1052,-1052,-1052 + }, + + { + 55,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053, + -1053,-1053,-1053,-1053,-1053,-1053,-1053,-1053 + }, + + { + 55,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054, + -1054,-1054,-1054,-1054,-1054,-1054,-1054,-1054 + }, + + { + 55,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055, + -1055,-1055,-1055,-1055,-1055,-1055,-1055,-1055 + }, + + { + 55,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056, + + -1056,-1056,-1056,-1056,-1056,-1056,-1056,-1056 + }, + + { + 55,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057, + -1057,-1057,-1057,-1057,-1057,-1057,-1057,-1057 + }, + + { + 55,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058, + -1058,-1058,-1058,-1058,-1058,-1058,-1058,-1058 + }, + + { + 55,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059, + -1059,-1059,-1059,-1059,-1059,-1059,-1059,-1059 + + }, + + { + 55,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060, + -1060,-1060,-1060,-1060,-1060,-1060,-1060,-1060 + }, + + { + 55,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061, + -1061,-1061,-1061,-1061,-1061,-1061,-1061,-1061 + }, + + { + 55,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062, + -1062,-1062,-1062,-1062,-1062,-1062,-1062,-1062 + }, + + { + 55,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063, + -1063,-1063,-1063,-1063,-1063,-1063,-1063,-1063 + }, + + { + 55,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064, + -1064,-1064,-1064,-1064,-1064,-1064,-1064,-1064 + }, + + { + 55,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065, 1107,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065, + -1065,-1065,-1065,-1065,-1065,-1065,-1065,-1065 + }, + + { + 55,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066, + + -1066,-1066,-1066,-1066,-1066,-1066,-1066,-1066 + }, + + { + 55,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067, + -1067,-1067,-1067,-1067,-1067,-1067,-1067,-1067 + }, + + { + 55,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068, + -1068,-1068,-1068,-1068,-1068,-1068,-1068,-1068 + }, + + { + 55,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069, + -1069,-1069,-1069,-1069,-1069,-1069,-1069,-1069 + + }, + + { + 55,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070, + -1070,-1070,-1070,-1070,-1070,-1070,-1070,-1070 + }, + + { + 55,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071, + -1071,-1071,-1071,-1071,-1071,-1071,-1071,-1071 + }, + + { + 55,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072, + -1072,-1072,-1072,-1072,-1072,-1072,-1072,-1072 + }, + + { + 55,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073, + -1073,-1073,-1073,-1073,-1073,-1073,-1073,-1073 + }, + + { + 55,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074, + -1074,-1074,-1074,-1074,-1074,-1074,-1074,-1074 + }, + + { + 55,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075, + -1075,-1075,-1075,-1075,-1075,-1075,-1075,-1075 + }, + + { + 55,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076, + + -1076,-1076,-1076,-1076,-1076,-1076,-1076,-1076 + }, + + { + 55,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077, + -1077,-1077,-1077,-1077,-1077,-1077,-1077,-1077 + }, + + { + 55,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078, + -1078,-1078,-1078,-1078,-1078,-1078,-1078,-1078 + }, + + { + 55,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079, + -1079,-1079,-1079,-1079,-1079,-1079,-1079,-1079 + + }, + + { + 55,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080, + -1080,-1080,-1080,-1080,-1080,-1080,-1080,-1080 + }, + + { + 55,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081, + -1081,-1081,-1081,-1081,-1081,-1081,-1081,-1081 + }, + + { + 55,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082, + -1082,-1082,-1082,-1082,-1082,-1082,-1082,-1082 + }, + + { + 55,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083, + -1083,-1083,-1083,-1083,-1083,-1083,-1083,-1083 + }, + + { + 55,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084, + -1084,-1084,-1084,-1084,-1084,-1084,-1084,-1084 + }, + + { + 55,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085, + -1085,-1085,-1085,-1085,-1085,-1085,-1085,-1085 + }, + + { + 55,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086, + + -1086,-1086,-1086,-1086,-1086,-1086,-1086,-1086 + }, + + { + 55,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087, + -1087,-1087,-1087,-1087,-1087,-1087,-1087,-1087 + }, + + { + 55,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088, + -1088,-1088,-1088,-1088,-1088,-1088,-1088,-1088 + }, + + { + 55,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089, + -1089,-1089,-1089,-1089,-1089,-1089,-1089,-1089 + + }, + + { + 55,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090, + -1090,-1090,-1090,-1090,-1090,-1090,-1090,-1090 + }, + + { + 55,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091, + -1091,-1091,-1091,-1091,-1091,-1091,-1091,-1091 + }, + + { + 55,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092, + -1092,-1092,-1092,-1092,-1092,-1092,-1092,-1092 + }, + + { + 55,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093, + -1093,-1093,-1093,-1093,-1093,-1093,-1093,-1093 + }, + + { + 55,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094, + -1094,-1094,-1094,-1094,-1094,-1094,-1094,-1094 + }, + + { + 55,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095, + -1095,-1095,-1095,-1095,-1095,-1095,-1095,-1095 + }, + + { + 55,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096, + + -1096,-1096,-1096,-1096,-1096,-1096,-1096,-1096 + }, + + { + 55,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097, + -1097,-1097,-1097,-1097,-1097,-1097,-1097,-1097 + }, + + { + 55,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098, + -1098,-1098,-1098,-1098,-1098,-1098,-1098,-1098 + }, + + { + 55,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099, + -1099,-1099,-1099,-1099,-1099,-1099,-1099,-1099 + + }, + + { + 55,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100, + -1100,-1100,-1100,-1100,-1100,-1100,-1100,-1100 + }, + + { + 55,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101, + -1101,-1101,-1101,-1101,-1101,-1101,-1101,-1101 + }, + + { + 55,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102, 1108,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102, + -1102,-1102,-1102,-1102,-1102,-1102,-1102,-1102 + }, + + { + 55,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103, + -1103,-1103,-1103,-1103,-1103,-1103,-1103,-1103 + }, + + { + 55,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104, + -1104,-1104,-1104,-1104,-1104,-1104,-1104,-1104 + }, + + { + 55,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105, + -1105,-1105,-1105,-1105,-1105,-1105,-1105,-1105 + }, + + { + 55,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106, 1109,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106, + + -1106,-1106,-1106,-1106,-1106,-1106,-1106,-1106 + }, + + { + 55,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107, 1110,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107, + -1107,-1107,-1107,-1107,-1107,-1107,-1107,-1107 + }, + + { + 55,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108, 1111,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108, + -1108,-1108,-1108,-1108,-1108,-1108,-1108,-1108 + }, + + { + 55,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + + -1109,-1109, 1112,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109, + -1109,-1109,-1109,-1109,-1109,-1109,-1109,-1109 + + }, + + { + 55,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110, 1113,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110, 1114,-1110, 1114,-1110,-1110, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110, + -1110,-1110,-1110,-1110,-1110,-1110,-1110,-1110 + }, + + { + 55,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111, 1116,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111, 1117,-1111, 1117,-1111,-1111, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111, + -1111,-1111,-1111,-1111,-1111,-1111,-1111,-1111 + }, + + { + 55,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112, 1119,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112, + -1112,-1112,-1112,-1112,-1112,-1112,-1112,-1112 + }, + + { + 55,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113, 1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113, 1114,-1113, 1114,-1113,-1113, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113, + -1113,-1113,-1113,-1113,-1113,-1113,-1113,-1113 + }, + + { + 55,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, 1115, 1115, + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114, + -1114,-1114,-1114,-1114,-1114,-1114,-1114,-1114 + }, + + { + 55,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115, 1120,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115, 1121, 1115, 1115, + + 1115, 1115, 1115, 1115, 1115, 1115, 1115, 1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115, + -1115,-1115,-1115,-1115,-1115,-1115,-1115,-1115 + }, + + { + 55,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116, 1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116, 1117,-1116, 1117,-1116,-1116, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116, + + -1116,-1116,-1116,-1116,-1116,-1116,-1116,-1116 + }, + + { + 55,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117, + -1117,-1117,-1117,-1117,-1117,-1117,-1117,-1117 + }, + + { + 55,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, 1118, 1118, + 1118, 1118, 1118, 1118, 1118, 1118, 1118, 1118,-1118,-1118, + + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118, + -1118,-1118,-1118,-1118,-1118,-1118,-1118,-1118 + }, + + { + 55,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + + -1119,-1119, 1122,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119, + -1119,-1119,-1119,-1119,-1119,-1119,-1119,-1119 + + }, + + { + 55,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120, 1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120, 1121,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120, + -1120,-1120,-1120,-1120,-1120,-1120,-1120,-1120 + }, + + { + 55, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + -1121, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123 + }, + + { + 55,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122, 1124,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122, + -1122,-1122,-1122,-1122,-1122,-1122,-1122,-1122 + }, + + { + 55, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + + -1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, + 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123 + }, + + { + 55,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124, 1125,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124, + -1124,-1124,-1124,-1124,-1124,-1124,-1124,-1124 + }, + + { + 55,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125, 1126,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125, + -1125,-1125,-1125,-1125,-1125,-1125,-1125,-1125 + }, + + { + 55,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126, 1127,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126, + + -1126,-1126,-1126,-1126,-1126,-1126,-1126,-1126 + }, + + { + 55,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127, 1128,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127, + -1127,-1127,-1127,-1127,-1127,-1127,-1127,-1127 + }, + + { + 55,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128, 1129,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128, + -1128,-1128,-1128,-1128,-1128,-1128,-1128,-1128 + }, + + { + 55,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + + -1129,-1129, 1130,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129, + -1129,-1129,-1129,-1129,-1129,-1129,-1129,-1129 + + }, + + { + 55,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130, 1131,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130, + -1130,-1130,-1130,-1130,-1130,-1130,-1130,-1130 + }, + + { + 55,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131, 1132,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131, + -1131,-1131,-1131,-1131,-1131,-1131,-1131,-1131 + }, + + { + 55,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132, 1133,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132, + -1132,-1132,-1132,-1132,-1132,-1132,-1132,-1132 + }, + + { + 55,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133, 1134,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133, + -1133,-1133,-1133,-1133,-1133,-1133,-1133,-1133 + }, + + { + 55,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134, 1135,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134, + -1134,-1134,-1134,-1134,-1134,-1134,-1134,-1134 + }, + + { + 55,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135, 1136,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135, + -1135,-1135,-1135,-1135,-1135,-1135,-1135,-1135 + }, + + { + 55,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136, 1137,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136, + + -1136,-1136,-1136,-1136,-1136,-1136,-1136,-1136 + }, + + { + 55,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137, 1138,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137, + -1137,-1137,-1137,-1137,-1137,-1137,-1137,-1137 + }, + + { + 55,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138, 1139,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138, + -1138,-1138,-1138,-1138,-1138,-1138,-1138,-1138 + }, + + { + 55,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + + -1139,-1139, 1140,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139, + -1139,-1139,-1139,-1139,-1139,-1139,-1139,-1139 + + }, + + { + 55,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140, 1141,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140, + -1140,-1140,-1140,-1140,-1140,-1140,-1140,-1140 + }, + + { + 55,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141, 1142,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141, + -1141,-1141,-1141,-1141,-1141,-1141,-1141,-1141 + }, + + { + 55,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142, 1143,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142, + -1142,-1142,-1142,-1142,-1142,-1142,-1142,-1142 + }, + + { + 55,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143, 1144,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143, + -1143,-1143,-1143,-1143,-1143,-1143,-1143,-1143 + }, + + { + 55,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144, 1145,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144, + -1144,-1144,-1144,-1144,-1144,-1144,-1144,-1144 + }, + + { + 55,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145, 1146,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145, + -1145,-1145,-1145,-1145,-1145,-1145,-1145,-1145 + }, + + { + 55,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146, 1147,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146, + + -1146,-1146,-1146,-1146,-1146,-1146,-1146,-1146 + }, + + { + 55,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147, 1148,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147, + -1147,-1147,-1147,-1147,-1147,-1147,-1147,-1147 + }, + + { + 55,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148, 1149,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148, + -1148,-1148,-1148,-1148,-1148,-1148,-1148,-1148 + }, + + { + 55,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + + -1149,-1149, 1150,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149, + -1149,-1149,-1149,-1149,-1149,-1149,-1149,-1149 + + }, + + { + 55,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150, 1151,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150, + -1150,-1150,-1150,-1150,-1150,-1150,-1150,-1150 + }, + + { + 55,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151, 1152,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151, + -1151,-1151,-1151,-1151,-1151,-1151,-1151,-1151 + }, + + { + 55,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152, 1153,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152, + -1152,-1152,-1152,-1152,-1152,-1152,-1152,-1152 + }, + + { + 55,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153, 1154,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153, + -1153,-1153,-1153,-1153,-1153,-1153,-1153,-1153 + }, + + { + 55,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154, 1155,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154, + -1154,-1154,-1154,-1154,-1154,-1154,-1154,-1154 + }, + + { + 55,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155, 1156,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155, + -1155,-1155,-1155,-1155,-1155,-1155,-1155,-1155 + }, + + { + 55,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156, 1157,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156, + + -1156,-1156,-1156,-1156,-1156,-1156,-1156,-1156 + }, + + { + 55,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157, 1158,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157, + -1157,-1157,-1157,-1157,-1157,-1157,-1157,-1157 + }, + + { + 55,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158, 1159,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158, + -1158,-1158,-1158,-1158,-1158,-1158,-1158,-1158 + }, + + { + 55,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + + -1159,-1159, 1160,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159, + -1159,-1159,-1159,-1159,-1159,-1159,-1159,-1159 + + }, + + { + 55,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160, 1161,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160, + -1160,-1160,-1160,-1160,-1160,-1160,-1160,-1160 + }, + + { + 55,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161, 1162,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161, + -1161,-1161,-1161,-1161,-1161,-1161,-1161,-1161 + }, + + { + 55,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162, 1163,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162, + -1162,-1162,-1162,-1162,-1162,-1162,-1162,-1162 + }, + + { + 55,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163, 1164,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163, + -1163,-1163,-1163,-1163,-1163,-1163,-1163,-1163 + }, + + { + 55,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164, 1165,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164, + -1164,-1164,-1164,-1164,-1164,-1164,-1164,-1164 + }, + + { + 55,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165, 1166,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165, + -1165,-1165,-1165,-1165,-1165,-1165,-1165,-1165 + }, + + { + 55,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166, 1167,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166, + + -1166,-1166,-1166,-1166,-1166,-1166,-1166,-1166 + }, + + { + 55,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167, 1168,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167, + -1167,-1167,-1167,-1167,-1167,-1167,-1167,-1167 + }, + + { + 55,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168, 1169,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168, + -1168,-1168,-1168,-1168,-1168,-1168,-1168,-1168 + }, + + { + 55,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + + -1169,-1169, 1170,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169, + -1169,-1169,-1169,-1169,-1169,-1169,-1169,-1169 + + }, + + { + 55,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170, 1171,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170, + -1170,-1170,-1170,-1170,-1170,-1170,-1170,-1170 + }, + + { + 55,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171, 1172,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171, + -1171,-1171,-1171,-1171,-1171,-1171,-1171,-1171 + }, + + { + 55,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172, 1173,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172, + -1172,-1172,-1172,-1172,-1172,-1172,-1172,-1172 + }, + + { + 55,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173, 1174,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173, + -1173,-1173,-1173,-1173,-1173,-1173,-1173,-1173 + }, + + { + 55,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174, 1175,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174, + -1174,-1174,-1174,-1174,-1174,-1174,-1174,-1174 + }, + + { + 55,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175, 1176,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175, + -1175,-1175,-1175,-1175,-1175,-1175,-1175,-1175 + }, + + { + 55,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176, 1177,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176, + + -1176,-1176,-1176,-1176,-1176,-1176,-1176,-1176 + }, + + { + 55,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177, 1178,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177, + -1177,-1177,-1177,-1177,-1177,-1177,-1177,-1177 + }, + + { + 55,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178, 1179,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178, + -1178,-1178,-1178,-1178,-1178,-1178,-1178,-1178 + }, + + { + 55,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + + -1179,-1179, 1180,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179, + -1179,-1179,-1179,-1179,-1179,-1179,-1179,-1179 + + }, + + { + 55,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180, 1181,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180, + -1180,-1180,-1180,-1180,-1180,-1180,-1180,-1180 + }, + + { + 55,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181, 1182,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181, + -1181,-1181,-1181,-1181,-1181,-1181,-1181,-1181 + }, + + { + 55,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182, 1183,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182, + -1182,-1182,-1182,-1182,-1182,-1182,-1182,-1182 + }, + + { + 55,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183, 1184,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183, + -1183,-1183,-1183,-1183,-1183,-1183,-1183,-1183 + }, + + { + 55,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184, 1185,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184, + -1184,-1184,-1184,-1184,-1184,-1184,-1184,-1184 + }, + + { + 55,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185, 1186,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185, + -1185,-1185,-1185,-1185,-1185,-1185,-1185,-1185 + }, + + { + 55,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186, 1187,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186, + + -1186,-1186,-1186,-1186,-1186,-1186,-1186,-1186 + }, + + { + 55,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187, 1188,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187, + -1187,-1187,-1187,-1187,-1187,-1187,-1187,-1187 + }, + + { + 55,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188, 1189,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188, + -1188,-1188,-1188,-1188,-1188,-1188,-1188,-1188 + }, + + { + 55,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + + -1189,-1189, 1190,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189, + -1189,-1189,-1189,-1189,-1189,-1189,-1189,-1189 + + }, + + { + 55,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190, + -1190,-1190,-1190,-1190,-1190,-1190,-1190,-1190 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 293 +#define YY_END_OF_BUFFER 294 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[1191] = + { 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 294, 293, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 150, 150, 150, + 198, 198, 198, 151, 151, 151, 247, 247, 247, 201, + 199, 200, 251, 251, 255, 255, 258, 258, 259, 259, + + 262, 262, 264, 264, 266, 266, 268, 268, 267, 270, + 270, 270, 269, 272, 272, 272, 271, 274, 274, 276, + 276, 278, 277, 280, 280, 283, 283, 283, 281, 284, + 293, 285, 293, 293, 293, 290, 293, 291, 293, 292, + 0, 0, 107, 0, 0, 0, 0, 108, 5, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 18, 16, + 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 265, 267, 0, + 269, 269, 269, 269, 0, 0, 271, 271, 271, 271, + 0, 0, 273, 0, 275, 277, 279, 0, 281, 282, + 282, 281, 0, 0, 287, 0, 0, 0, 285, 0, + 0, 0, 285, 0, 0, 0, 290, 0, 291, 0, + 292, 0, 109, 0, 0, 0, 0, 0, 0, 0, + 110, 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, 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, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 147, 148, 149, 140, 139, 132, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, + 249, 250, 252, 253, 254, 0, 0, 0, 0, 0, + 269, 0, 269, 271, 0, 271, 282, 0, 282, 0, + + 0, 286, 0, 0, 0, 288, 0, 0, 0, 285, + 0, 0, 125, 126, 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, 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, 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, + 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, 0, 0, 0, 0, 0, 260, 261, 0, + 263, 289, 0, 0, 0, 286, 0, 0, 0, 285, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 20, 0, 94, 24, 98, + 95, 99, 21, 0, 0, 7, 3, 10, 22, 9, + 8, 23, 0, 0, 0, 0, 100, 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, 17, 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, 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, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 257, 0, 286, 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, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 141, 142, 143, 144, 145, + 146, 138, 137, 136, 135, 134, 130, 131, 187, 189, + 192, 196, 188, 191, 195, 190, 194, 193, 183, 161, + 180, 184, 197, 172, 162, 158, 167, 178, 181, 185, + 173, 170, 175, 163, 159, 168, 156, 165, 177, 179, + 182, 186, 174, 171, 176, 154, 155, 164, 160, 169, + 157, 166, 152, 153, 237, 239, 242, 246, 238, 241, + 245, 240, 244, 243, 233, 211, 230, 234, 222, 208, + + 212, 217, 228, 231, 235, 220, 223, 225, 206, 209, + 213, 218, 215, 227, 229, 232, 236, 204, 221, 224, + 226, 205, 202, 207, 210, 214, 219, 216, 203, 256, + 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, 74, 0, 0, 0, + 44, 42, 0, 0, 0, 0, 12, 11, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 71, 0, 13, 15, 0, 75, 76, 80, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 77, 0, 0, 0, 0, 25, 0, 0, 0, + 79, 103, 105, 101, 88, 93, 55, 92, 91, 104, + 106, 102, 89, 111, 112, 84, 86, 90, 48, 47, + 49, 46, 32, 31, 83, 0, 73, 85, 87, 40, + 39, 43, 41, 54, 52, 51, 53, 50, 34, 38, + 36, 33, 37, 35, 0, 68, 69, 67, 64, 65, + 66, 70, 124, 29, 121, 122, 123, 120, 117, 118, + 119, 113, 114, 72, 14, 82, 59, 62, 45, 63, + 26, 30, 61, 60, 28, 27, 56, 57, 19, 78, + + 127, 0, 115, 58, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 2, 0, 1, + 1, 0, 1, 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, 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, 0, 0, 128 + } ; + +static const yy_state_type yy_NUL_trans[1191] = + { 0, + 56, 57, 78, 78, 81, 81, 84, 84, 87, 87, + 90, 90, 92, 92, 93, 93, 95, 95, 97, 97, + 99, 99, 101, 101, 103, 103, 105, 105, 107, 107, + 110, 110, 114, 114, 118, 118, 120, 120, 122, 122, + 124, 124, 126, 126, 56, 56, 131, 131, 135, 135, + 137, 137, 139, 139, 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, 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, 242, 0, + 244, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 254, 0, 258, 262, 266, 0, 268, 0, 270, 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, 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, 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, 0, 0, 0, 0, 0, + 0, 242, 0, 244, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 254, 0, 400, 401, 405, 0, 409, + 262, 262, 0, 262, 262, 266, 0, 268, 0, 270, + 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, 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, 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, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, + + 401, 0, 401, 401, 405, 0, 405, 555, 405, 0, + 409, 559, 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, 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, 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, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 550, + 0, 0, 400, 738, 555, 0, 555, 555, 559, 0, + 559, 559, 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, 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, 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, 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, + 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 738, 0, 738, + 738, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, + 1123, 0, 1123, 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, 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, 0, 0, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcspih.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* wcspih.l is a Flex description file containing the definition of a lexical +* scanner for parsing the WCS keyrecords from a FITS primary image or image +* extension header. +* +* wcspih.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description +* of the user interface and operating notes. +* +* Implementation notes +* -------------------- +* Use of the WCSAXESa keyword is not mandatory. Its default value is "the +* larger of NAXIS and the largest index of these keywords [i.e. CRPIXj, PCi_j +* or CDi_j, CDELTi, CTYPEi, CRVALi, and CUNITi] found in the FITS header". +* Consequently the definition of WCSAXESa effectively invalidates the use of +* NAXIS for determining the number of coordinate axes and forces a preliminary +* pass through the header to determine the "largest index" in headers where +* WCSAXESa was omitted. +* +* Furthermore, since the use of WCSAXESa is optional, there is no way to +* determine the number of coordinate representations (the "a" value) other +* than by parsing all of the WCS keywords in the header; even if WCSAXESa was +* specified for some representations it cannot be known in advance whether it +* was specified for all of those present in the header. +* +* Hence the definition of WCSAXESa forces the scanner to be implemented in two +* passes. The first pass is used to determine the number of coordinate +* representations (up to 27) and the number of coordinate axes in each. +* Effectively WCSAXESa is ignored unless it exceeds the "largest index" in +* which case the keywords for the extra axes assume their default values. The +* number of PVi_ma and PSi_ma keywords in each representation is also counted +* in the first pass. +* +* On completion of the first pass, memory is allocated for an array of the +* required number of wcsprm structs and each of these is initialized +* appropriately. These structs are filled in the second pass. +* +* The parser does not check for duplicated keywords, it accepts the last +* encountered. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Indices for parameterized keywords. */ +/* Alternate coordinate system identifier. */ +/* Keyvalue data types. */ +/* Inline comment syntax. */ +/* Exclusive start states. */ + + + + + + +#line 110 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +#include +#include +#include +#include +#include +#include + +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcsutil.h" + +#include "dis.h" +#include "wcs.h" +#include "wcshdr.h" + +#define INTEGER 0 +#define FLOAT 1 +#define FLOAT2 2 +#define STRING 3 +#define RECORD 4 + +#define PRIOR 1 +#define SEQUENT 2 + +#define SIP 1 +#define DSS 2 +#define WAT 3 + +// User data associated with yyscanner. +struct wcspih_extra { + // Values passed to YY_INPUT. + char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcspih_scanner(char *header, int nkeyrec, int relax, \ + int ctrl, int *nreject, int *nwcs, struct wcsprm **wcs, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; +static int wcspih_final(int ndp[], int ndq[], int distran, double dsstmp[], + char *wat[], int *nwcs, struct wcsprm **wcs); +static int wcspih_init1(int naxis, int alts[], int dpq[], int npv[], + int nps[], int ndp[], int ndq[], int auxprm, int distran, + int *nwcs, struct wcsprm **wcs); +static void wcspih_pass1(int naxis, int i, int j, char a, int distype, + int alts[], int dpq[], int *npptr); + +static int wcspih_jdref(double *wptr, const double *jdref); +static int wcspih_jdrefi(double *wptr, const double *jdrefi); +static int wcspih_jdreff(double *wptr, const double *jdreff); +static int wcspih_epoch(double *wptr, const double *epoch); +static int wcspih_vsource(double *wptr, const double *vsource); + +static int wcspih_timepixr(double timepixr); + +#line 21598 "wcspih.c" +#line 21599 "wcspih.c" + +#define INITIAL 0 +#define CCia 1 +#define CCi_ja 2 +#define CCCCCia 3 +#define CCi_ma 4 +#define CCCCCCCa 5 +#define CCCCCCCC 6 +#define CROTAi 7 +#define PROJPn 8 +#define SIP2 9 +#define SIP3 10 +#define DSSAMDXY 11 +#define PLTDECSN 12 +#define VALUE 13 +#define INTEGER_VAL 14 +#define FLOAT_VAL 15 +#define FLOAT2_VAL 16 +#define STRING_VAL 17 +#define RECORD_VAL 18 +#define RECFIELD 19 +#define RECCOLON 20 +#define RECVALUE 21 +#define RECEND 22 +#define COMMENT 23 +#define DISCARD 24 +#define ERROR 25 +#define FLUSH 26 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct wcspih_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + yy_size_t yy_n_chars; + yy_size_t yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + yy_size_t yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 187 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" + +#line 189 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" + int p, q; + char *errmsg, errtxt[80], *keyname, strtmp[80], *wat[2], *watstr; + int alts[27], dpq[27], inttmp, ndp[27], ndq[27], nps[27], npv[27], + rectype; + double dbltmp, dbl2tmp[2], dsstmp[20]; + struct auxprm auxtem; + struct disprm distem; + struct wcsprm wcstem; + + int naxis = 0; + for (int ialt = 0; ialt < 27; ialt++) { + alts[ialt] = 0; + dpq[ialt] = 0; + npv[ialt] = 0; + nps[ialt] = 0; + ndp[ialt] = 0; + ndq[ialt] = 0; + } + + // Our handle on the input stream. + char *keyrec = header; + char *hptr = header; + char *keep = 0x0; + + // For keeping tallies of keywords found. + *nreject = 0; + int nvalid = 0; + int nother = 0; + + // If strict, then also reject. + if (relax & WCSHDR_strict) relax |= WCSHDR_reject; + + // Keyword indices, as used in the WCS papers, e.g. PCi_ja, PVi_ma. + int i = 0; + int j = 0; + int m = 0; + char a = ' '; + + // For decoding the keyvalue. + int valtype = -1; + int distype = 0; + void *vptr = 0x0; + + // For keywords that require special handling. + int altlin = 0; + int *npptr = 0x0; + int (*chekval)(double) = 0x0; + int (*special)(double *, const double *) = 0x0; + int auxprm = 0; + int naux = 0; + int distran = 0; + int sipflag = 0; + int dssflag = 0; + int watflag = 0; + int watn = 0; + + // The data structures produced. + *nwcs = 0; + *wcs = 0x0; + + // Control variables. + int ipass = 1; + int npass = 2; + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return WCSHDRERR_PARSER; + } + + BEGIN(INITIAL); + + +#line 21949 "wcspih.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + + ++yy_cp; + } + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos + 1; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 265 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + keyname = "NAXISn"; + + if (ipass == 1) { + sscanf(yytext, "NAXIS = %d", &naxis); + if (naxis < 0) naxis = 0; + BEGIN(FLUSH); + + } else { + sscanf(yytext, "NAXIS = %d", &i); + + if (i < 0) { + errmsg = "negative value of NAXIS ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 285 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + sscanf(yytext, "WCSAXES%c= %d", &a, &i); + + if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCSAXESa"; + BEGIN(COMMENT); + } + } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 301 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crpix); + + keyname = "CRPIXja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 309 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + keyname = "PCi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 318 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + keyname = "CDi_ja"; + BEGIN(CCi_ja); + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 327 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + keyname = "CDELTia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 335 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "CROTAn"; + BEGIN(CROTAi); + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 344 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.cunit); + + keyname = "CUNITia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 352 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.ctype); + + keyname = "CTYPEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 360 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crval); + + keyname = "CRVALia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 368 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.lonpole); + + keyname = "LONPOLEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 376 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.latpole); + + keyname = "LATPOLEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 384 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + keyname = "RESTFRQa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 392 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & WCSHDR_strict) { + errmsg = "the RESTFREQ keyword is deprecated, use RESTFRQa"; + BEGIN(ERROR); + + } else { + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + unput(' '); + + keyname = "RESTFREQ"; + BEGIN(CCCCCCCa); + } + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 408 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.restwav); + + keyname = "RESTWAVa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 416 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + npptr = npv; + + keyname = "PVi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 425 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.pv); + npptr = npv; + + keyname = "PROJPn"; + BEGIN(PROJPn); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 434 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.ps); + npptr = nps; + + keyname = "PSi_ma"; + BEGIN(CCi_ma); + } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 443 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + sscanf(yytext, "VELREF%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the VELREF keyword is deprecated, use SPECSYSa"; + BEGIN(ERROR); + + } else if ((a == ' ') || (relax & WCSHDR_VELREFa)) { + valtype = INTEGER; + vptr = &(wcstem.velref); + + unput(a); + + keyname = "VELREF"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "VELREF keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 468 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = &(wcstem.cname); + + keyname = "CNAMEia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 476 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.crder); + + keyname = "CRDERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 484 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.csyer); + + keyname = "CSYERia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 492 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.czphs); + + keyname = "CZPHSia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 500 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.cperi); + + keyname = "CPERIia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 508 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.wcsname; + + keyname = "WCSNAMEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 516 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.timesys; + + keyname = "TIMESYS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 524 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.trefpos; + + keyname = "TREFPOS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 532 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.trefdir; + + keyname = "TREFDIR"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 540 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.plephem; + + keyname = "PLEPHEM"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 548 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.timeunit; + + keyname = "TIMEUNIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 31: +#line 557 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 32: +YY_RULE_SETUP +#line 557 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if ((yytext[4] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = STRING; + vptr = wcstem.dateref; + + keyname = "DATEREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the DATE-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 33: +#line 575 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 34: +YY_RULE_SETUP +#line 575 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + + keyname = "MJDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 35: +#line 593 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 36: +YY_RULE_SETUP +#line 593 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + + keyname = "MJDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 37: +#line 612 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 38: +YY_RULE_SETUP +#line 612 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref + 1; + + keyname = "MJDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 39: +#line 630 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 40: +YY_RULE_SETUP +#line 630 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + special = wcspih_jdref; + + keyname = "JDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 41: +#line 649 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 42: +YY_RULE_SETUP +#line 649 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcspih_jdrefi; + + keyname = "JDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 43: +#line 669 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 44: +YY_RULE_SETUP +#line 669 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcspih_jdreff; + + keyname = "JDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 45: +YY_RULE_SETUP +#line 687 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timeoffs); + + keyname = "TIMEOFFS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 46: +YY_RULE_SETUP +#line 695 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.dateobs; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 47: +YY_RULE_SETUP +#line 704 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.datebeg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 48: +YY_RULE_SETUP +#line 713 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.dateavg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-AVG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 49: +YY_RULE_SETUP +#line 722 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.dateend; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 50: +YY_RULE_SETUP +#line 731 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdobs); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 51: +YY_RULE_SETUP +#line 740 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdbeg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-BEG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 52: +YY_RULE_SETUP +#line 749 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdavg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-AVG"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 53: +YY_RULE_SETUP +#line 758 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.mjdend); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-END"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 54: +YY_RULE_SETUP +#line 767 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.jepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "JEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 55: +YY_RULE_SETUP +#line 776 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.bepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "BEPOCH"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 56: +YY_RULE_SETUP +#line 785 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstart); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTART"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 57: +YY_RULE_SETUP +#line 794 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.tstop); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTOP"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 58: +YY_RULE_SETUP +#line 803 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.xposure); + if (ctrl < -10) keep = keyrec; + + keyname = "XPOSURE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 59: +YY_RULE_SETUP +#line 812 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.telapse); + if (ctrl < -10) keep = keyrec; + + keyname = "TELAPSE"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 60: +YY_RULE_SETUP +#line 821 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timsyer); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMSYER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 61: +YY_RULE_SETUP +#line 830 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timrder); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMRDER"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 62: +YY_RULE_SETUP +#line 839 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timedel); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEDEL"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 63: +YY_RULE_SETUP +#line 848 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.timepixr); + chekval = wcspih_timepixr; + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEPIXR"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 64: +YY_RULE_SETUP +#line 858 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-X"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 65: +YY_RULE_SETUP +#line 867 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 1; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-Y"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 66: +YY_RULE_SETUP +#line 876 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 2; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-Z"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 67: +YY_RULE_SETUP +#line 885 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 3; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-L"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 68: +YY_RULE_SETUP +#line 894 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 4; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-B"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 69: +YY_RULE_SETUP +#line 903 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = wcstem.obsgeo + 5; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-H"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 70: +YY_RULE_SETUP +#line 912 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.obsorbit; + + keyname = "OBSORBIT"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 71: +YY_RULE_SETUP +#line 920 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.radesys; + + keyname = "RADESYSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 72: +YY_RULE_SETUP +#line 928 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & WCSHDR_RADECSYS) { + valtype = STRING; + vptr = wcstem.radesys; + + unput(' '); + + keyname = "RADECSYS"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the RADECSYS keyword is deprecated, use RADESYSa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 73: +YY_RULE_SETUP +#line 947 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + sscanf(yytext, "EPOCH%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the EPOCH keyword is deprecated, use EQUINOXa"; + BEGIN(ERROR); + + } else if (a == ' ' || relax & WCSHDR_EPOCHa) { + valtype = FLOAT; + vptr = &(wcstem.equinox); + special = wcspih_epoch; + + unput(a); + + keyname = "EPOCH"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "EPOCH keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 74: +YY_RULE_SETUP +#line 973 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.equinox); + + keyname = "EQUINOXa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 75: +YY_RULE_SETUP +#line 981 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.specsys; + + keyname = "SPECSYSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 76: +YY_RULE_SETUP +#line 989 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.ssysobs; + + keyname = "SSYSOBSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 77: +YY_RULE_SETUP +#line 997 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velosys); + + keyname = "VELOSYSa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 78: +YY_RULE_SETUP +#line 1005 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcspih_vsource; + + yyless(7); + + keyname = "VSOURCEa"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the VSOURCEa keyword is deprecated, use ZSOURCEa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 79: +YY_RULE_SETUP +#line 1025 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.zsource); + + keyname = "ZSOURCEa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 80: +YY_RULE_SETUP +#line 1033 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + vptr = wcstem.ssyssrc; + + keyname = "SSYSSRCa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 81: +YY_RULE_SETUP +#line 1041 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + vptr = &(wcstem.velangl); + + keyname = "VELANGLa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 82: +YY_RULE_SETUP +#line 1049 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.rsun_ref); + + keyname = "RSUN_REF"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 83: +YY_RULE_SETUP +#line 1058 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.dsun_obs); + + keyname = "DSUN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 84: +YY_RULE_SETUP +#line 1067 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.crln_obs); + + keyname = "CRLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 85: +YY_RULE_SETUP +#line 1076 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hgln_obs); + + keyname = "HGLN_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 86: +#line 1086 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 87: +YY_RULE_SETUP +#line 1086 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hglt_obs); + + keyname = "HGLT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 88: +YY_RULE_SETUP +#line 1095 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.a_radius); + + keyname = "A_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 89: +YY_RULE_SETUP +#line 1104 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.b_radius); + + keyname = "B_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 90: +YY_RULE_SETUP +#line 1113 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.c_radius); + + keyname = "C_RADIUS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 91: +YY_RULE_SETUP +#line 1122 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blon_obs); + + keyname = "BLON_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 92: +YY_RULE_SETUP +#line 1131 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blat_obs); + + keyname = "BLAT_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 93: +YY_RULE_SETUP +#line 1140 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.bdis_obs); + + keyname = "BDIS_OBS"; + BEGIN(CCCCCCCC); + } + YY_BREAK +case 94: +YY_RULE_SETUP +#line 1149 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + distype = PRIOR; + vptr = &(distem.dtype); + + keyname = "CPDISja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 95: +YY_RULE_SETUP +#line 1158 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = STRING; + distype = SEQUENT; + vptr = &(distem.dtype); + + keyname = "CQDISia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 96: +YY_RULE_SETUP +#line 1167 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = RECORD; + distype = PRIOR; + vptr = &(distem.dp); + npptr = ndp; + + keyname = "DPja"; + BEGIN(CCia); + } + YY_BREAK +case 97: +YY_RULE_SETUP +#line 1177 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = RECORD; + distype = SEQUENT; + vptr = &(distem.dp); + npptr = ndq; + + keyname = "DQia"; + BEGIN(CCia); + } + YY_BREAK +case 98: +YY_RULE_SETUP +#line 1187 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + keyname = "CPERRja"; + BEGIN(CCCCCia); + } + YY_BREAK +case 99: +YY_RULE_SETUP +#line 1196 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + distype = SEQUENT; + vptr = &(distem.maxdis); + + keyname = "CQERRia"; + BEGIN(CCCCCia); + } + YY_BREAK +case 100: +YY_RULE_SETUP +#line 1205 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.totdis); + + keyname = "DVERRa"; + BEGIN(CCCCCCCa); + } + YY_BREAK +case 101: +YY_RULE_SETUP +#line 1214 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 1 polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 1; + a = ' '; + + keyname = "A_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 102: +YY_RULE_SETUP +#line 1227 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 2 polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 2; + a = ' '; + + keyname = "B_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 103: +YY_RULE_SETUP +#line 1240 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 1 inverse polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 1; + a = ' '; + + keyname = "AP_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 104: +YY_RULE_SETUP +#line 1253 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 2 inverse polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 2; + a = ' '; + + keyname = "BP_ORDER"; + BEGIN(VALUE); + } + YY_BREAK +case 105: +YY_RULE_SETUP +#line 1266 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 1 maximum distortion. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + i = 1; + a = ' '; + + keyname = "A_DMAX"; + BEGIN(VALUE); + } + YY_BREAK +case 106: +YY_RULE_SETUP +#line 1279 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 2 maximum distortion. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + i = 2; + a = ' '; + + keyname = "B_DMAX"; + BEGIN(VALUE); + } + YY_BREAK +case 107: +YY_RULE_SETUP +#line 1292 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 1 polynomial coefficient. + i = 1; + sipflag = 2; + + keyname = "A_p_q"; + BEGIN(SIP2); + } + YY_BREAK +case 108: +YY_RULE_SETUP +#line 1301 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 2 polynomial coefficient. + i = 2; + sipflag = 2; + + keyname = "B_p_q"; + BEGIN(SIP2); + } + YY_BREAK +case 109: +YY_RULE_SETUP +#line 1310 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 1 inverse polynomial coefficient. + i = 1; + sipflag = 3; + + keyname = "AP_p_q"; + BEGIN(SIP3); + } + YY_BREAK +case 110: +YY_RULE_SETUP +#line 1319 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP: axis 2 inverse polynomial coefficient. + i = 2; + sipflag = 3; + + keyname = "BP_p_q"; + BEGIN(SIP3); + } + YY_BREAK +case 111: +YY_RULE_SETUP +#line 1328 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: LLH corner pixel coordinate 1. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp; + dssflag = 1; + distran = DSS; + + keyname = "CNPIX1"; + BEGIN(VALUE); + } + YY_BREAK +case 112: +YY_RULE_SETUP +#line 1340 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: LLH corner pixel coordinate 2. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+1; + dssflag = 1; + distran = DSS; + + keyname = "CNPIX1"; + BEGIN(VALUE); + } + YY_BREAK +case 113: +YY_RULE_SETUP +#line 1352 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre x-coordinate in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+2; + dssflag = 1; + distran = DSS; + + keyname = "PPO3"; + BEGIN(VALUE); + } + YY_BREAK +case 114: +YY_RULE_SETUP +#line 1364 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre y-coordinate in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+3; + dssflag = 1; + distran = DSS; + + keyname = "PPO6"; + BEGIN(VALUE); + } + YY_BREAK +case 115: +YY_RULE_SETUP +#line 1376 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: pixel x-dimension in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+4; + dssflag = 1; + distran = DSS; + + keyname = "XPIXELSZ"; + BEGIN(VALUE); + } + YY_BREAK +case 116: +YY_RULE_SETUP +#line 1388 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: pixel y-dimension in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+5; + dssflag = 1; + distran = DSS; + + keyname = "YPIXELSZ"; + BEGIN(VALUE); + } + YY_BREAK +case 117: +YY_RULE_SETUP +#line 1400 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre, right ascension - hours. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+6; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAH"; + BEGIN(VALUE); + } + YY_BREAK +case 118: +YY_RULE_SETUP +#line 1412 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre, right ascension - minutes. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+7; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAM"; + BEGIN(VALUE); + } + YY_BREAK +case 119: +YY_RULE_SETUP +#line 1424 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre, right ascension - seconds. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+8; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAS"; + BEGIN(VALUE); + } + YY_BREAK +case 120: +YY_RULE_SETUP +#line 1436 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre, declination - sign. + valtype = STRING; + distype = SEQUENT; + vptr = dsstmp+9; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECSN"; + BEGIN(PLTDECSN); + } + YY_BREAK +case 121: +YY_RULE_SETUP +#line 1448 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre, declination - degrees. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+10; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECD"; + BEGIN(VALUE); + } + YY_BREAK +case 122: +YY_RULE_SETUP +#line 1460 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre, declination - arcmin. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+11; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECM"; + BEGIN(VALUE); + } + YY_BREAK +case 123: +YY_RULE_SETUP +#line 1472 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate centre, declination - arcsec. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+12; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECS"; + BEGIN(VALUE); + } + YY_BREAK +case 124: +YY_RULE_SETUP +#line 1484 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: plate identification (insufficient to trigger DSS). + valtype = STRING; + distype = SEQUENT; + vptr = dsstmp+13; + dssflag = 2; + distran = 0; + + keyname = "PLATEID"; + BEGIN(VALUE); + } + YY_BREAK +case 125: +YY_RULE_SETUP +#line 1496 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: axis 1 polynomial coefficient. + i = 1; + dssflag = 3; + + keyname = "AMDXm"; + BEGIN(DSSAMDXY); + } + YY_BREAK +case 126: +YY_RULE_SETUP +#line 1505 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS: axis 2 polynomial coefficient. + i = 2; + dssflag = 3; + + keyname = "AMDYm"; + BEGIN(DSSAMDXY); + } + YY_BREAK +case 127: +YY_RULE_SETUP +#line 1514 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // TNX or ZPX: string-encoded data array. + sscanf(yytext, "WAT%d_%d", &i, &m); + if (watn < m) watn = m; + watflag = 1; + + valtype = STRING; + distype = SEQUENT; + vptr = wat[i-1] + 68*(m-1); + + a = ' '; + distran = WAT; + + keyname = "WATi_m"; + BEGIN(VALUE); + } + YY_BREAK +case 128: +YY_RULE_SETUP +#line 1531 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (yyextra->nkeyrec) { + yyextra->nkeyrec = 0; + errmsg = "keyrecords following the END keyrecord were ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 129: +YY_RULE_SETUP +#line 1541 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 130: +#line 1546 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 131: +#line 1547 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 132: +#line 1548 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 133: +YY_RULE_SETUP +#line 1548 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + sscanf(yytext, "%d%c", &i, &a); + BEGIN(VALUE); + } + YY_BREAK +case 134: +#line 1554 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 135: +#line 1555 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 136: +#line 1556 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 137: +#line 1557 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 138: +#line 1558 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 139: +#line 1559 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 140: +YY_RULE_SETUP +#line 1559 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & WCSHDR_reject) { + // Violates the basic FITS standard. + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 141: +#line 1573 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 142: +#line 1574 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 143: +#line 1575 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 144: +#line 1576 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 145: +#line 1577 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 146: +#line 1578 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 147: +#line 1579 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 148: +#line 1580 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 149: +YY_RULE_SETUP +#line 1580 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + YY_BREAK +case 150: +YY_RULE_SETUP +#line 1587 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // Let it go. + BEGIN(DISCARD); + } + YY_BREAK +case 151: +YY_RULE_SETUP +#line 1592 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "keyword looks very much like %s but isn't", + keyname); + BEGIN(ERROR); + + } else { + // Let it go. + BEGIN(DISCARD); + } + } + YY_BREAK +case 152: +#line 1607 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 153: +#line 1608 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 154: +#line 1609 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 155: +YY_RULE_SETUP +#line 1609 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + sscanf(yytext, "%d_%d%c", &i, &j, &a); + BEGIN(VALUE); + } + YY_BREAK +case 156: +#line 1616 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 157: +#line 1617 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 158: +#line 1618 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 159: +#line 1619 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 160: +#line 1620 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 161: +#line 1621 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 162: +#line 1622 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 163: +#line 1623 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 164: +#line 1624 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 165: +#line 1625 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 166: +#line 1626 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 167: +#line 1627 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 168: +#line 1628 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 169: +#line 1629 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 170: +#line 1630 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 171: +#line 1631 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 172: +#line 1632 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 173: +#line 1633 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 174: +#line 1634 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 175: +#line 1635 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 176: +YY_RULE_SETUP +#line 1635 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (((altlin == 1) && (relax & WCSHDR_PC0i_0ja)) || + ((altlin == 2) && (relax & WCSHDR_CD0i_0ja))) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 177: +#line 1653 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 178: +#line 1654 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 179: +#line 1655 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 180: +#line 1656 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 181: +#line 1657 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 182: +#line 1658 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 183: +#line 1659 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 184: +#line 1660 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 185: +#line 1661 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 186: +YY_RULE_SETUP +#line 1661 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + YY_BREAK +case 187: +#line 1669 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 188: +#line 1670 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 189: +#line 1671 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 190: +#line 1672 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 191: +#line 1673 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 192: +#line 1674 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 193: +#line 1675 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 194: +#line 1676 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 195: +#line 1677 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 196: +YY_RULE_SETUP +#line 1677 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + YY_BREAK +case 197: +YY_RULE_SETUP +#line 1684 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // This covers the defunct forms CD00i00j and PC00i00j. + if (((altlin == 1) && (relax & WCSHDR_PC00i00j)) || + ((altlin == 2) && (relax & WCSHDR_CD00i00j))) { + sscanf(yytext, "%3d%3d", &i, &j); + a = ' '; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "this form of the %s keyword is deprecated, use %s", + keyname, keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 198: +YY_RULE_SETUP +#line 1705 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 199: +#line 1710 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 200: +YY_RULE_SETUP +#line 1710 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (YY_START == CCCCCCCa) { + sscanf(yytext, "%c", &a); + } else { + unput(yytext[0]); + a = 0; + } + + BEGIN(VALUE); + } + YY_BREAK +case 201: +YY_RULE_SETUP +#line 1721 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "invalid alternate code, keyword resembles %s " + "but isn't", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 202: +#line 1736 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 203: +#line 1737 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 204: +#line 1738 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 205: +YY_RULE_SETUP +#line 1738 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + sscanf(yytext, "%d_%d%c", &i, &m, &a); + BEGIN(VALUE); + } + YY_BREAK +case 206: +#line 1744 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 207: +#line 1745 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 208: +#line 1746 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 209: +#line 1747 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 210: +#line 1748 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 211: +#line 1749 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 212: +#line 1750 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 213: +#line 1751 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 214: +#line 1752 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 215: +#line 1753 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 216: +#line 1754 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 217: +#line 1755 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 218: +#line 1756 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 219: +#line 1757 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 220: +#line 1758 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 221: +#line 1759 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 222: +#line 1760 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 223: +#line 1761 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 224: +#line 1762 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 225: +#line 1763 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 226: +YY_RULE_SETUP +#line 1763 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (((valtype == FLOAT) && (relax & WCSHDR_PV0i_0ma)) || + ((valtype == STRING) && (relax & WCSHDR_PS0i_0ma))) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 227: +#line 1781 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 228: +#line 1782 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 229: +#line 1783 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 230: +#line 1784 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 231: +#line 1785 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 232: +#line 1786 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 233: +#line 1787 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 234: +#line 1788 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 235: +#line 1789 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 236: +YY_RULE_SETUP +#line 1789 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + YY_BREAK +case 237: +#line 1797 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 238: +#line 1798 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 239: +#line 1799 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 240: +#line 1800 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 241: +#line 1801 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 242: +#line 1802 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 243: +#line 1803 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 244: +#line 1804 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 245: +#line 1805 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 246: +YY_RULE_SETUP +#line 1805 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + YY_BREAK +case 247: +YY_RULE_SETUP +#line 1812 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 248: +#line 1817 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 249: +#line 1818 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 250: +YY_RULE_SETUP +#line 1818 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + a = ' '; + sscanf(yytext, "%d%c", &i, &a); + + if (relax & WCSHDR_strict) { + errmsg = "the CROTAn keyword is deprecated, use PCi_ja"; + BEGIN(ERROR); + + } else if ((a == ' ') || (relax & WCSHDR_CROTAia)) { + yyless(0); + BEGIN(CCCCCia); + + } else if (relax & WCSHDR_reject) { + errmsg = "CROTAn keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + YY_BREAK +case 251: +YY_RULE_SETUP +#line 1840 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + yyless(0); + BEGIN(CCCCCia); + } + YY_BREAK +case 252: +YY_RULE_SETUP +#line 1845 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & WCSHDR_PROJPn) { + sscanf(yytext, "%d", &m); + i = 0; + a = ' '; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "the PROJPn keyword is deprecated, use PVi_ma"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 253: +#line 1862 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 254: +YY_RULE_SETUP +#line 1862 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (relax & (WCSHDR_PROJPn | WCSHDR_reject)) { + errmsg = "invalid PROJPn keyword"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + YY_BREAK +case 255: +YY_RULE_SETUP +#line 1872 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 256: +#line 1877 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 257: +YY_RULE_SETUP +#line 1877 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // SIP keywords. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.dp); + npptr = ndp; + + a = ' '; + distran = SIP; + + sscanf(yytext, "%d_%d", &p, &q); + BEGIN(VALUE); + } + YY_BREAK +case 258: +#line 1892 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 259: +YY_RULE_SETUP +#line 1892 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 260: +#line 1897 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +case 261: +YY_RULE_SETUP +#line 1897 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // DSS keywords. + valtype = FLOAT; + distype = SEQUENT; + vptr = &(distem.dp); + npptr = ndq; + + a = ' '; + distran = DSS; + + sscanf(yytext, "%d", &m); + BEGIN(VALUE); + } + YY_BREAK +case 262: +YY_RULE_SETUP +#line 1911 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 263: +/* rule 263 can match eol */ +YY_RULE_SETUP +#line 1915 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // Special handling for this iconic DSS keyword. + if (1 < ipass) { + // Look for a minus sign. + sscanf(yytext, "= '%s", strtmp); + dbltmp = strcmp(strtmp, "-") ? 1.0 : -1.0; + } + + BEGIN(COMMENT); + } + YY_BREAK +case 264: +YY_RULE_SETUP +#line 1926 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(DISCARD); + } + YY_BREAK +case 265: +YY_RULE_SETUP +#line 1930 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // Do checks on i, j & m. + if (99 < i || 99 < j || 99 < m) { + if (relax & WCSHDR_reject) { + if (99 < i || 99 < j) { + errmsg = "axis number exceeds 99"; + } else if (m > 99) { + errmsg = "parameter number exceeds 99"; + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else { + if (valtype == INTEGER) { + BEGIN(INTEGER_VAL); + } else if (valtype == FLOAT) { + BEGIN(FLOAT_VAL); + } else if (valtype == FLOAT2) { + BEGIN(FLOAT2_VAL); + } else if (valtype == STRING) { + BEGIN(STRING_VAL); + } else if (valtype == RECORD) { + BEGIN(RECORD_VAL); + } else { + errmsg = errtxt; + sprintf(errmsg, "internal parser ERROR, bad data type: %d", + valtype); + BEGIN(ERROR); + } + } + } + YY_BREAK +case 266: +YY_RULE_SETUP +#line 1966 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "invalid KEYWORD = VALUE syntax"; + BEGIN(ERROR); + } + YY_BREAK +case 267: +YY_RULE_SETUP +#line 1971 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + sscanf(yytext, "%d", &inttmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 268: +YY_RULE_SETUP +#line 1983 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "an integer value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 269: +YY_RULE_SETUP +#line 1988 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + wcsutil_str2double(yytext, &dbltmp); + + if (chekval && chekval(dbltmp)) { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } else { + BEGIN(COMMENT); + } + } + } + YY_BREAK +case 270: +YY_RULE_SETUP +#line 2005 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 271: +YY_RULE_SETUP +#line 2010 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue as integer and fractional parts. + wcsutil_str2double2(yytext, dbl2tmp); + + BEGIN(COMMENT); + } + } + YY_BREAK +case 272: +YY_RULE_SETUP +#line 2022 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 273: +/* rule 273 can match eol */ +YY_RULE_SETUP +#line 2027 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Copy the keyvalue minus the quotes. + strncpy(strtmp, yytext+1, yyleng-2); + strtmp[yyleng-2] = '\0'; + + // Strip off trailing blanks. + for (int jx = yyleng-3; jx >= 0; jx--) { + if (strtmp[jx] != ' ') { + break; + } + strtmp[jx] = '\0'; + } + + // Squeeze out repeated quotes. + int ix = 0; + for (int jx = 0; jx < 72; jx++) { + if (ix < jx) { + strtmp[ix] = strtmp[jx]; + } + + if (strtmp[jx] == '\0') { + break; + } else if (strtmp[jx] == '\'' && strtmp[jx+1] == '\'') { + jx++; + } + + ix++; + } + + BEGIN(COMMENT); + } + } + YY_BREAK +case 274: +YY_RULE_SETUP +#line 2064 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "a string value was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 275: +/* rule 275 can match eol */ +YY_RULE_SETUP +#line 2069 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + yyless(1); + + BEGIN(RECFIELD); + } + } + YY_BREAK +case 276: +YY_RULE_SETUP +#line 2080 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "a record was expected"; + BEGIN(ERROR); + } + YY_BREAK +case 277: +YY_RULE_SETUP +#line 2085 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + strncpy(strtmp, yytext, 72); + strtmp[72] = '\0'; + BEGIN(RECCOLON); + } + YY_BREAK +case 278: +YY_RULE_SETUP +#line 2091 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "invalid record field"; + BEGIN(ERROR); + } + YY_BREAK +case 279: +YY_RULE_SETUP +#line 2096 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(RECVALUE); + } + YY_BREAK +case 280: +YY_RULE_SETUP +#line 2100 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "invalid record syntax"; + BEGIN(ERROR); + } + YY_BREAK +case 281: +YY_RULE_SETUP +#line 2105 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + rectype = 0; + sscanf(yytext, "%d", &inttmp); + BEGIN(RECEND); + } + YY_BREAK +case 282: +YY_RULE_SETUP +#line 2111 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + rectype = 1; + wcsutil_str2double(yytext, &dbltmp); + BEGIN(RECEND); + } + YY_BREAK +case 283: +YY_RULE_SETUP +#line 2117 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "invalid record value"; + BEGIN(ERROR); + } + YY_BREAK +case 284: +YY_RULE_SETUP +#line 2122 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + BEGIN(COMMENT); + } + YY_BREAK +case 285: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2126 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == 1) { + // Do first-pass bookkeeping. + wcspih_pass1(naxis, i, j, a, distype, alts, dpq, npptr); + BEGIN(FLUSH); + + } else if (*wcs) { + // Store the value now that the keyrecord has been validated. + int gotone = 0; + for (int ialt = 0; ialt < *nwcs; ialt++) { + // The loop here is for keywords that apply + // to every alternate; these have a == 0. + if (a >= 'A') { + ialt = alts[a-'A'+1]; + if (ialt < 0) break; + } + gotone = 1; + + if (vptr) { + if (sipflag) { + // Translate a SIP keyword into DPja. + struct disprm *disp = (*wcs)->lin.dispre; + int ipx = (disp->ndp)++; + + // SIP doesn't have alternates. + char keyword[16]; + sprintf(keyword, "DP%d", i); + sprintf(strtmp, "SIP.%s.%d_%d", (sipflag==2)?"FWD":"REV", + p, q); + if (valtype == INTEGER) { + dpfill(disp->dp+ipx, keyword, strtmp, i, 0, inttmp, 0.0); + } else { + dpfill(disp->dp+ipx, keyword, strtmp, i, 1, 0, dbltmp); + } + + } else if (dssflag) { + // All DSS keywords require special handling. + if (dssflag == 1) { + // Temporary parameter for DSS used by wcspih_final(). + *((double *)vptr) = dbltmp; + + } else if (dssflag == 2) { + // Temporary parameter for DSS used by wcspih_final(). + strcpy((char *)vptr, strtmp); + + } else { + // Translate a DSS keyword into DQia. + if (m <= 13 || dbltmp != 0.0) { + struct disprm *disp = (*wcs)->lin.disseq; + int ipx = (disp->ndp)++; + + // DSS doesn't have alternates. + char keyword[16]; + sprintf(keyword, "DQ%d", i); + sprintf(strtmp, "DSS.AMD.%d", m); + dpfill(disp->dp+ipx, keyword, strtmp, i, 1, 0, dbltmp); + + // Also required by wcspih_final(). + if (m <= 3) { + dsstmp[13+(i-1)*3+m] = dbltmp; + } + } + } + + } else if (watflag) { + // String array for TNX and ZPX used by wcspih_final(). + strcpy((char *)vptr, strtmp); + + } else { + // An "ordinary" keyword. + struct wcsprm *wcsp = *wcs + ialt; + struct disprm *disp; + void *wptr; + ptrdiff_t voff; + if (auxprm) { + // Additional auxiliary parameter. + struct auxprm *auxp = wcsp->aux; + voff = (char *)vptr - (char *)(&auxtem); + wptr = (void *)((char *)auxp + voff); + + } else if (distype) { + // Distortion parameter of some kind. + if (distype == PRIOR) { + // Prior distortion. + disp = wcsp->lin.dispre; + } else { + // Sequent distortion. + disp = wcsp->lin.disseq; + } + voff = (char *)vptr - (char *)(&distem); + wptr = (void *)((char *)disp + voff); + + } else { + // A parameter that lives directly in wcsprm. + voff = (char *)vptr - (char *)(&wcstem); + wptr = (void *)((char *)wcsp + voff); + } + + if (valtype == INTEGER) { + *((int *)wptr) = inttmp; + + } else if (valtype == FLOAT) { + // Apply keyword parameterization. + if (npptr == npv) { + int ipx = (wcsp->npv)++; + wcsp->pv[ipx].i = i; + wcsp->pv[ipx].m = m; + wptr = &(wcsp->pv[ipx].value); + + } else if (j) { + wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + + (j - 1); + + } else if (i) { + wptr = *((double **)wptr) + (i - 1); + } + + if (special) { + special(wptr, &dbltmp); + } else { + *((double *)wptr) = dbltmp; + } + + // Flag presence of PCi_ja, or CDi_ja and/or CROTAia. + if (altlin) { + wcsp->altlin |= altlin; + altlin = 0; + } + + } else if (valtype == FLOAT2) { + // Split MJDREF and JDREF into integer and fraction. + if (special) { + special(wptr, dbl2tmp); + } else { + *((double *)wptr) = dbl2tmp[0]; + *((double *)wptr + 1) = dbl2tmp[1]; + } + + } else if (valtype == STRING) { + // Apply keyword parameterization. + if (npptr == nps) { + int ipx = (wcsp->nps)++; + wcsp->ps[ipx].i = i; + wcsp->ps[ipx].m = m; + wptr = wcsp->ps[ipx].value; + + } else if (j) { + wptr = *((char (**)[72])wptr) + + (i - 1)*(wcsp->naxis) + (j - 1); + + } else if (i) { + wptr = *((char (**)[72])wptr) + (i - 1); + } + + char *cptr = (char *)wptr; + strcpy(cptr, strtmp); + + } else if (valtype == RECORD) { + int ipx = (disp->ndp)++; + + char keyword[16]; + if (a == ' ') { + sprintf(keyword, "%.2s%d", keyname, i); + } else { + sprintf(keyword, "%.2s%d%c", keyname, i, a); + } + + dpfill(disp->dp+ipx, keyword, strtmp, i, rectype, inttmp, + dbltmp); + } + } + } + + if (a) break; + } + + if (gotone) { + nvalid++; + if (ctrl == 4) { + if (distran || dssflag) { + wcsfprintf(stderr, "%.80s\n Accepted (%d) as a " + "recognized WCS convention.\n", keyrec, nvalid); + } else { + wcsfprintf(stderr, "%.80s\n Accepted (%d) as a " + "valid WCS keyrecord.\n", keyrec, nvalid); + } + } + + BEGIN(FLUSH); + + } else { + errmsg = "syntactically valid WCS keyrecord has no effect"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + } + YY_BREAK +case 286: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2326 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 287: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2331 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + YY_BREAK +case 288: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2336 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "invalid keyvalue or malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 289: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2341 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + errmsg = "malformed keycomment"; + BEGIN(ERROR); + } + YY_BREAK +case 290: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2346 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == npass) { + if (ctrl < 0) { + // Preserve discards. + keep = keyrec; + + } else if (2 < ctrl) { + nother++; + wcsfprintf(stderr, "%.80s\n Not a recognized WCS keyword.\n", + keyrec); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 291: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 2361 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == npass) { + (*nreject)++; + + if (ctrl%10 == -1) { + // Preserve rejects. + keep = keyrec; + } + + if (1 < abs(ctrl%10)) { + wcsfprintf(stderr, "%.80s\n Rejected (%d), %s.\n", + keyrec, *nreject, errmsg); + } + } + BEGIN(FLUSH); + } + YY_BREAK +case 292: +/* rule 292 can match eol */ +YY_RULE_SETUP +#line 2378 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + if (ipass == npass && keep) { + if (hptr < keep) { + strncpy(hptr, keep, 80); + } + hptr += 80; + } + + naux += auxprm; + + // Throw away the rest of the line and reset for the next one. + i = j = 0; + m = 0; + a = ' '; + + keyrec += 80; + + valtype = -1; + distype = 0; + vptr = 0x0; + keep = 0x0; + + altlin = 0; + npptr = 0x0; + chekval = 0x0; + special = 0x0; + auxprm = 0; + sipflag = 0; + dssflag = 0; + watflag = 0; + + BEGIN(INITIAL); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(CCia): +case YY_STATE_EOF(CCi_ja): +case YY_STATE_EOF(CCCCCia): +case YY_STATE_EOF(CCi_ma): +case YY_STATE_EOF(CCCCCCCa): +case YY_STATE_EOF(CCCCCCCC): +case YY_STATE_EOF(CROTAi): +case YY_STATE_EOF(PROJPn): +case YY_STATE_EOF(SIP2): +case YY_STATE_EOF(SIP3): +case YY_STATE_EOF(DSSAMDXY): +case YY_STATE_EOF(PLTDECSN): +case YY_STATE_EOF(VALUE): +case YY_STATE_EOF(INTEGER_VAL): +case YY_STATE_EOF(FLOAT_VAL): +case YY_STATE_EOF(FLOAT2_VAL): +case YY_STATE_EOF(STRING_VAL): +case YY_STATE_EOF(RECORD_VAL): +case YY_STATE_EOF(RECFIELD): +case YY_STATE_EOF(RECCOLON): +case YY_STATE_EOF(RECVALUE): +case YY_STATE_EOF(RECEND): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(DISCARD): +case YY_STATE_EOF(ERROR): +case YY_STATE_EOF(FLUSH): +#line 2412 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +{ + // End-of-input. + int status; + if (ipass == 1) { + if ((status = wcspih_init1(naxis, alts, dpq, npv, nps, ndp, ndq, + naux, distran, nwcs, wcs)) || + (*nwcs == 0 && ctrl == 0)) { + return status; + } + + if (2 < abs(ctrl%10)) { + if (*nwcs == 1) { + if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) { + wcsfprintf(stderr, "Found one coordinate representation.\n"); + } + } else { + wcsfprintf(stderr, "Found %d coordinate representations.\n", + *nwcs); + } + } + + watstr = calloc(2*(watn*68 + 1), sizeof(char)); + wat[0] = watstr; + wat[1] = watstr + watn*68 + 1; + } + + if (ipass++ < npass) { + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + keyrec = header; + *nreject = 0; + + i = j = 0; + m = 0; + a = ' '; + + valtype = -1; + distype = 0; + vptr = 0x0; + + altlin = 0; + npptr = 0x0; + chekval = 0x0; + special = 0x0; + auxprm = 0; + sipflag = 0; + dssflag = 0; + watflag = 0; + + yyrestart(yyin, yyscanner); + + } else { + + if (ctrl < 0) { + *hptr = '\0'; + } else if (ctrl == 1) { + wcsfprintf(stderr, "%d WCS keyrecord%s rejected.\n", + *nreject, (*nreject==1)?" was":"s were"); + } else if (ctrl == 4) { + wcsfprintf(stderr, "\n"); + wcsfprintf(stderr, "%5d keyrecord%s rejected for syntax or " + "other errors,\n", *nreject, (*nreject==1)?" was":"s were"); + wcsfprintf(stderr, "%5d %s recognized as syntactically valid, " + "and\n", nvalid, (nvalid==1)?"was":"were"); + wcsfprintf(stderr, "%5d other%s were not recognized as WCS " + "keyrecords.\n", nother, (nother==1)?"":"s"); + } + + status = wcspih_final(ndp, ndq, distran, dsstmp, wat, nwcs, wcs); + free(watstr); + return status; + } + } + YY_BREAK +case 293: +YY_RULE_SETUP +#line 2486 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" +ECHO; + YY_BREAK +#line 24921 "wcspih.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + char *yy_cp = yyg->yy_c_buf_p; + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + if ( ! yy_is_jam ) + { + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + } + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + yy_size_t number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + yy_size_t i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + yy_size_t yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +yy_size_t yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 2486 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcspih.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcspih( + char *header, + int nkeyrec, + int relax, + int ctrl, + int *nreject, + int *nwcs, + struct wcsprm **wcs) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcspih_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcspih_scanner(header, nkeyrec, relax, ctrl, nreject, nwcs, + wcs, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + + +/*---------------------------------------------------------------------------- +* Determine the number of coordinate representations (up to 27) and the +* number of coordinate axes in each, which distortions are present, and the +* number of PVi_ma, PSi_ma, DPja, and DQia keywords in each representation. +*---------------------------------------------------------------------------*/ + +void wcspih_pass1( + int naxis, + int i, + int j, + char a, + int distype, + int alts[], + int dpq[], + int *npptr) + +{ + // On the first pass alts[] is used to determine the number of axes + // for each of the 27 possible alternate coordinate descriptions. + if (a == 0) { + return; + } + + int ialt = 0; + if (a != ' ') { + ialt = a - 'A' + 1; + } + + int *ip = alts + ialt; + + if (*ip < naxis) { + *ip = naxis; + } + + // i or j can be greater than naxis. + if (*ip < i) { + *ip = i; + } + + if (*ip < j) { + *ip = j; + } + + // Type of distortions present. + dpq[ialt] |= distype; + + // Count PVi_ma, PSi_ma, DPja, or DQia keywords. + if (npptr) { + npptr[ialt]++; + } +} + + +/*---------------------------------------------------------------------------- +* Allocate memory for an array of the required number of wcsprm structs and +* initialize each of them. +*---------------------------------------------------------------------------*/ + +int wcspih_init1( + int naxis, + int alts[], + int dpq[], + int npv[], + int nps[], + int ndp[], + int ndq[], + int naux, + int distran, + int *nwcs, + struct wcsprm **wcs) + +{ + int status = 0; + + // Find the number of coordinate descriptions. + *nwcs = 0; + for (int ialt = 0; ialt < 27; ialt++) { + if (alts[ialt]) (*nwcs)++; + } + + int defaults; + if ((defaults = !(*nwcs) && naxis)) { + // NAXIS is non-zero but there were no WCS keywords with an alternate + // version code; create a default WCS with blank alternate version. + wcspih_pass1(naxis, 0, 0, ' ', 0, alts, dpq, 0x0); + *nwcs = 1; + } + + if (*nwcs) { + // Allocate memory for the required number of wcsprm structs. + if ((*wcs = calloc(*nwcs, sizeof(struct wcsprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + int ndis = 0; + if (distran == SIP) { + // DPja.NAXES and DPja.OFFSET.j to be added for SIP (see below and + // wcspih_final()). + ndp[0] += 6; + + } else if (distran == DSS) { + // DPja.NAXES to be added for DSS (see below and wcspih_final()). + ndq[0] += 2; + } + + // Initialize each wcsprm struct. + struct wcsprm *wcsp = *wcs; + *nwcs = 0; + for (int ialt = 0; ialt < 27; ialt++) { + if (alts[ialt]) { + wcsp->flag = -1; + int npvmax = npv[ialt]; + int npsmax = nps[ialt]; + if ((status = wcsinit(1, alts[ialt], wcsp, npvmax, npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Record in wcsname whether this is a default description. + if (defaults) { + strncpy(wcsp->wcsname, "DEFAULTS", 72); + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Any distortions present? + struct disprm *disp; + if (dpq[ialt] & 1) { + if ((disp = calloc(1, sizeof(struct disprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + // Attach it to linprm. Also inits it. + ndis++; + int ndpmax = ndp[ialt]; + disp->flag = -1; + lindist(1, &(wcsp->lin), disp, ndpmax); + } + + if (dpq[ialt] & 2) { + if ((disp = calloc(1, sizeof(struct disprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + // Attach it to linprm. Also inits it. + ndis++; + int ndpmax = ndq[ialt]; + disp->flag = -1; + lindist(2, &(wcsp->lin), disp, ndpmax); + } + + // On the second pass alts[] indexes the array of wcsprm structs. + alts[ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that there is no wcsprm for this alt. + alts[ialt] = -1; + } + } + + + // Translated distortion? Neither SIP nor DSS have alternates, so the + // presence of keywords for either (not both together), as flagged by + // distran, necessarily refers to the primary representation. + if (distran == SIP) { + strncpy((*wcs)->lin.dispre->dtype[0], "SIP", 72); + strncpy((*wcs)->lin.dispre->dtype[1], "SIP", 72); + + // SIP doesn't have axis mapping. + (*wcs)->lin.dispre->ndp = 6; + dpfill((*wcs)->lin.dispre->dp, "DP1", "NAXES", 0, 0, 2, 0.0); + dpfill((*wcs)->lin.dispre->dp+3, "DP2", "NAXES", 0, 0, 2, 0.0); + + } else if (distran == DSS) { + strncpy((*wcs)->lin.disseq->dtype[0], "DSS", 72); + strncpy((*wcs)->lin.disseq->dtype[1], "DSS", 72); + + // The Paper IV translation of DSS doesn't require an axis mapping. + (*wcs)->lin.disseq->ndp = 2; + dpfill((*wcs)->lin.disseq->dp, "DQ1", "NAXES", 0, 0, 2, 0.0); + dpfill((*wcs)->lin.disseq->dp+1, "DQ2", "NAXES", 0, 0, 2, 0.0); + } + } + + return status; +} + + +/*---------------------------------------------------------------------------- +* Interpret the JDREF, JDREFI, and JDREFF keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_jdref(double *mjdref, const double *jdref) + +{ + // Set MJDREF from JDREF. + if (undefined(mjdref[0] && undefined(mjdref[1]))) { + mjdref[0] = jdref[0] - 2400000.0; + mjdref[1] = jdref[1] - 0.5; + + if (mjdref[1] < 0.0) { + mjdref[0] -= 1.0; + mjdref[1] += 1.0; + } + } + + return 0; +} + +int wcspih_jdrefi(double *mjdref, const double *jdrefi) + +{ + // Set the integer part of MJDREF from JDREFI. + if (undefined(mjdref[0])) { + mjdref[0] = *jdrefi - 2400000.5; + } + + return 0; +} + + +int wcspih_jdreff(double *mjdref, const double *jdreff) + +{ + // Set the fractional part of MJDREF from JDREFF. + if (undefined(mjdref[1])) { + mjdref[1] = *jdreff; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret EPOCHa keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_epoch(double *equinox, const double *epoch) + +{ + // If EQUINOXa is currently undefined then set it from EPOCHa. + if (undefined(*equinox)) { + *equinox = *epoch; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret VSOURCEa keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_vsource(double *zsource, const double *vsource) + +{ + const double c = 299792458.0; + + // If ZSOURCEa is currently undefined then set it from VSOURCEa. + if (undefined(*zsource)) { + // Convert relativistic Doppler velocity to redshift. + double beta = *vsource/c; + *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Check validity of a TIMEPIXR keyvalue. +*---------------------------------------------------------------------------*/ + +int wcspih_timepixr(double timepixr) + +{ + return (timepixr < 0.0 || 1.0 < timepixr); +} + + +/*---------------------------------------------------------------------------- +* Interpret special keywords encountered for each coordinate representation. +*---------------------------------------------------------------------------*/ + +int wcspih_final( + int ndp[], + int ndq[], + int distran, + double dsstmp[], + char *wat[], + int *nwcs, + struct wcsprm **wcs) + +{ + for (int ialt = 0; ialt < *nwcs; ialt++) { + // Interpret -TAB header keywords. + int status; + if ((status = wcstab(*wcs+ialt))) { + wcsvfree(nwcs, wcs); + return status; + } + + if (ndp[ialt] && ndq[ialt]) { + // Prior and sequent distortions co-exist in this representation; + // ensure the latter gets DVERRa. + (*wcs+ialt)->lin.disseq->totdis = (*wcs+ialt)->lin.dispre->totdis; + } + } + + // Translated distortion functions; apply only to the primary WCS. + struct wcsprm *wcsp = *wcs; + if (distran == SIP) { + // SIP doesn't have alternates, nor axis mapping. + struct disprm *disp = wcsp->lin.dispre; + dpfill(disp->dp+1, "DP1", "OFFSET.1", 0, 1, 0, wcsp->crpix[0]); + dpfill(disp->dp+2, "DP1", "OFFSET.2", 0, 1, 0, wcsp->crpix[1]); + dpfill(disp->dp+4, "DP2", "OFFSET.1", 0, 1, 0, wcsp->crpix[0]); + dpfill(disp->dp+5, "DP2", "OFFSET.2", 0, 1, 0, wcsp->crpix[1]); + + } else if (distran == DSS) { + // DSS doesn't have alternates, nor axis mapping. This translation + // follows Paper IV, Sect. 5.2 using the same variable names. + double CNPIX1 = dsstmp[0]; + double CNPIX2 = dsstmp[1]; + + double Xc = dsstmp[2]/1000.0; + double Yc = dsstmp[3]/1000.0; + double Rx = dsstmp[4]/1000.0; + double Ry = dsstmp[5]/1000.0; + + double A1 = dsstmp[14]; + double A2 = dsstmp[15]; + double A3 = dsstmp[16]; + double B1 = dsstmp[17]; + double B2 = dsstmp[18]; + double B3 = dsstmp[19]; + double S = sqrt(fabs(A1*B1 - A2*B2)); + + double X0 = (A2*B3 - A3*B1) / (A1*B1 - A2*B2); + double Y0 = (A3*B2 - A1*B3) / (A1*B1 - A2*B2); + + wcsp->crpix[0] = (Xc - X0)/Rx - (CNPIX1 - 0.5); + wcsp->crpix[1] = (Yc + Y0)/Ry - (CNPIX2 - 0.5); + + wcsp->pc[0] = A1*Rx/S; + wcsp->pc[1] = -A2*Ry/S; + wcsp->pc[2] = -B2*Rx/S; + wcsp->pc[3] = B1*Ry/S; + wcsp->altlin = 1; + + wcsp->cdelt[0] = -S/3600.0; + wcsp->cdelt[1] = S/3600.0; + + double *crval = wcsp->crval; + crval[0] = (dsstmp[6] + (dsstmp[7] + dsstmp[8] /60.0)/60.0)*15.0; + crval[1] = dsstmp[10] + (dsstmp[11] + dsstmp[12]/60.0)/60.0; + if (dsstmp[9] == -1.0) crval[1] *= -1.0; + + strncpy(wcsp->ctype[0], "RA---TAN", 72); + strncpy(wcsp->ctype[1], "DEC--TAN", 72); + + sprintf(wcsp->wcsname, "DSS PLATEID %.4s", (char *)(dsstmp+13)); + + // Erase the approximate WCS provided in modern DSS headers. + wcsp->cd[0] = 0.0; + wcsp->cd[1] = 0.0; + wcsp->cd[2] = 0.0; + wcsp->cd[3] = 0.0; + + } else if (distran == WAT) { + // TNX and ZPX don't have alternates, nor axis mapping. + char *wp; + int omax, omin, wctrl[4]; + double wval; + struct disprm *disp = wcsp->lin.disseq; + + // Disassemble the core dump stored in the WATi_m strings. + int i, nterms = 0; + for (i = 0; i < 2; i++) { + char wtype[8]; + sscanf(wat[i], "wtype=%s", wtype); + + if (strcmp(wtype, "tnx") == 0) { + strncpy(disp->dtype[i], "WAT-TNX", 72); + } else if (strcmp(wtype, "zpx") == 0) { + strncpy(disp->dtype[i], "WAT-ZPX", 72); + } else { + // Could contain "tan" or something else to be ignored. + lindist(2, &(wcsp->lin), 0x0, 0); + return 0; + } + + // The PROJPn parameters are duplicated on each ZPX axis. + if (i == 1 && strcmp(wtype, "zpx") == 0) { + // Take those on the second (latitude) axis ignoring the other. + // First we have to count them and allocate space in wcsprm. + wp = wat[i]; + int npv; + for (npv = 0; npv < 30; npv++) { + if ((wp = strstr(wp, "projp")) == 0x0) break; + wp += 5; + } + + // Allocate space. + if (npv) { + wcsp->npvmax += npv; + wcsp->pv = realloc(wcsp->pv, wcsp->npvmax*sizeof(struct pvcard)); + if (wcsp->pv == 0x0) { + return WCSHDRERR_MEMORY; + } + + wcsp->m_pv = wcsp->pv; + } + + // Copy the values. + wp = wat[i]; + for (int ipv = wcsp->npv; ipv < wcsp->npvmax; ipv++) { + if ((wp = strstr(wp, "projp")) == 0x0) break; + + int m; + sscanf(wp, "projp%d=%lf", &m, &wval); + wcsp->pv[ipv].i = 2; + wcsp->pv[ipv].m = m; + wcsp->pv[ipv].value = wval; + + wp += 5; + } + + wcsp->npv += npv; + } + + // Read the control parameters. + if ((wp = strchr(wat[i], '"')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + + for (int m = 0; m < 4; m++) { + sscanf(wp, "%d", wctrl+m); + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // How many coefficients are we expecting? + omin = (wctrl[1] < wctrl[2]) ? wctrl[1] : wctrl[2]; + omax = (wctrl[1] < wctrl[2]) ? wctrl[2] : wctrl[1]; + if (wctrl[3] == 0) { + // No cross terms. + nterms += omin + omax; + + } else if (wctrl[3] == 1) { + // Full cross terms. + nterms += omin*omax; + + } else if (wctrl[3] == 2) { + // Half cross terms. + nterms += omin*omax - omin*(omin-1)/2; + } + } + + // Allocate memory for dpkeys. + ndq[0] += 2*(1 + 1 + 4) + nterms; + + disp->ndpmax += ndq[0]; + disp->dp = realloc(disp->dp, disp->ndpmax*sizeof(struct dpkey)); + if (disp->dp == 0x0) { + return WCSHDRERR_MEMORY; + } + + disp->m_dp = disp->dp; + + + // Populate dpkeys. + int idp = disp->ndp; + for (i = 0; i < 2; i++) { + dpfill(disp->dp+(idp++), "DQ", "NAXES", i+1, 0, 2, 0.0); + + // Read the control parameters. + if ((wp = strchr(wat[i], '"')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + + for (int m = 0; m < 4; m++) { + sscanf(wp, "%d", wctrl+m); + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // Polynomial type. + char wpoly[12]; + dpfill(disp->dp+(idp++), "DQ", "WAT.POLY", i+1, 0, wctrl[0], 0.0); + if (wctrl[0] == 1) { + // Chebyshev polynomial. + strncpy(wpoly, "CHBY", 12); + } else if (wctrl[0] == 2) { + // Legendre polynomial. + strncpy(wpoly, "LEGR", 12); + } else if (wctrl[0] == 3) { + // Polynomial is the sum of monomials. + strncpy(wpoly, "MONO", 12); + } else { + // Unknown code. + strncpy(wpoly, "UNKN", 12); + } + + // Read the scaling parameters. + char field[40]; + for (int m = 0; m < 4; m++) { + sscanf(wp, "%lf", &wval); + sprintf(field, "WAT.%c%s", (m<2)?'X':'Y', (m%2)?"MAX":"MIN"); + dpfill(disp->dp+(idp++), "DQ", field, i+1, 1, 0, wval); + + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // Read the coefficients. + for (int n = 0; n < wctrl[2]; n++) { + for (int m = 0; m < wctrl[1]; m++) { + if (wctrl[3] == 0) { + if (m && n) continue; + } else if (wctrl[3] == 2) { + if (m+n > omax-1) continue; + } + + sscanf(wp, "%lf", &wval); + if (wval == 0.0) continue; + + sprintf(field, "WAT.%s.%d_%d", wpoly, m, n); + dpfill(disp->dp+(idp++), "DQ", field, i+1, 1, 0, wval); + + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + } + } + + disp->ndp = idp; + } + + return 0; +} + diff --git a/deps/wcslib/C/wcspih.l b/deps/wcslib/C/wcspih.l new file mode 100644 index 0000000..9202796 --- /dev/null +++ b/deps/wcslib/C/wcspih.l @@ -0,0 +1,3078 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcspih.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* wcspih.l is a Flex description file containing the definition of a lexical +* scanner for parsing the WCS keyrecords from a FITS primary image or image +* extension header. +* +* wcspih.l requires Flex v2.5.4 or later. Refer to wcshdr.h for a description +* of the user interface and operating notes. +* +* Implementation notes +* -------------------- +* Use of the WCSAXESa keyword is not mandatory. Its default value is "the +* larger of NAXIS and the largest index of these keywords [i.e. CRPIXj, PCi_j +* or CDi_j, CDELTi, CTYPEi, CRVALi, and CUNITi] found in the FITS header". +* Consequently the definition of WCSAXESa effectively invalidates the use of +* NAXIS for determining the number of coordinate axes and forces a preliminary +* pass through the header to determine the "largest index" in headers where +* WCSAXESa was omitted. +* +* Furthermore, since the use of WCSAXESa is optional, there is no way to +* determine the number of coordinate representations (the "a" value) other +* than by parsing all of the WCS keywords in the header; even if WCSAXESa was +* specified for some representations it cannot be known in advance whether it +* was specified for all of those present in the header. +* +* Hence the definition of WCSAXESa forces the scanner to be implemented in two +* passes. The first pass is used to determine the number of coordinate +* representations (up to 27) and the number of coordinate axes in each. +* Effectively WCSAXESa is ignored unless it exceeds the "largest index" in +* which case the keywords for the extra axes assume their default values. The +* number of PVi_ma and PSi_ma keywords in each representation is also counted +* in the first pass. +* +* On completion of the first pass, memory is allocated for an array of the +* required number of wcsprm structs and each of these is initialized +* appropriately. These structs are filled in the second pass. +* +* The parser does not check for duplicated keywords, it accepts the last +* encountered. +* +*===========================================================================*/ + +/* Options. */ +%option full +%option never-interactive +%option noinput +%option noyywrap +%option outfile="wcspih.c" +%option prefix="wcspih" +%option reentrant +%option extra-type="struct wcspih_extra *" + +/* Indices for parameterized keywords. */ +Z1 [0-9] +Z2 [0-9]{2} +Z3 [0-9]{3} +Z4 [0-9]{4} +Z5 [0-9]{5} +Z6 [0-9]{6} + +I1 [1-9] +I2 [1-9][0-9] +I3 [1-9][0-9]{2} +I4 [1-9][0-9]{3} + +/* Alternate coordinate system identifier. */ +ALT [ A-Z] + +/* Keyvalue data types. */ +INTEGER [+-]?[0-9]+ +FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+)([eEdD][+-]?[0-9]+)? +STRING '([^']|'')*' +RECORD '[^']*' +FIELD [a-zA-Z_][a-zA-Z_0-9.]* + +/* Inline comment syntax. */ +INLINE " "*(\/.*)? + +/* Exclusive start states. */ +%x CCia CCi_ja CCCCCia CCi_ma CCCCCCCa CCCCCCCC +%x CROTAi PROJPn SIP2 SIP3 DSSAMDXY PLTDECSN +%x VALUE INTEGER_VAL FLOAT_VAL FLOAT2_VAL STRING_VAL +%x RECORD_VAL RECFIELD RECCOLON RECVALUE RECEND +%x COMMENT +%x DISCARD ERROR FLUSH + +%{ +#include +#include +#include +#include +#include +#include + +#include "wcsmath.h" +#include "wcsprintf.h" +#include "wcsutil.h" + +#include "dis.h" +#include "wcs.h" +#include "wcshdr.h" + +#define INTEGER 0 +#define FLOAT 1 +#define FLOAT2 2 +#define STRING 3 +#define RECORD 4 + +#define PRIOR 1 +#define SEQUENT 2 + +#define SIP 1 +#define DSS 2 +#define WAT 3 + +// User data associated with yyscanner. +struct wcspih_extra { + // Values passed to YY_INPUT. + char *hdr; + int nkeyrec; + + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcspih_scanner(char *header, int nkeyrec, int relax, \ + int ctrl, int *nreject, int *nwcs, struct wcsprm **wcs, yyscan_t yyscanner) + +#define YY_INPUT(inbuff, count, bufsize) \ + { \ + if (yyextra->nkeyrec) { \ + strncpy(inbuff, yyextra->hdr, 80); \ + inbuff[80] = '\n'; \ + yyextra->hdr += 80; \ + yyextra->nkeyrec--; \ + count = 81; \ + } else { \ + count = YY_NULL; \ + } \ + } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; +static int wcspih_final(int ndp[], int ndq[], int distran, double dsstmp[], + char *wat[], int *nwcs, struct wcsprm **wcs); +static int wcspih_init1(int naxis, int alts[], int dpq[], int npv[], + int nps[], int ndp[], int ndq[], int auxprm, int distran, + int *nwcs, struct wcsprm **wcs); +static void wcspih_pass1(int naxis, int i, int j, char a, int distype, + int alts[], int dpq[], int *npptr); + +static int wcspih_jdref(double *wptr, const double *jdref); +static int wcspih_jdrefi(double *wptr, const double *jdrefi); +static int wcspih_jdreff(double *wptr, const double *jdreff); +static int wcspih_epoch(double *wptr, const double *epoch); +static int wcspih_vsource(double *wptr, const double *vsource); + +static int wcspih_timepixr(double timepixr); + +%} + +%% + int p, q; + char *errmsg, errtxt[80], *keyname, strtmp[80], *wat[2], *watstr; + int alts[27], dpq[27], inttmp, ndp[27], ndq[27], nps[27], npv[27], + rectype; + double dbltmp, dbl2tmp[2], dsstmp[20]; + struct auxprm auxtem; + struct disprm distem; + struct wcsprm wcstem; + + int naxis = 0; + for (int ialt = 0; ialt < 27; ialt++) { + alts[ialt] = 0; + dpq[ialt] = 0; + npv[ialt] = 0; + nps[ialt] = 0; + ndp[ialt] = 0; + ndq[ialt] = 0; + } + + // Our handle on the input stream. + char *keyrec = header; + char *hptr = header; + char *keep = 0x0; + + // For keeping tallies of keywords found. + *nreject = 0; + int nvalid = 0; + int nother = 0; + + // If strict, then also reject. + if (relax & WCSHDR_strict) relax |= WCSHDR_reject; + + // Keyword indices, as used in the WCS papers, e.g. PCi_ja, PVi_ma. + int i = 0; + int j = 0; + int m = 0; + char a = ' '; + + // For decoding the keyvalue. + int valtype = -1; + int distype = 0; + void *vptr = 0x0; + + // For keywords that require special handling. + int altlin = 0; + int *npptr = 0x0; + int (*chekval)(double) = 0x0; + int (*special)(double *, const double *) = 0x0; + int auxprm = 0; + int naux = 0; + int distran = 0; + int sipflag = 0; + int dssflag = 0; + int watflag = 0; + int watn = 0; + + // The data structures produced. + *nwcs = 0; + *wcs = 0x0; + + // Control variables. + int ipass = 1; + int npass = 2; + + // User data associated with yyscanner. + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return WCSHDRERR_PARSER; + } + + BEGIN(INITIAL); + + +^NAXIS" = "" "*{INTEGER}{INLINE} { + keyname = "NAXISn"; + + if (ipass == 1) { + sscanf(yytext, "NAXIS = %d", &naxis); + if (naxis < 0) naxis = 0; + BEGIN(FLUSH); + + } else { + sscanf(yytext, "NAXIS = %d", &i); + + if (i < 0) { + errmsg = "negative value of NAXIS ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + } + +^WCSAXES{ALT}=" "" "*{INTEGER} { + sscanf(yytext, "WCSAXES%c= %d", &a, &i); + + if (i < 0) { + errmsg = "negative value of WCSAXESa ignored"; + BEGIN(ERROR); + + } else { + valtype = INTEGER; + vptr = 0x0; + + keyname = "WCSAXESa"; + BEGIN(COMMENT); + } + } + +^CRPIX { + valtype = FLOAT; + vptr = &(wcstem.crpix); + + keyname = "CRPIXja"; + BEGIN(CCCCCia); + } + +^PC { + valtype = FLOAT; + vptr = &(wcstem.pc); + altlin = 1; + + keyname = "PCi_ja"; + BEGIN(CCi_ja); + } + +^CD { + valtype = FLOAT; + vptr = &(wcstem.cd); + altlin = 2; + + keyname = "CDi_ja"; + BEGIN(CCi_ja); + } + +^CDELT { + valtype = FLOAT; + vptr = &(wcstem.cdelt); + + keyname = "CDELTia"; + BEGIN(CCCCCia); + } + +^CROTA { + valtype = FLOAT; + vptr = &(wcstem.crota); + altlin = 4; + + keyname = "CROTAn"; + BEGIN(CROTAi); + } + +^CUNIT { + valtype = STRING; + vptr = &(wcstem.cunit); + + keyname = "CUNITia"; + BEGIN(CCCCCia); + } + +^CTYPE { + valtype = STRING; + vptr = &(wcstem.ctype); + + keyname = "CTYPEia"; + BEGIN(CCCCCia); + } + +^CRVAL { + valtype = FLOAT; + vptr = &(wcstem.crval); + + keyname = "CRVALia"; + BEGIN(CCCCCia); + } + +^LONPOLE { + valtype = FLOAT; + vptr = &(wcstem.lonpole); + + keyname = "LONPOLEa"; + BEGIN(CCCCCCCa); + } + +^LATPOLE { + valtype = FLOAT; + vptr = &(wcstem.latpole); + + keyname = "LATPOLEa"; + BEGIN(CCCCCCCa); + } + +^RESTFRQ { + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + keyname = "RESTFRQa"; + BEGIN(CCCCCCCa); + } + +^RESTFREQ { + if (relax & WCSHDR_strict) { + errmsg = "the RESTFREQ keyword is deprecated, use RESTFRQa"; + BEGIN(ERROR); + + } else { + valtype = FLOAT; + vptr = &(wcstem.restfrq); + + unput(' '); + + keyname = "RESTFREQ"; + BEGIN(CCCCCCCa); + } + } + +^RESTWAV { + valtype = FLOAT; + vptr = &(wcstem.restwav); + + keyname = "RESTWAVa"; + BEGIN(CCCCCCCa); + } + +^PV { + valtype = FLOAT; + vptr = &(wcstem.pv); + npptr = npv; + + keyname = "PVi_ma"; + BEGIN(CCi_ma); + } + +^PROJP { + valtype = FLOAT; + vptr = &(wcstem.pv); + npptr = npv; + + keyname = "PROJPn"; + BEGIN(PROJPn); + } + +^PS { + valtype = STRING; + vptr = &(wcstem.ps); + npptr = nps; + + keyname = "PSi_ma"; + BEGIN(CCi_ma); + } + +^VELREF{ALT}" " { + sscanf(yytext, "VELREF%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the VELREF keyword is deprecated, use SPECSYSa"; + BEGIN(ERROR); + + } else if ((a == ' ') || (relax & WCSHDR_VELREFa)) { + valtype = INTEGER; + vptr = &(wcstem.velref); + + unput(a); + + keyname = "VELREF"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "VELREF keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^CNAME { + valtype = STRING; + vptr = &(wcstem.cname); + + keyname = "CNAMEia"; + BEGIN(CCCCCia); + } + +^CRDER { + valtype = FLOAT; + vptr = &(wcstem.crder); + + keyname = "CRDERia"; + BEGIN(CCCCCia); + } + +^CSYER { + valtype = FLOAT; + vptr = &(wcstem.csyer); + + keyname = "CSYERia"; + BEGIN(CCCCCia); + } + +^CZPHS { + valtype = FLOAT; + vptr = &(wcstem.czphs); + + keyname = "CZPHSia"; + BEGIN(CCCCCia); + } + +^CPERI { + valtype = FLOAT; + vptr = &(wcstem.cperi); + + keyname = "CPERIia"; + BEGIN(CCCCCia); + } + +^WCSNAME { + valtype = STRING; + vptr = wcstem.wcsname; + + keyname = "WCSNAMEa"; + BEGIN(CCCCCCCa); + } + +^TIMESYS" " { + valtype = STRING; + vptr = wcstem.timesys; + + keyname = "TIMESYS"; + BEGIN(CCCCCCCC); + } + +^TREFPOS" " { + valtype = STRING; + vptr = wcstem.trefpos; + + keyname = "TREFPOS"; + BEGIN(CCCCCCCC); + } + +^TREFDIR" " { + valtype = STRING; + vptr = wcstem.trefdir; + + keyname = "TREFDIR"; + BEGIN(CCCCCCCC); + } + +^PLEPHEM" " { + valtype = STRING; + vptr = wcstem.plephem; + + keyname = "PLEPHEM"; + BEGIN(CCCCCCCC); + } + +^TIMEUNIT { + valtype = STRING; + vptr = wcstem.timeunit; + + keyname = "TIMEUNIT"; + BEGIN(CCCCCCCC); + } + +^DATEREF" " | +^DATE-REF { + if ((yytext[4] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = STRING; + vptr = wcstem.dateref; + + keyname = "DATEREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the DATE-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^MJDREF" " | +^MJD-REF" " { + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + + keyname = "MJDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^MJDREFI" " | +^MJD-REFI { + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + + keyname = "MJDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^MJDREFF" " | +^MJD-REFF { + if ((yytext[3] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref + 1; + + keyname = "MJDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the MJD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^JDREF" " | +^JD-REF" " { + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT2; + vptr = wcstem.mjdref; + special = wcspih_jdref; + + keyname = "JDREF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^JDREFI" " | +^JD-REFI { + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + // Actually integer, but treated as float. + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcspih_jdrefi; + + keyname = "JDREFI"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFI keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^JDREFF" " | +^JD-REFF { + if ((yytext[2] == 'R') || (relax & WCSHDR_DATEREF)) { + valtype = FLOAT; + vptr = wcstem.mjdref; + special = wcspih_jdreff; + + keyname = "JDREFF"; + BEGIN(CCCCCCCC); + + } else if (relax & WCSHDR_reject) { + errmsg = "the JD-REFF keyword is non-standard"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^TIMEOFFS { + valtype = FLOAT; + vptr = &(wcstem.timeoffs); + + keyname = "TIMEOFFS"; + BEGIN(CCCCCCCC); + } + +^DATE-OBS { + valtype = STRING; + vptr = wcstem.dateobs; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-OBS"; + BEGIN(CCCCCCCC); + } + +^DATE-BEG { + valtype = STRING; + vptr = wcstem.datebeg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-BEG"; + BEGIN(CCCCCCCC); + } + +^DATE-AVG { + valtype = STRING; + vptr = wcstem.dateavg; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-AVG"; + BEGIN(CCCCCCCC); + } + +^DATE-END { + valtype = STRING; + vptr = wcstem.dateend; + if (ctrl < -10) keep = keyrec; + + keyname = "DATE-END"; + BEGIN(CCCCCCCC); + } + +^MJD-OBS" " { + valtype = FLOAT; + vptr = &(wcstem.mjdobs); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-OBS"; + BEGIN(CCCCCCCC); + } + +^MJD-BEG" " { + valtype = FLOAT; + vptr = &(wcstem.mjdbeg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-BEG"; + BEGIN(CCCCCCCC); + } + +^MJD-AVG" " { + valtype = FLOAT; + vptr = &(wcstem.mjdavg); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-AVG"; + BEGIN(CCCCCCCC); + } + +^MJD-END" " { + valtype = FLOAT; + vptr = &(wcstem.mjdend); + if (ctrl < -10) keep = keyrec; + + keyname = "MJD-END"; + BEGIN(CCCCCCCC); + } + +^JEPOCH" " { + valtype = FLOAT; + vptr = &(wcstem.jepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "JEPOCH"; + BEGIN(CCCCCCCC); + } + +^BEPOCH" " { + valtype = FLOAT; + vptr = &(wcstem.bepoch); + if (ctrl < -10) keep = keyrec; + + keyname = "BEPOCH"; + BEGIN(CCCCCCCC); + } + +^TSTART" " { + valtype = FLOAT; + vptr = &(wcstem.tstart); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTART"; + BEGIN(CCCCCCCC); + } + +^TSTOP" " { + valtype = FLOAT; + vptr = &(wcstem.tstop); + if (ctrl < -10) keep = keyrec; + + keyname = "TSTOP"; + BEGIN(CCCCCCCC); + } + +^XPOSURE" " { + valtype = FLOAT; + vptr = &(wcstem.xposure); + if (ctrl < -10) keep = keyrec; + + keyname = "XPOSURE"; + BEGIN(CCCCCCCC); + } + +^TELAPSE" " { + valtype = FLOAT; + vptr = &(wcstem.telapse); + if (ctrl < -10) keep = keyrec; + + keyname = "TELAPSE"; + BEGIN(CCCCCCCC); + } + +^TIMSYER" " { + valtype = FLOAT; + vptr = &(wcstem.timsyer); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMSYER"; + BEGIN(CCCCCCCC); + } + +^TIMRDER" " { + valtype = FLOAT; + vptr = &(wcstem.timrder); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMRDER"; + BEGIN(CCCCCCCC); + } + +^TIMEDEL" " { + valtype = FLOAT; + vptr = &(wcstem.timedel); + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEDEL"; + BEGIN(CCCCCCCC); + } + +^TIMEPIXR { + valtype = FLOAT; + vptr = &(wcstem.timepixr); + chekval = wcspih_timepixr; + if (ctrl < -10) keep = keyrec; + + keyname = "TIMEPIXR"; + BEGIN(CCCCCCCC); + } + +^OBSGEO-X { + valtype = FLOAT; + vptr = wcstem.obsgeo; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-X"; + BEGIN(CCCCCCCC); + } + +^OBSGEO-Y { + valtype = FLOAT; + vptr = wcstem.obsgeo + 1; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-Y"; + BEGIN(CCCCCCCC); + } + +^OBSGEO-Z { + valtype = FLOAT; + vptr = wcstem.obsgeo + 2; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-Z"; + BEGIN(CCCCCCCC); + } + +^OBSGEO-L { + valtype = FLOAT; + vptr = wcstem.obsgeo + 3; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-L"; + BEGIN(CCCCCCCC); + } + +^OBSGEO-B { + valtype = FLOAT; + vptr = wcstem.obsgeo + 4; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-B"; + BEGIN(CCCCCCCC); + } + +^OBSGEO-H { + valtype = FLOAT; + vptr = wcstem.obsgeo + 5; + if (ctrl < -10) keep = keyrec; + + keyname = "OBSGEO-H"; + BEGIN(CCCCCCCC); + } + +^OBSORBIT { + valtype = STRING; + vptr = wcstem.obsorbit; + + keyname = "OBSORBIT"; + BEGIN(CCCCCCCC); + } + +^RADESYS { + valtype = STRING; + vptr = wcstem.radesys; + + keyname = "RADESYSa"; + BEGIN(CCCCCCCa); + } + +^RADECSYS { + if (relax & WCSHDR_RADECSYS) { + valtype = STRING; + vptr = wcstem.radesys; + + unput(' '); + + keyname = "RADECSYS"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the RADECSYS keyword is deprecated, use RADESYSa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^EPOCH{ALT}" " { + sscanf(yytext, "EPOCH%c", &a); + + if (relax & WCSHDR_strict) { + errmsg = "the EPOCH keyword is deprecated, use EQUINOXa"; + BEGIN(ERROR); + + } else if (a == ' ' || relax & WCSHDR_EPOCHa) { + valtype = FLOAT; + vptr = &(wcstem.equinox); + special = wcspih_epoch; + + unput(a); + + keyname = "EPOCH"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "EPOCH keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^EQUINOX { + valtype = FLOAT; + vptr = &(wcstem.equinox); + + keyname = "EQUINOXa"; + BEGIN(CCCCCCCa); + } + +^SPECSYS { + valtype = STRING; + vptr = wcstem.specsys; + + keyname = "SPECSYSa"; + BEGIN(CCCCCCCa); + } + +^SSYSOBS { + valtype = STRING; + vptr = wcstem.ssysobs; + + keyname = "SSYSOBSa"; + BEGIN(CCCCCCCa); + } + +^VELOSYS { + valtype = FLOAT; + vptr = &(wcstem.velosys); + + keyname = "VELOSYSa"; + BEGIN(CCCCCCCa); + } + +^VSOURCE{ALT} { + if (relax & WCSHDR_VSOURCE) { + valtype = FLOAT; + vptr = &(wcstem.zsource); + special = wcspih_vsource; + + yyless(7); + + keyname = "VSOURCEa"; + BEGIN(CCCCCCCa); + + } else if (relax & WCSHDR_reject) { + errmsg = "the VSOURCEa keyword is deprecated, use ZSOURCEa"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +^ZSOURCE { + valtype = FLOAT; + vptr = &(wcstem.zsource); + + keyname = "ZSOURCEa"; + BEGIN(CCCCCCCa); + } + +^SSYSSRC { + valtype = STRING; + vptr = wcstem.ssyssrc; + + keyname = "SSYSSRCa"; + BEGIN(CCCCCCCa); + } + +^VELANGL { + valtype = FLOAT; + vptr = &(wcstem.velangl); + + keyname = "VELANGLa"; + BEGIN(CCCCCCCa); + } + +^RSUN_REF { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.rsun_ref); + + keyname = "RSUN_REF"; + BEGIN(CCCCCCCC); + } + +^DSUN_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.dsun_obs); + + keyname = "DSUN_OBS"; + BEGIN(CCCCCCCC); + } + +^CRLN_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.crln_obs); + + keyname = "CRLN_OBS"; + BEGIN(CCCCCCCC); + } + +^HGLN_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hgln_obs); + + keyname = "HGLN_OBS"; + BEGIN(CCCCCCCC); + } + +^CRLT_OBS | +^HGLT_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.hglt_obs); + + keyname = "HGLT_OBS"; + BEGIN(CCCCCCCC); + } + +^A_RADIUS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.a_radius); + + keyname = "A_RADIUS"; + BEGIN(CCCCCCCC); + } + +^B_RADIUS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.b_radius); + + keyname = "B_RADIUS"; + BEGIN(CCCCCCCC); + } + +^C_RADIUS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.c_radius); + + keyname = "C_RADIUS"; + BEGIN(CCCCCCCC); + } + +^BLON_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blon_obs); + + keyname = "BLON_OBS"; + BEGIN(CCCCCCCC); + } + +^BLAT_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.blat_obs); + + keyname = "BLAT_OBS"; + BEGIN(CCCCCCCC); + } + +^BDIS_OBS { + valtype = FLOAT; + auxprm = 1; + vptr = &(auxtem.bdis_obs); + + keyname = "BDIS_OBS"; + BEGIN(CCCCCCCC); + } + +^CPDIS { + valtype = STRING; + distype = PRIOR; + vptr = &(distem.dtype); + + keyname = "CPDISja"; + BEGIN(CCCCCia); + } + +^CQDIS { + valtype = STRING; + distype = SEQUENT; + vptr = &(distem.dtype); + + keyname = "CQDISia"; + BEGIN(CCCCCia); + } + +^DP { + valtype = RECORD; + distype = PRIOR; + vptr = &(distem.dp); + npptr = ndp; + + keyname = "DPja"; + BEGIN(CCia); + } + +^DQ { + valtype = RECORD; + distype = SEQUENT; + vptr = &(distem.dp); + npptr = ndq; + + keyname = "DQia"; + BEGIN(CCia); + } + +^CPERR { + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + keyname = "CPERRja"; + BEGIN(CCCCCia); + } + +^CQERR { + valtype = FLOAT; + distype = SEQUENT; + vptr = &(distem.maxdis); + + keyname = "CQERRia"; + BEGIN(CCCCCia); + } + +^DVERR { + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.totdis); + + keyname = "DVERRa"; + BEGIN(CCCCCCCa); + } + +^A_ORDER" " { + // SIP: axis 1 polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 1; + a = ' '; + + keyname = "A_ORDER"; + BEGIN(VALUE); + } + +^B_ORDER" " { + // SIP: axis 2 polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 2; + a = ' '; + + keyname = "B_ORDER"; + BEGIN(VALUE); + } + +^AP_ORDER { + // SIP: axis 1 inverse polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 1; + a = ' '; + + keyname = "AP_ORDER"; + BEGIN(VALUE); + } + +^BP_ORDER { + // SIP: axis 2 inverse polynomial degree (not stored). + valtype = INTEGER; + distype = PRIOR; + vptr = 0x0; + + i = 2; + a = ' '; + + keyname = "BP_ORDER"; + BEGIN(VALUE); + } + +^A_DMAX" " { + // SIP: axis 1 maximum distortion. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + i = 1; + a = ' '; + + keyname = "A_DMAX"; + BEGIN(VALUE); + } + +^B_DMAX" " { + // SIP: axis 2 maximum distortion. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.maxdis); + + i = 2; + a = ' '; + + keyname = "B_DMAX"; + BEGIN(VALUE); + } + +^A_ { + // SIP: axis 1 polynomial coefficient. + i = 1; + sipflag = 2; + + keyname = "A_p_q"; + BEGIN(SIP2); + } + +^B_ { + // SIP: axis 2 polynomial coefficient. + i = 2; + sipflag = 2; + + keyname = "B_p_q"; + BEGIN(SIP2); + } + +^AP_ { + // SIP: axis 1 inverse polynomial coefficient. + i = 1; + sipflag = 3; + + keyname = "AP_p_q"; + BEGIN(SIP3); + } + +^BP_ { + // SIP: axis 2 inverse polynomial coefficient. + i = 2; + sipflag = 3; + + keyname = "BP_p_q"; + BEGIN(SIP3); + } + +^CNPIX1" " { + // DSS: LLH corner pixel coordinate 1. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp; + dssflag = 1; + distran = DSS; + + keyname = "CNPIX1"; + BEGIN(VALUE); + } + +^CNPIX2" " { + // DSS: LLH corner pixel coordinate 2. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+1; + dssflag = 1; + distran = DSS; + + keyname = "CNPIX1"; + BEGIN(VALUE); + } + +^PPO3" " { + // DSS: plate centre x-coordinate in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+2; + dssflag = 1; + distran = DSS; + + keyname = "PPO3"; + BEGIN(VALUE); + } + +^PPO6" " { + // DSS: plate centre y-coordinate in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+3; + dssflag = 1; + distran = DSS; + + keyname = "PPO6"; + BEGIN(VALUE); + } + +^XPIXELSZ { + // DSS: pixel x-dimension in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+4; + dssflag = 1; + distran = DSS; + + keyname = "XPIXELSZ"; + BEGIN(VALUE); + } + +^YPIXELSZ { + // DSS: pixel y-dimension in micron. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+5; + dssflag = 1; + distran = DSS; + + keyname = "YPIXELSZ"; + BEGIN(VALUE); + } + +^PLTRAH" " { + // DSS: plate centre, right ascension - hours. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+6; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAH"; + BEGIN(VALUE); + } + +^PLTRAM" " { + // DSS: plate centre, right ascension - minutes. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+7; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAM"; + BEGIN(VALUE); + } + +^PLTRAS" " { + // DSS: plate centre, right ascension - seconds. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+8; + dssflag = 1; + distran = DSS; + + keyname = "PLTRAS"; + BEGIN(VALUE); + } + +^PLTDECSN { + // DSS: plate centre, declination - sign. + valtype = STRING; + distype = SEQUENT; + vptr = dsstmp+9; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECSN"; + BEGIN(PLTDECSN); + } + +^PLTDECD" " { + // DSS: plate centre, declination - degrees. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+10; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECD"; + BEGIN(VALUE); + } + +^PLTDECM" " { + // DSS: plate centre, declination - arcmin. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+11; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECM"; + BEGIN(VALUE); + } + +^PLTDECS" " { + // DSS: plate centre, declination - arcsec. + valtype = FLOAT; + distype = SEQUENT; + vptr = dsstmp+12; + dssflag = 1; + distran = DSS; + + keyname = "PLTDECS"; + BEGIN(VALUE); + } + +^PLATEID" " { + // DSS: plate identification (insufficient to trigger DSS). + valtype = STRING; + distype = SEQUENT; + vptr = dsstmp+13; + dssflag = 2; + distran = 0; + + keyname = "PLATEID"; + BEGIN(VALUE); + } + +^AMDX { + // DSS: axis 1 polynomial coefficient. + i = 1; + dssflag = 3; + + keyname = "AMDXm"; + BEGIN(DSSAMDXY); + } + +^AMDY { + // DSS: axis 2 polynomial coefficient. + i = 2; + dssflag = 3; + + keyname = "AMDYm"; + BEGIN(DSSAMDXY); + } + +^WAT[12]_{Z3} { + // TNX or ZPX: string-encoded data array. + sscanf(yytext, "WAT%d_%d", &i, &m); + if (watn < m) watn = m; + watflag = 1; + + valtype = STRING; + distype = SEQUENT; + vptr = wat[i-1] + 68*(m-1); + + a = ' '; + distran = WAT; + + keyname = "WATi_m"; + BEGIN(VALUE); + } + +^END" "{77} { + if (yyextra->nkeyrec) { + yyextra->nkeyrec = 0; + errmsg = "keyrecords following the END keyrecord were ignored"; + BEGIN(ERROR); + } else { + BEGIN(DISCARD); + } + } + +^. { + BEGIN(DISCARD); + } + +{I1}{ALT}" " | +{I2}{ALT}" " | +{I1}{ALT}" " | +{I2}{ALT} { + sscanf(yytext, "%d%c", &i, &a); + BEGIN(VALUE); + } + +0{I1}{ALT}" " | +0{Z1}{I1}{ALT}" " | +0{Z2}{I1}{ALT}" " | +0{Z3}{I1}{ALT} | +0{Z4}{I1} | +0{I1}{ALT} | +0{Z1}{I1} { + if (relax & WCSHDR_reject) { + // Violates the basic FITS standard. + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}{ALT}" " | +{Z2}{ALT}" " | +{Z3}{ALT}" " | +{Z4}{ALT}" " | +{Z5}{ALT} | +{Z6} | +{Z1}{ALT}" " | +{Z2}{ALT} | +{Z3} { + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + +. { + // Let it go. + BEGIN(DISCARD); + } + +. { + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "keyword looks very much like %s but isn't", + keyname); + BEGIN(ERROR); + + } else { + // Let it go. + BEGIN(DISCARD); + } + } + +{I1}_{I1}{ALT}" " | +{I1}_{I2}{ALT}" " | +{I2}_{I1}{ALT}" " | +{I2}_{I2}{ALT} { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + BEGIN(VALUE); + } + + +0{I1}_{I1}{ALT}" " | +{I1}_0{I1}{ALT}" " | +00{I1}_{I1}{ALT} | +0{I1}_0{I1}{ALT} | +{I1}_00{I1}{ALT} | +000{I1}_{I1} | +00{I1}_0{I1} | +0{I1}_00{I1} | +{I1}_000{I1} | +0{I1}_{I2}{ALT} | +{I1}_0{I2}{ALT} | +00{I1}_{I2} | +0{I1}_0{I2} | +{I1}_00{I2} | +0{I2}_{I1}{ALT} | +{I2}_0{I1}{ALT} | +00{I2}_{I1} | +0{I2}_0{I1} | +{I2}_00{I1} | +0{I2}_{I2} | +{I2}_0{I2} { + if (((altlin == 1) && (relax & WCSHDR_PC0i_0ja)) || + ((altlin == 2) && (relax & WCSHDR_CD0i_0ja))) { + sscanf(yytext, "%d_%d%c", &i, &j, &a); + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}_{Z1}{ALT}" " | +{Z2}_{Z1}{ALT}" " | +{Z1}_{Z2}{ALT}" " | +{Z3}_{Z1}{ALT} | +{Z2}_{Z2}{ALT} | +{Z1}_{Z3}{ALT} | +{Z4}_{Z1} | +{Z3}_{Z2} | +{Z2}_{Z3} | +{Z1}_{Z4} { + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + +{Z1}-{Z1}{ALT}" " | +{Z2}-{Z1}{ALT}" " | +{Z1}-{Z2}{ALT}" " | +{Z3}-{Z1}{ALT} | +{Z2}-{Z2}{ALT} | +{Z1}-{Z3}{ALT} | +{Z4}-{Z1} | +{Z3}-{Z2} | +{Z2}-{Z3} | +{Z1}-{Z4} { + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + +{Z2}{I1}{Z2}{I1} { + // This covers the defunct forms CD00i00j and PC00i00j. + if (((altlin == 1) && (relax & WCSHDR_PC00i00j)) || + ((altlin == 2) && (relax & WCSHDR_CD00i00j))) { + sscanf(yytext, "%3d%3d", &i, &j); + a = ' '; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = errtxt; + sprintf(errmsg, + "this form of the %s keyword is deprecated, use %s", + keyname, keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. { + BEGIN(DISCARD); + } + +{ALT} | +. { + if (YY_START == CCCCCCCa) { + sscanf(yytext, "%c", &a); + } else { + unput(yytext[0]); + a = 0; + } + + BEGIN(VALUE); + } + +. { + if (relax & WCSHDR_reject) { + // Looks too much like a FITS WCS keyword not to flag it. + errmsg = errtxt; + sprintf(errmsg, "invalid alternate code, keyword resembles %s " + "but isn't", keyname); + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{I1}_{Z1}{ALT}" " | +{I1}_{I2}{ALT}" " | +{I2}_{Z1}{ALT}" " | +{I2}_{I2}{ALT} { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + BEGIN(VALUE); + } + +0{I1}_{Z1}{ALT}" " | +{I1}_0{Z1}{ALT}" " | +00{I1}_{Z1}{ALT} | +0{I1}_0{Z1}{ALT} | +{I1}_00{Z1}{ALT} | +000{I1}_{Z1} | +00{I1}_0{Z1} | +0{I1}_00{Z1} | +{I1}_000{Z1} | +0{I1}_{I2}{ALT} | +{I1}_0{I2}{ALT} | +00{I1}_{I2} | +0{I1}_0{I2} | +{I1}_00{I2} | +0{I2}_{Z1}{ALT} | +{I2}_0{Z1}{ALT} | +00{I2}_{Z1} | +0{I2}_0{Z1} | +{I2}_00{Z1} | +0{I2}_{I2} | +{I2}_0{I2} { + if (((valtype == FLOAT) && (relax & WCSHDR_PV0i_0ma)) || + ((valtype == STRING) && (relax & WCSHDR_PS0i_0ma))) { + sscanf(yytext, "%d_%d%c", &i, &m, &a); + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "indices in parameterized keywords must not have " + "leading zeroes"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +{Z1}_{Z1}{ALT}" " | +{Z2}_{Z1}{ALT}" " | +{Z1}_{Z2}{ALT}" " | +{Z3}_{Z1}{ALT} | +{Z2}_{Z2}{ALT} | +{Z1}_{Z3}{ALT} | +{Z4}_{Z1} | +{Z3}_{Z2} | +{Z2}_{Z3} | +{Z1}_{Z4} { + // Anything that has fallen through to this point must contain + // an invalid axis number. + errmsg = "axis number must exceed 0"; + BEGIN(ERROR); + } + +{Z1}-{Z1}{ALT}" " | +{Z2}-{Z1}{ALT}" " | +{Z1}-{Z2}{ALT}" " | +{Z3}-{Z1}{ALT} | +{Z2}-{Z2}{ALT} | +{Z1}-{Z3}{ALT} | +{Z4}-{Z1} | +{Z3}-{Z2} | +{Z2}-{Z3} | +{Z1}-{Z4} { + errmsg = errtxt; + sprintf(errmsg, "%s keyword must use an underscore, not a dash", + keyname); + BEGIN(ERROR); + } + +. { + BEGIN(DISCARD); + } + +{Z1}{ALT}" " | +{Z2}{ALT} | +{Z3} { + a = ' '; + sscanf(yytext, "%d%c", &i, &a); + + if (relax & WCSHDR_strict) { + errmsg = "the CROTAn keyword is deprecated, use PCi_ja"; + BEGIN(ERROR); + + } else if ((a == ' ') || (relax & WCSHDR_CROTAia)) { + yyless(0); + BEGIN(CCCCCia); + + } else if (relax & WCSHDR_reject) { + errmsg = "CROTAn keyword may not have an alternate version code"; + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + } + +. { + yyless(0); + BEGIN(CCCCCia); + } + +{Z1}" " { + if (relax & WCSHDR_PROJPn) { + sscanf(yytext, "%d", &m); + i = 0; + a = ' '; + BEGIN(VALUE); + + } else if (relax & WCSHDR_reject) { + errmsg = "the PROJPn keyword is deprecated, use PVi_ma"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +{Z2}" " | +{Z3} { + if (relax & (WCSHDR_PROJPn | WCSHDR_reject)) { + errmsg = "invalid PROJPn keyword"; + BEGIN(ERROR); + + } else { + BEGIN(DISCARD); + } + } + +. { + BEGIN(DISCARD); + } + +{Z1}_{Z1}" " | +{Z1}_{Z1}" " { + // SIP keywords. + valtype = FLOAT; + distype = PRIOR; + vptr = &(distem.dp); + npptr = ndp; + + a = ' '; + distran = SIP; + + sscanf(yytext, "%d_%d", &p, &q); + BEGIN(VALUE); + } + +. | +. { + BEGIN(DISCARD); + } + +{I1}" " | +{I2}" " { + // DSS keywords. + valtype = FLOAT; + distype = SEQUENT; + vptr = &(distem.dp); + npptr = ndq; + + a = ' '; + distran = DSS; + + sscanf(yytext, "%d", &m); + BEGIN(VALUE); + } + +. { + BEGIN(DISCARD); + } + +=" "+{STRING} { + // Special handling for this iconic DSS keyword. + if (1 < ipass) { + // Look for a minus sign. + sscanf(yytext, "= '%s", strtmp); + dbltmp = strcmp(strtmp, "-") ? 1.0 : -1.0; + } + + BEGIN(COMMENT); + } + +. { + BEGIN(DISCARD); + } + +=" "+ { + // Do checks on i, j & m. + if (99 < i || 99 < j || 99 < m) { + if (relax & WCSHDR_reject) { + if (99 < i || 99 < j) { + errmsg = "axis number exceeds 99"; + } else if (m > 99) { + errmsg = "parameter number exceeds 99"; + } + BEGIN(ERROR); + + } else { + // Pretend we don't recognize it. + BEGIN(DISCARD); + } + + } else { + if (valtype == INTEGER) { + BEGIN(INTEGER_VAL); + } else if (valtype == FLOAT) { + BEGIN(FLOAT_VAL); + } else if (valtype == FLOAT2) { + BEGIN(FLOAT2_VAL); + } else if (valtype == STRING) { + BEGIN(STRING_VAL); + } else if (valtype == RECORD) { + BEGIN(RECORD_VAL); + } else { + errmsg = errtxt; + sprintf(errmsg, "internal parser ERROR, bad data type: %d", + valtype); + BEGIN(ERROR); + } + } + } + +. { + errmsg = "invalid KEYWORD = VALUE syntax"; + BEGIN(ERROR); + } + +{INTEGER} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + sscanf(yytext, "%d", &inttmp); + + BEGIN(COMMENT); + } + } + +. { + errmsg = "an integer value was expected"; + BEGIN(ERROR); + } + +{FLOAT} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue. + wcsutil_str2double(yytext, &dbltmp); + + if (chekval && chekval(dbltmp)) { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } else { + BEGIN(COMMENT); + } + } + } + +. { + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + +{FLOAT} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Read the keyvalue as integer and fractional parts. + wcsutil_str2double2(yytext, dbl2tmp); + + BEGIN(COMMENT); + } + } + +. { + errmsg = "a floating-point value was expected"; + BEGIN(ERROR); + } + +{STRING} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + // Copy the keyvalue minus the quotes. + strncpy(strtmp, yytext+1, yyleng-2); + strtmp[yyleng-2] = '\0'; + + // Strip off trailing blanks. + for (int jx = yyleng-3; jx >= 0; jx--) { + if (strtmp[jx] != ' ') { + break; + } + strtmp[jx] = '\0'; + } + + // Squeeze out repeated quotes. + int ix = 0; + for (int jx = 0; jx < 72; jx++) { + if (ix < jx) { + strtmp[ix] = strtmp[jx]; + } + + if (strtmp[jx] == '\0') { + break; + } else if (strtmp[jx] == '\'' && strtmp[jx+1] == '\'') { + jx++; + } + + ix++; + } + + BEGIN(COMMENT); + } + } + +. { + errmsg = "a string value was expected"; + BEGIN(ERROR); + } + +{RECORD} { + if (ipass == 1) { + BEGIN(COMMENT); + + } else { + yyless(1); + + BEGIN(RECFIELD); + } + } + +. { + errmsg = "a record was expected"; + BEGIN(ERROR); + } + +{FIELD} { + strncpy(strtmp, yytext, 72); + strtmp[72] = '\0'; + BEGIN(RECCOLON); + } + +. { + errmsg = "invalid record field"; + BEGIN(ERROR); + } + +:" "+ { + BEGIN(RECVALUE); + } + +. { + errmsg = "invalid record syntax"; + BEGIN(ERROR); + } + +{INTEGER} { + rectype = 0; + sscanf(yytext, "%d", &inttmp); + BEGIN(RECEND); + } + +{FLOAT} { + rectype = 1; + wcsutil_str2double(yytext, &dbltmp); + BEGIN(RECEND); + } + +. { + errmsg = "invalid record value"; + BEGIN(ERROR); + } + +' { + BEGIN(COMMENT); + } + +{INLINE}$ { + if (ipass == 1) { + // Do first-pass bookkeeping. + wcspih_pass1(naxis, i, j, a, distype, alts, dpq, npptr); + BEGIN(FLUSH); + + } else if (*wcs) { + // Store the value now that the keyrecord has been validated. + int gotone = 0; + for (int ialt = 0; ialt < *nwcs; ialt++) { + // The loop here is for keywords that apply + // to every alternate; these have a == 0. + if (a >= 'A') { + ialt = alts[a-'A'+1]; + if (ialt < 0) break; + } + gotone = 1; + + if (vptr) { + if (sipflag) { + // Translate a SIP keyword into DPja. + struct disprm *disp = (*wcs)->lin.dispre; + int ipx = (disp->ndp)++; + + // SIP doesn't have alternates. + char keyword[16]; + sprintf(keyword, "DP%d", i); + sprintf(strtmp, "SIP.%s.%d_%d", (sipflag==2)?"FWD":"REV", + p, q); + if (valtype == INTEGER) { + dpfill(disp->dp+ipx, keyword, strtmp, i, 0, inttmp, 0.0); + } else { + dpfill(disp->dp+ipx, keyword, strtmp, i, 1, 0, dbltmp); + } + + } else if (dssflag) { + // All DSS keywords require special handling. + if (dssflag == 1) { + // Temporary parameter for DSS used by wcspih_final(). + *((double *)vptr) = dbltmp; + + } else if (dssflag == 2) { + // Temporary parameter for DSS used by wcspih_final(). + strcpy((char *)vptr, strtmp); + + } else { + // Translate a DSS keyword into DQia. + if (m <= 13 || dbltmp != 0.0) { + struct disprm *disp = (*wcs)->lin.disseq; + int ipx = (disp->ndp)++; + + // DSS doesn't have alternates. + char keyword[16]; + sprintf(keyword, "DQ%d", i); + sprintf(strtmp, "DSS.AMD.%d", m); + dpfill(disp->dp+ipx, keyword, strtmp, i, 1, 0, dbltmp); + + // Also required by wcspih_final(). + if (m <= 3) { + dsstmp[13+(i-1)*3+m] = dbltmp; + } + } + } + + } else if (watflag) { + // String array for TNX and ZPX used by wcspih_final(). + strcpy((char *)vptr, strtmp); + + } else { + // An "ordinary" keyword. + struct wcsprm *wcsp = *wcs + ialt; + struct disprm *disp; + void *wptr; + ptrdiff_t voff; + if (auxprm) { + // Additional auxiliary parameter. + struct auxprm *auxp = wcsp->aux; + voff = (char *)vptr - (char *)(&auxtem); + wptr = (void *)((char *)auxp + voff); + + } else if (distype) { + // Distortion parameter of some kind. + if (distype == PRIOR) { + // Prior distortion. + disp = wcsp->lin.dispre; + } else { + // Sequent distortion. + disp = wcsp->lin.disseq; + } + voff = (char *)vptr - (char *)(&distem); + wptr = (void *)((char *)disp + voff); + + } else { + // A parameter that lives directly in wcsprm. + voff = (char *)vptr - (char *)(&wcstem); + wptr = (void *)((char *)wcsp + voff); + } + + if (valtype == INTEGER) { + *((int *)wptr) = inttmp; + + } else if (valtype == FLOAT) { + // Apply keyword parameterization. + if (npptr == npv) { + int ipx = (wcsp->npv)++; + wcsp->pv[ipx].i = i; + wcsp->pv[ipx].m = m; + wptr = &(wcsp->pv[ipx].value); + + } else if (j) { + wptr = *((double **)wptr) + (i - 1)*(wcsp->naxis) + + (j - 1); + + } else if (i) { + wptr = *((double **)wptr) + (i - 1); + } + + if (special) { + special(wptr, &dbltmp); + } else { + *((double *)wptr) = dbltmp; + } + + // Flag presence of PCi_ja, or CDi_ja and/or CROTAia. + if (altlin) { + wcsp->altlin |= altlin; + altlin = 0; + } + + } else if (valtype == FLOAT2) { + // Split MJDREF and JDREF into integer and fraction. + if (special) { + special(wptr, dbl2tmp); + } else { + *((double *)wptr) = dbl2tmp[0]; + *((double *)wptr + 1) = dbl2tmp[1]; + } + + } else if (valtype == STRING) { + // Apply keyword parameterization. + if (npptr == nps) { + int ipx = (wcsp->nps)++; + wcsp->ps[ipx].i = i; + wcsp->ps[ipx].m = m; + wptr = wcsp->ps[ipx].value; + + } else if (j) { + wptr = *((char (**)[72])wptr) + + (i - 1)*(wcsp->naxis) + (j - 1); + + } else if (i) { + wptr = *((char (**)[72])wptr) + (i - 1); + } + + char *cptr = (char *)wptr; + strcpy(cptr, strtmp); + + } else if (valtype == RECORD) { + int ipx = (disp->ndp)++; + + char keyword[16]; + if (a == ' ') { + sprintf(keyword, "%.2s%d", keyname, i); + } else { + sprintf(keyword, "%.2s%d%c", keyname, i, a); + } + + dpfill(disp->dp+ipx, keyword, strtmp, i, rectype, inttmp, + dbltmp); + } + } + } + + if (a) break; + } + + if (gotone) { + nvalid++; + if (ctrl == 4) { + if (distran || dssflag) { + wcsfprintf(stderr, "%.80s\n Accepted (%d) as a " + "recognized WCS convention.\n", keyrec, nvalid); + } else { + wcsfprintf(stderr, "%.80s\n Accepted (%d) as a " + "valid WCS keyrecord.\n", keyrec, nvalid); + } + } + + BEGIN(FLUSH); + + } else { + errmsg = "syntactically valid WCS keyrecord has no effect"; + BEGIN(ERROR); + } + + } else { + BEGIN(FLUSH); + } + } + +.*" "*\/.*$ { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + +[^ \/\n]*{INLINE}$ { + errmsg = "invalid keyvalue"; + BEGIN(ERROR); + } + +" "+[^\/\n].*{INLINE}$ { + errmsg = "invalid keyvalue or malformed keycomment"; + BEGIN(ERROR); + } + +.*$ { + errmsg = "malformed keycomment"; + BEGIN(ERROR); + } + +.*$ { + if (ipass == npass) { + if (ctrl < 0) { + // Preserve discards. + keep = keyrec; + + } else if (2 < ctrl) { + nother++; + wcsfprintf(stderr, "%.80s\n Not a recognized WCS keyword.\n", + keyrec); + } + } + BEGIN(FLUSH); + } + +.*$ { + if (ipass == npass) { + (*nreject)++; + + if (ctrl%10 == -1) { + // Preserve rejects. + keep = keyrec; + } + + if (1 < abs(ctrl%10)) { + wcsfprintf(stderr, "%.80s\n Rejected (%d), %s.\n", + keyrec, *nreject, errmsg); + } + } + BEGIN(FLUSH); + } + +.*\n { + if (ipass == npass && keep) { + if (hptr < keep) { + strncpy(hptr, keep, 80); + } + hptr += 80; + } + + naux += auxprm; + + // Throw away the rest of the line and reset for the next one. + i = j = 0; + m = 0; + a = ' '; + + keyrec += 80; + + valtype = -1; + distype = 0; + vptr = 0x0; + keep = 0x0; + + altlin = 0; + npptr = 0x0; + chekval = 0x0; + special = 0x0; + auxprm = 0; + sipflag = 0; + dssflag = 0; + watflag = 0; + + BEGIN(INITIAL); + } + +<> { + // End-of-input. + int status; + if (ipass == 1) { + if ((status = wcspih_init1(naxis, alts, dpq, npv, nps, ndp, ndq, + naux, distran, nwcs, wcs)) || + (*nwcs == 0 && ctrl == 0)) { + return status; + } + + if (2 < abs(ctrl%10)) { + if (*nwcs == 1) { + if (strcmp(wcs[0]->wcsname, "DEFAULTS") != 0) { + wcsfprintf(stderr, "Found one coordinate representation.\n"); + } + } else { + wcsfprintf(stderr, "Found %d coordinate representations.\n", + *nwcs); + } + } + + watstr = calloc(2*(watn*68 + 1), sizeof(char)); + wat[0] = watstr; + wat[1] = watstr + watn*68 + 1; + } + + if (ipass++ < npass) { + yyextra->hdr = header; + yyextra->nkeyrec = nkeyrec; + keyrec = header; + *nreject = 0; + + i = j = 0; + m = 0; + a = ' '; + + valtype = -1; + distype = 0; + vptr = 0x0; + + altlin = 0; + npptr = 0x0; + chekval = 0x0; + special = 0x0; + auxprm = 0; + sipflag = 0; + dssflag = 0; + watflag = 0; + + yyrestart(yyin, yyscanner); + + } else { + + if (ctrl < 0) { + *hptr = '\0'; + } else if (ctrl == 1) { + wcsfprintf(stderr, "%d WCS keyrecord%s rejected.\n", + *nreject, (*nreject==1)?" was":"s were"); + } else if (ctrl == 4) { + wcsfprintf(stderr, "\n"); + wcsfprintf(stderr, "%5d keyrecord%s rejected for syntax or " + "other errors,\n", *nreject, (*nreject==1)?" was":"s were"); + wcsfprintf(stderr, "%5d %s recognized as syntactically valid, " + "and\n", nvalid, (nvalid==1)?"was":"were"); + wcsfprintf(stderr, "%5d other%s were not recognized as WCS " + "keyrecords.\n", nother, (nother==1)?"":"s"); + } + + status = wcspih_final(ndp, ndq, distran, dsstmp, wat, nwcs, wcs); + free(watstr); + return status; + } + } + +%% + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcspih( + char *header, + int nkeyrec, + int relax, + int ctrl, + int *nreject, + int *nwcs, + struct wcsprm **wcs) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcspih_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcspih_scanner(header, nkeyrec, relax, ctrl, nreject, nwcs, + wcs, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + + +/*---------------------------------------------------------------------------- +* Determine the number of coordinate representations (up to 27) and the +* number of coordinate axes in each, which distortions are present, and the +* number of PVi_ma, PSi_ma, DPja, and DQia keywords in each representation. +*---------------------------------------------------------------------------*/ + +void wcspih_pass1( + int naxis, + int i, + int j, + char a, + int distype, + int alts[], + int dpq[], + int *npptr) + +{ + // On the first pass alts[] is used to determine the number of axes + // for each of the 27 possible alternate coordinate descriptions. + if (a == 0) { + return; + } + + int ialt = 0; + if (a != ' ') { + ialt = a - 'A' + 1; + } + + int *ip = alts + ialt; + + if (*ip < naxis) { + *ip = naxis; + } + + // i or j can be greater than naxis. + if (*ip < i) { + *ip = i; + } + + if (*ip < j) { + *ip = j; + } + + // Type of distortions present. + dpq[ialt] |= distype; + + // Count PVi_ma, PSi_ma, DPja, or DQia keywords. + if (npptr) { + npptr[ialt]++; + } +} + + +/*---------------------------------------------------------------------------- +* Allocate memory for an array of the required number of wcsprm structs and +* initialize each of them. +*---------------------------------------------------------------------------*/ + +int wcspih_init1( + int naxis, + int alts[], + int dpq[], + int npv[], + int nps[], + int ndp[], + int ndq[], + int naux, + int distran, + int *nwcs, + struct wcsprm **wcs) + +{ + int status = 0; + + // Find the number of coordinate descriptions. + *nwcs = 0; + for (int ialt = 0; ialt < 27; ialt++) { + if (alts[ialt]) (*nwcs)++; + } + + int defaults; + if ((defaults = !(*nwcs) && naxis)) { + // NAXIS is non-zero but there were no WCS keywords with an alternate + // version code; create a default WCS with blank alternate version. + wcspih_pass1(naxis, 0, 0, ' ', 0, alts, dpq, 0x0); + *nwcs = 1; + } + + if (*nwcs) { + // Allocate memory for the required number of wcsprm structs. + if ((*wcs = calloc(*nwcs, sizeof(struct wcsprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + int ndis = 0; + if (distran == SIP) { + // DPja.NAXES and DPja.OFFSET.j to be added for SIP (see below and + // wcspih_final()). + ndp[0] += 6; + + } else if (distran == DSS) { + // DPja.NAXES to be added for DSS (see below and wcspih_final()). + ndq[0] += 2; + } + + // Initialize each wcsprm struct. + struct wcsprm *wcsp = *wcs; + *nwcs = 0; + for (int ialt = 0; ialt < 27; ialt++) { + if (alts[ialt]) { + wcsp->flag = -1; + int npvmax = npv[ialt]; + int npsmax = nps[ialt]; + if ((status = wcsinit(1, alts[ialt], wcsp, npvmax, npsmax, -1))) { + wcsvfree(nwcs, wcs); + break; + } + + // Record the alternate version code. + if (ialt) { + wcsp->alt[0] = 'A' + ialt - 1; + } + + // Record in wcsname whether this is a default description. + if (defaults) { + strncpy(wcsp->wcsname, "DEFAULTS", 72); + } + + // Any additional auxiliary keywords present? + if (naux) { + if (wcsauxi(1, wcsp)) { + return WCSHDRERR_MEMORY; + } + } + + // Any distortions present? + struct disprm *disp; + if (dpq[ialt] & 1) { + if ((disp = calloc(1, sizeof(struct disprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + // Attach it to linprm. Also inits it. + ndis++; + int ndpmax = ndp[ialt]; + disp->flag = -1; + lindist(1, &(wcsp->lin), disp, ndpmax); + } + + if (dpq[ialt] & 2) { + if ((disp = calloc(1, sizeof(struct disprm))) == 0x0) { + return WCSHDRERR_MEMORY; + } + + // Attach it to linprm. Also inits it. + ndis++; + int ndpmax = ndq[ialt]; + disp->flag = -1; + lindist(2, &(wcsp->lin), disp, ndpmax); + } + + // On the second pass alts[] indexes the array of wcsprm structs. + alts[ialt] = (*nwcs)++; + + wcsp++; + + } else { + // Signal that there is no wcsprm for this alt. + alts[ialt] = -1; + } + } + + + // Translated distortion? Neither SIP nor DSS have alternates, so the + // presence of keywords for either (not both together), as flagged by + // distran, necessarily refers to the primary representation. + if (distran == SIP) { + strncpy((*wcs)->lin.dispre->dtype[0], "SIP", 72); + strncpy((*wcs)->lin.dispre->dtype[1], "SIP", 72); + + // SIP doesn't have axis mapping. + (*wcs)->lin.dispre->ndp = 6; + dpfill((*wcs)->lin.dispre->dp, "DP1", "NAXES", 0, 0, 2, 0.0); + dpfill((*wcs)->lin.dispre->dp+3, "DP2", "NAXES", 0, 0, 2, 0.0); + + } else if (distran == DSS) { + strncpy((*wcs)->lin.disseq->dtype[0], "DSS", 72); + strncpy((*wcs)->lin.disseq->dtype[1], "DSS", 72); + + // The Paper IV translation of DSS doesn't require an axis mapping. + (*wcs)->lin.disseq->ndp = 2; + dpfill((*wcs)->lin.disseq->dp, "DQ1", "NAXES", 0, 0, 2, 0.0); + dpfill((*wcs)->lin.disseq->dp+1, "DQ2", "NAXES", 0, 0, 2, 0.0); + } + } + + return status; +} + + +/*---------------------------------------------------------------------------- +* Interpret the JDREF, JDREFI, and JDREFF keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_jdref(double *mjdref, const double *jdref) + +{ + // Set MJDREF from JDREF. + if (undefined(mjdref[0] && undefined(mjdref[1]))) { + mjdref[0] = jdref[0] - 2400000.0; + mjdref[1] = jdref[1] - 0.5; + + if (mjdref[1] < 0.0) { + mjdref[0] -= 1.0; + mjdref[1] += 1.0; + } + } + + return 0; +} + +int wcspih_jdrefi(double *mjdref, const double *jdrefi) + +{ + // Set the integer part of MJDREF from JDREFI. + if (undefined(mjdref[0])) { + mjdref[0] = *jdrefi - 2400000.5; + } + + return 0; +} + + +int wcspih_jdreff(double *mjdref, const double *jdreff) + +{ + // Set the fractional part of MJDREF from JDREFF. + if (undefined(mjdref[1])) { + mjdref[1] = *jdreff; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret EPOCHa keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_epoch(double *equinox, const double *epoch) + +{ + // If EQUINOXa is currently undefined then set it from EPOCHa. + if (undefined(*equinox)) { + *equinox = *epoch; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Interpret VSOURCEa keywords. +*---------------------------------------------------------------------------*/ + +int wcspih_vsource(double *zsource, const double *vsource) + +{ + const double c = 299792458.0; + + // If ZSOURCEa is currently undefined then set it from VSOURCEa. + if (undefined(*zsource)) { + // Convert relativistic Doppler velocity to redshift. + double beta = *vsource/c; + *zsource = (1.0 + beta)/sqrt(1.0 - beta*beta) - 1.0; + } + + return 0; +} + + +/*---------------------------------------------------------------------------- +* Check validity of a TIMEPIXR keyvalue. +*---------------------------------------------------------------------------*/ + +int wcspih_timepixr(double timepixr) + +{ + return (timepixr < 0.0 || 1.0 < timepixr); +} + + +/*---------------------------------------------------------------------------- +* Interpret special keywords encountered for each coordinate representation. +*---------------------------------------------------------------------------*/ + +int wcspih_final( + int ndp[], + int ndq[], + int distran, + double dsstmp[], + char *wat[], + int *nwcs, + struct wcsprm **wcs) + +{ + for (int ialt = 0; ialt < *nwcs; ialt++) { + // Interpret -TAB header keywords. + int status; + if ((status = wcstab(*wcs+ialt))) { + wcsvfree(nwcs, wcs); + return status; + } + + if (ndp[ialt] && ndq[ialt]) { + // Prior and sequent distortions co-exist in this representation; + // ensure the latter gets DVERRa. + (*wcs+ialt)->lin.disseq->totdis = (*wcs+ialt)->lin.dispre->totdis; + } + } + + // Translated distortion functions; apply only to the primary WCS. + struct wcsprm *wcsp = *wcs; + if (distran == SIP) { + // SIP doesn't have alternates, nor axis mapping. + struct disprm *disp = wcsp->lin.dispre; + dpfill(disp->dp+1, "DP1", "OFFSET.1", 0, 1, 0, wcsp->crpix[0]); + dpfill(disp->dp+2, "DP1", "OFFSET.2", 0, 1, 0, wcsp->crpix[1]); + dpfill(disp->dp+4, "DP2", "OFFSET.1", 0, 1, 0, wcsp->crpix[0]); + dpfill(disp->dp+5, "DP2", "OFFSET.2", 0, 1, 0, wcsp->crpix[1]); + + } else if (distran == DSS) { + // DSS doesn't have alternates, nor axis mapping. This translation + // follows Paper IV, Sect. 5.2 using the same variable names. + double CNPIX1 = dsstmp[0]; + double CNPIX2 = dsstmp[1]; + + double Xc = dsstmp[2]/1000.0; + double Yc = dsstmp[3]/1000.0; + double Rx = dsstmp[4]/1000.0; + double Ry = dsstmp[5]/1000.0; + + double A1 = dsstmp[14]; + double A2 = dsstmp[15]; + double A3 = dsstmp[16]; + double B1 = dsstmp[17]; + double B2 = dsstmp[18]; + double B3 = dsstmp[19]; + double S = sqrt(fabs(A1*B1 - A2*B2)); + + double X0 = (A2*B3 - A3*B1) / (A1*B1 - A2*B2); + double Y0 = (A3*B2 - A1*B3) / (A1*B1 - A2*B2); + + wcsp->crpix[0] = (Xc - X0)/Rx - (CNPIX1 - 0.5); + wcsp->crpix[1] = (Yc + Y0)/Ry - (CNPIX2 - 0.5); + + wcsp->pc[0] = A1*Rx/S; + wcsp->pc[1] = -A2*Ry/S; + wcsp->pc[2] = -B2*Rx/S; + wcsp->pc[3] = B1*Ry/S; + wcsp->altlin = 1; + + wcsp->cdelt[0] = -S/3600.0; + wcsp->cdelt[1] = S/3600.0; + + double *crval = wcsp->crval; + crval[0] = (dsstmp[6] + (dsstmp[7] + dsstmp[8] /60.0)/60.0)*15.0; + crval[1] = dsstmp[10] + (dsstmp[11] + dsstmp[12]/60.0)/60.0; + if (dsstmp[9] == -1.0) crval[1] *= -1.0; + + strncpy(wcsp->ctype[0], "RA---TAN", 72); + strncpy(wcsp->ctype[1], "DEC--TAN", 72); + + sprintf(wcsp->wcsname, "DSS PLATEID %.4s", (char *)(dsstmp+13)); + + // Erase the approximate WCS provided in modern DSS headers. + wcsp->cd[0] = 0.0; + wcsp->cd[1] = 0.0; + wcsp->cd[2] = 0.0; + wcsp->cd[3] = 0.0; + + } else if (distran == WAT) { + // TNX and ZPX don't have alternates, nor axis mapping. + char *wp; + int omax, omin, wctrl[4]; + double wval; + struct disprm *disp = wcsp->lin.disseq; + + // Disassemble the core dump stored in the WATi_m strings. + int i, nterms = 0; + for (i = 0; i < 2; i++) { + char wtype[8]; + sscanf(wat[i], "wtype=%s", wtype); + + if (strcmp(wtype, "tnx") == 0) { + strncpy(disp->dtype[i], "WAT-TNX", 72); + } else if (strcmp(wtype, "zpx") == 0) { + strncpy(disp->dtype[i], "WAT-ZPX", 72); + } else { + // Could contain "tan" or something else to be ignored. + lindist(2, &(wcsp->lin), 0x0, 0); + return 0; + } + + // The PROJPn parameters are duplicated on each ZPX axis. + if (i == 1 && strcmp(wtype, "zpx") == 0) { + // Take those on the second (latitude) axis ignoring the other. + // First we have to count them and allocate space in wcsprm. + wp = wat[i]; + int npv; + for (npv = 0; npv < 30; npv++) { + if ((wp = strstr(wp, "projp")) == 0x0) break; + wp += 5; + } + + // Allocate space. + if (npv) { + wcsp->npvmax += npv; + wcsp->pv = realloc(wcsp->pv, wcsp->npvmax*sizeof(struct pvcard)); + if (wcsp->pv == 0x0) { + return WCSHDRERR_MEMORY; + } + + wcsp->m_pv = wcsp->pv; + } + + // Copy the values. + wp = wat[i]; + for (int ipv = wcsp->npv; ipv < wcsp->npvmax; ipv++) { + if ((wp = strstr(wp, "projp")) == 0x0) break; + + int m; + sscanf(wp, "projp%d=%lf", &m, &wval); + wcsp->pv[ipv].i = 2; + wcsp->pv[ipv].m = m; + wcsp->pv[ipv].value = wval; + + wp += 5; + } + + wcsp->npv += npv; + } + + // Read the control parameters. + if ((wp = strchr(wat[i], '"')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + + for (int m = 0; m < 4; m++) { + sscanf(wp, "%d", wctrl+m); + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // How many coefficients are we expecting? + omin = (wctrl[1] < wctrl[2]) ? wctrl[1] : wctrl[2]; + omax = (wctrl[1] < wctrl[2]) ? wctrl[2] : wctrl[1]; + if (wctrl[3] == 0) { + // No cross terms. + nterms += omin + omax; + + } else if (wctrl[3] == 1) { + // Full cross terms. + nterms += omin*omax; + + } else if (wctrl[3] == 2) { + // Half cross terms. + nterms += omin*omax - omin*(omin-1)/2; + } + } + + // Allocate memory for dpkeys. + ndq[0] += 2*(1 + 1 + 4) + nterms; + + disp->ndpmax += ndq[0]; + disp->dp = realloc(disp->dp, disp->ndpmax*sizeof(struct dpkey)); + if (disp->dp == 0x0) { + return WCSHDRERR_MEMORY; + } + + disp->m_dp = disp->dp; + + + // Populate dpkeys. + int idp = disp->ndp; + for (i = 0; i < 2; i++) { + dpfill(disp->dp+(idp++), "DQ", "NAXES", i+1, 0, 2, 0.0); + + // Read the control parameters. + if ((wp = strchr(wat[i], '"')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + + for (int m = 0; m < 4; m++) { + sscanf(wp, "%d", wctrl+m); + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // Polynomial type. + char wpoly[12]; + dpfill(disp->dp+(idp++), "DQ", "WAT.POLY", i+1, 0, wctrl[0], 0.0); + if (wctrl[0] == 1) { + // Chebyshev polynomial. + strncpy(wpoly, "CHBY", 12); + } else if (wctrl[0] == 2) { + // Legendre polynomial. + strncpy(wpoly, "LEGR", 12); + } else if (wctrl[0] == 3) { + // Polynomial is the sum of monomials. + strncpy(wpoly, "MONO", 12); + } else { + // Unknown code. + strncpy(wpoly, "UNKN", 12); + } + + // Read the scaling parameters. + char field[40]; + for (int m = 0; m < 4; m++) { + sscanf(wp, "%lf", &wval); + sprintf(field, "WAT.%c%s", (m<2)?'X':'Y', (m%2)?"MAX":"MIN"); + dpfill(disp->dp+(idp++), "DQ", field, i+1, 1, 0, wval); + + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + + // Read the coefficients. + for (int n = 0; n < wctrl[2]; n++) { + for (int m = 0; m < wctrl[1]; m++) { + if (wctrl[3] == 0) { + if (m && n) continue; + } else if (wctrl[3] == 2) { + if (m+n > omax-1) continue; + } + + sscanf(wp, "%lf", &wval); + if (wval == 0.0) continue; + + sprintf(field, "WAT.%s.%d_%d", wpoly, m, n); + dpfill(disp->dp+(idp++), "DQ", field, i+1, 1, 0, wval); + + if ((wp = strchr(wp, ' ')) == 0x0) { + return WCSHDRERR_PARSER; + } + wp++; + } + } + } + + disp->ndp = idp; + } + + return 0; +} diff --git a/deps/wcslib/C/wcsprintf.c b/deps/wcslib/C/wcsprintf.c new file mode 100644 index 0000000..6904b22 --- /dev/null +++ b/deps/wcslib/C/wcsprintf.c @@ -0,0 +1,170 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsprintf.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include + +#include "wcsprintf.h" + +static FILE *wcsprintf_file = 0x0; +static char *wcsprintf_buff = 0x0; +static char *wcsprintf_bufp = 0x0; +static size_t wcsprintf_size = 0; + +//---------------------------------------------------------------------------- + +int wcsprintf_set(FILE *wcsout) + +{ + if (wcsout != 0x0) { + // Output to file. + wcsprintf_file = wcsout; + + if (wcsprintf_buff != 0x0) { + // Release the buffer. + free(wcsprintf_buff); + wcsprintf_buff = 0x0; + } + + } else { + // Output to buffer. + wcsprintf_file = 0x0; + + if (wcsprintf_buff == 0x0) { + // Allocate a buffer. + wcsprintf_buff = malloc(1024); + if (wcsprintf_buff == NULL) { + return 1; + } + wcsprintf_size = 1024; + } + + // Reset pointer to the start of the buffer. + wcsprintf_bufp = wcsprintf_buff; + *wcsprintf_bufp = '\0'; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +const char *wcsprintf_buf(void) + +{ + return wcsprintf_buff; +} + +//---------------------------------------------------------------------------- + +int wcsprintf(const char *format, ...) + +{ + char *realloc_buff; + int nbytes; + size_t used; + va_list arg_list; + + if (wcsprintf_buff == 0x0 && wcsprintf_file == 0x0) { + // Send output to stdout if wcsprintf_set() hasn't been called. + wcsprintf_file = stdout; + } + + va_start(arg_list, format); + + if (wcsprintf_file) { + // Output to file. + nbytes = vfprintf(wcsprintf_file, format, arg_list); + + } else { + // Output to buffer. + used = wcsprintf_bufp - wcsprintf_buff; + if (wcsprintf_size - used < 128) { + // Expand the buffer. + wcsprintf_size += 1024; + realloc_buff = realloc(wcsprintf_buff, wcsprintf_size); + if (realloc_buff == NULL) { + free(wcsprintf_buff); + wcsprintf_buff = 0x0; + return 1; + } + wcsprintf_buff = realloc_buff; + wcsprintf_bufp = wcsprintf_buff + used; + } + + nbytes = vsprintf(wcsprintf_bufp, format, arg_list); + wcsprintf_bufp += nbytes; + } + + va_end(arg_list); + + return nbytes; +} + +//---------------------------------------------------------------------------- + +int wcsfprintf(FILE *stream, const char *format, ...) + +{ + char *realloc_buff; + int nbytes; + size_t used; + va_list arg_list; + + if (wcsprintf_buff == 0x0 && wcsprintf_file == 0x0) { + // Send output to stream if wcsprintf_set() hasn't been called. + wcsprintf_file = stream; + } + + va_start(arg_list, format); + + if (wcsprintf_file) { + // Output to file. + nbytes = vfprintf(wcsprintf_file, format, arg_list); + + } else { + // Output to buffer. + used = wcsprintf_bufp - wcsprintf_buff; + if (wcsprintf_size - used < 128) { + // Expand the buffer. + wcsprintf_size += 1024; + realloc_buff = realloc(wcsprintf_buff, wcsprintf_size); + if (realloc_buff == NULL) { + free(wcsprintf_buff); + wcsprintf_buff = 0x0; + return 1; + } + wcsprintf_buff = realloc_buff; + wcsprintf_bufp = wcsprintf_buff + used; + } + + nbytes = vsprintf(wcsprintf_bufp, format, arg_list); + wcsprintf_bufp += nbytes; + } + + va_end(arg_list); + + return nbytes; +} diff --git a/deps/wcslib/C/wcsprintf.h b/deps/wcslib/C/wcsprintf.h new file mode 100644 index 0000000..5759357 --- /dev/null +++ b/deps/wcslib/C/wcsprintf.h @@ -0,0 +1,150 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsprintf.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wcsprintf routines +* --------------------------------- +* Routines in this suite allow diagnostic output from celprt(), linprt(), +* prjprt(), spcprt(), tabprt(), wcsprt(), and wcserr_prt() to be redirected to +* a file or captured in a string buffer. Those routines all use wcsprintf() +* for output. Likewise wcsfprintf() is used by wcsbth() and wcspih(). Both +* functions may be used by application programmers to have other output go to +* the same place. +* +* +* wcsprintf() - Print function used by WCSLIB diagnostic routines +* --------------------------------------------------------------- +* wcsprintf() is used by celprt(), linprt(), prjprt(), spcprt(), tabprt(), +* wcsprt(), and wcserr_prt() for diagnostic output which by default goes to +* stdout. However, it may be redirected to a file or string buffer via +* wcsprintf_set(). +* +* Given: +* format char* Format string, passed to one of the printf(3) family +* of stdio library functions. +* +* ... mixed Argument list matching format, as per printf(3). +* +* Function return value: +* int Number of bytes written. +* +* +* wcsfprintf() - Print function used by WCSLIB diagnostic routines +* ---------------------------------------------------------------- +* wcsfprintf() is used by wcsbth(), and wcspih() for diagnostic output which +* they send to stderr. However, it may be redirected to a file or string +* buffer via wcsprintf_set(). +* +* Given: +* stream FILE* The output stream if not overridden by a call to +* wcsprintf_set(). +* +* format char* Format string, passed to one of the printf(3) family +* of stdio library functions. +* +* ... mixed Argument list matching format, as per printf(3). +* +* Function return value: +* int Number of bytes written. +* +* +* wcsprintf_set() - Set output disposition for wcsprintf() and wcsfprintf() +* ------------------------------------------------------------------------- +* wcsprintf_set() sets the output disposition for wcsprintf() which is used by +* the celprt(), linprt(), prjprt(), spcprt(), tabprt(), wcsprt(), and +* wcserr_prt() routines, and for wcsfprintf() which is used by wcsbth() and +* wcspih(). +* +* Given: +* wcsout FILE* Pointer to an output stream that has been opened for +* writing, e.g. by the fopen() stdio library function, +* or one of the predefined stdio output streams - stdout +* and stderr. If zero (NULL), output is written to an +* internally-allocated string buffer, the address of +* which may be obtained by wcsprintf_buf(). +* +* Function return value: +* int Status return value: +* 0: Success. +* +* +* wcsprintf_buf() - Get the address of the internal string buffer +* --------------------------------------------------------------- +* wcsprintf_buf() returns the address of the internal string buffer created +* when wcsprintf_set() is invoked with its FILE* argument set to zero. +* +* Function return value: +* const char * +* Address of the internal string buffer. The user may +* free this buffer by calling wcsprintf_set() with a +* valid FILE*, e.g. stdout. The free() stdlib library +* function must NOT be invoked on this const pointer. +* +* +* WCSPRINTF_PTR() macro - Print addresses in a consistent way +* ----------------------------------------------------------- +* WCSPRINTF_PTR() is a preprocessor macro used to print addresses in a +* consistent way. +* +* On some systems the "%p" format descriptor renders a NULL pointer as the +* string "0x0". On others, however, it produces "0" or even "(nil)". On +* some systems a non-zero address is prefixed with "0x", on others, not. +* +* The WCSPRINTF_PTR() macro ensures that a NULL pointer is always rendered as +* "0x0" and that non-zero addresses are prefixed with "0x" thus providing +* consistency, for example, for comparing the output of test programs. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSPRINTF +#define WCSLIB_WCSPRINTF + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define WCSPRINTF_PTR(str1, ptr, str2) \ + if (ptr) { \ + wcsprintf("%s%#" PRIxPTR "%s", (str1), (uintptr_t)(ptr), (str2)); \ + } else { \ + wcsprintf("%s0x0%s", (str1), (str2)); \ + } + +int wcsprintf_set(FILE *wcsout); +int wcsprintf(const char *format, ...); +int wcsfprintf(FILE *stream, const char *format, ...); +const char *wcsprintf_buf(void); + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_WCSPRINTF diff --git a/deps/wcslib/C/wcstrig.c b/deps/wcslib/C/wcstrig.c new file mode 100644 index 0000000..ae9d7d7 --- /dev/null +++ b/deps/wcslib/C/wcstrig.c @@ -0,0 +1,202 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcstrig.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include "wcsmath.h" +#include "wcstrig.h" + +double cosd(double angle) + +{ + int i; + + if (fmod(angle,90.0) == 0.0) { + i = abs((int)floor(angle/90.0 + 0.5))%4; + switch (i) { + case 0: + return 1.0; + case 1: + return 0.0; + case 2: + return -1.0; + case 3: + return 0.0; + } + } + + return cos(angle*D2R); +} + +//---------------------------------------------------------------------------- + +double sind(double angle) + +{ + int i; + + if (fmod(angle,90.0) == 0.0) { + i = abs((int)floor(angle/90.0 - 0.5))%4; + switch (i) { + case 0: + return 1.0; + case 1: + return 0.0; + case 2: + return -1.0; + case 3: + return 0.0; + } + } + + return sin(angle*D2R); +} + +//---------------------------------------------------------------------------- + +void sincosd(double angle, double *s, double *c) + +{ + int i; + + if (fmod(angle,90.0) == 0.0) { + i = abs((int)floor(angle/90.0 + 0.5))%4; + switch (i) { + case 0: + *s = 0.0; + *c = 1.0; + return; + case 1: + *s = (angle > 0.0) ? 1.0 : -1.0; + *c = 0.0; + return; + case 2: + *s = 0.0; + *c = -1.0; + return; + case 3: + *s = (angle > 0.0) ? -1.0 : 1.0; + *c = 0.0; + return; + } + } + +#ifdef HAVE_SINCOS + sincos(angle*D2R, s, c); +#else + *s = sin(angle*D2R); + *c = cos(angle*D2R); +#endif + + return; +} + +//---------------------------------------------------------------------------- + +double tand(double angle) + +{ + double resid; + + resid = fmod(angle,360.0); + if (resid == 0.0 || fabs(resid) == 180.0) { + return 0.0; + } else if (resid == 45.0 || resid == 225.0) { + return 1.0; + } else if (resid == -135.0 || resid == -315.0) { + return -1.0; + } + + return tan(angle*D2R); +} + +//---------------------------------------------------------------------------- + +double acosd(double v) + +{ + if (v >= 1.0) { + if (v-1.0 < WCSTRIG_TOL) return 0.0; + } else if (v == 0.0) { + return 90.0; + } else if (v <= -1.0) { + if (v+1.0 > -WCSTRIG_TOL) return 180.0; + } + + return acos(v)*R2D; +} + +//---------------------------------------------------------------------------- + +double asind(double v) + +{ + if (v <= -1.0) { + if (v+1.0 > -WCSTRIG_TOL) return -90.0; + } else if (v == 0.0) { + return 0.0; + } else if (v >= 1.0) { + if (v-1.0 < WCSTRIG_TOL) return 90.0; + } + + return asin(v)*R2D; +} + +//---------------------------------------------------------------------------- + +double atand(double v) + +{ + if (v == -1.0) { + return -45.0; + } else if (v == 0.0) { + return 0.0; + } else if (v == 1.0) { + return 45.0; + } + + return atan(v)*R2D; +} + +//---------------------------------------------------------------------------- + +double atan2d(double y, double x) + +{ + if (y == 0.0) { + if (x >= 0.0) { + return 0.0; + } else if (x < 0.0) { + return 180.0; + } + } else if (x == 0.0) { + if (y > 0.0) { + return 90.0; + } else if (y < 0.0) { + return -90.0; + } + } + + return atan2(y,x)*R2D; +} diff --git a/deps/wcslib/C/wcstrig.h b/deps/wcslib/C/wcstrig.h new file mode 100644 index 0000000..166cb8c --- /dev/null +++ b/deps/wcslib/C/wcstrig.h @@ -0,0 +1,214 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcstrig.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wcstrig routines +* ------------------------------- +* When dealing with celestial coordinate systems and spherical projections +* (some moreso than others) it is often desirable to use an angular measure +* that provides an exact representation of the latitude of the north or south +* pole. The WCSLIB routines use the following trigonometric functions that +* take or return angles in degrees: +* +* - cosd() +* - sind() +* - tand() +* - acosd() +* - asind() +* - atand() +* - atan2d() +* - sincosd() +* +* These "trigd" routines are expected to handle angles that are a multiple of +* 90 degrees returning an exact result. Some C implementations provide these +* as part of a system library and in such cases it may (or may not!) be +* preferable to use them. WCSLIB provides wrappers on the standard trig +* functions based on radian measure, adding tests for multiples of 90 degrees. +* +* However, wcstrig.h also provides the choice of using preprocessor macro +* implementations of the trigd functions that don't test for multiples of +* 90 degrees (compile with -DWCSTRIG_MACRO). These are typically 20% faster +* but may lead to problems near the poles. +* +* +* cosd() - Cosine of an angle in degrees +* -------------------------------------- +* cosd() returns the cosine of an angle given in degrees. +* +* Given: +* angle double [deg]. +* +* Function return value: +* double Cosine of the angle. +* +* +* sind() - Sine of an angle in degrees +* ------------------------------------ +* sind() returns the sine of an angle given in degrees. +* +* Given: +* angle double [deg]. +* +* Function return value: +* double Sine of the angle. +* +* +* sincosd() - Sine and cosine of an angle in degrees +* -------------------------------------------------- +* sincosd() returns the sine and cosine of an angle given in degrees. +* +* Given: +* angle double [deg]. +* +* Returned: +* sin *double Sine of the angle. +* +* cos *double Cosine of the angle. +* +* Function return value: +* void +* +* +* tand() - Tangent of an angle in degrees +* --------------------------------------- +* tand() returns the tangent of an angle given in degrees. +* +* Given: +* angle double [deg]. +* +* Function return value: +* double Tangent of the angle. +* +* +* acosd() - Inverse cosine, returning angle in degrees +* ---------------------------------------------------- +* acosd() returns the inverse cosine in degrees. +* +* Given: +* x double in the range [-1,1]. +* +* Function return value: +* double Inverse cosine of x [deg]. +* +* +* asind() - Inverse sine, returning angle in degrees +* -------------------------------------------------- +* asind() returns the inverse sine in degrees. +* +* Given: +* y double in the range [-1,1]. +* +* Function return value: +* double Inverse sine of y [deg]. +* +* +* atand() - Inverse tangent, returning angle in degrees +* ----------------------------------------------------- +* atand() returns the inverse tangent in degrees. +* +* Given: +* s double +* +* Function return value: +* double Inverse tangent of s [deg]. +* +* +* atan2d() - Polar angle of (x,y), in degrees +* ------------------------------------------- +* atan2d() returns the polar angle, beta, in degrees, of polar coordinates +* (rho,beta) corresponding to Cartesian coordinates (x,y). It is equivalent +* to the arg(x,y) function of WCS Paper II, though with transposed arguments. +* +* Given: +* y double Cartesian y-coordinate. +* +* x double Cartesian x-coordinate. +* +* Function return value: +* double Polar angle of (x,y) [deg]. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSTRIG +#define WCSLIB_WCSTRIG + +#include + +#include "wcsconfig.h" + +#ifdef HAVE_SINCOS + void sincos(double angle, double *sin, double *cos); +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifdef WCSTRIG_MACRO + +// Macro implementation of the trigd functions. +#include "wcsmath.h" + +#define cosd(X) cos((X)*D2R) +#define sind(X) sin((X)*D2R) +#define tand(X) tan((X)*D2R) +#define acosd(X) acos(X)*R2D +#define asind(X) asin(X)*R2D +#define atand(X) atan(X)*R2D +#define atan2d(Y,X) atan2(Y,X)*R2D +#ifdef HAVE_SINCOS + #define sincosd(X,S,C) sincos((X)*D2R,(S),(C)) +#else + #define sincosd(X,S,C) *(S) = sin((X)*D2R); *(C) = cos((X)*D2R); +#endif + +#else + +// Use WCSLIB wrappers or native trigd functions. + +double cosd(double angle); +double sind(double angle); +void sincosd(double angle, double *sin, double *cos); +double tand(double angle); +double acosd(double x); +double asind(double y); +double atand(double s); +double atan2d(double y, double x); + +// Domain tolerance for asin() and acos() functions. +#define WCSTRIG_TOL 1e-10 + +#endif // WCSTRIG_MACRO + + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_WCSTRIG diff --git a/deps/wcslib/C/wcsulex.l b/deps/wcslib/C/wcsulex.l new file mode 100644 index 0000000..6a36bb4 --- /dev/null +++ b/deps/wcslib/C/wcsulex.l @@ -0,0 +1,1055 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsulex.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* wcsulex.l is a Flex description file containing the definition of a +* recursive, multi-buffered lexical scanner and parser for FITS units +* specifications. +* +* It requires Flex v2.5.4 or later. +* +* Refer to wcsunits.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ + +/* Options. */ +%option full +%option never-interactive +%option noinput +%option noyywrap +%option outfile="wcsulex.c" +%option prefix="wcsulex" +%option reentrant +%option extra-type="struct wcsulex_extra *" + +/* Exponents. */ +INTEGER [+-]?[1-9][0-9]* +FRAC {INTEGER}"/"[1-9][0-9]* +FLOAT [+-]?([0-9]+\.?[0-9]*|\.[0-9]+) + +/* Metric prefixes. */ +SUB3 [munpfazy] +SUBPREFIX [dc]|{SUB3} +SUP3 [kMGTPEZY] +SUPPREFIX da|h|{SUP3} +PREFIX {SUBPREFIX}|{SUPPREFIX} + +/* Basic and derived SI units. */ +BASIC m|s|g|rad|sr|K|A|mol|cd +DERIVED Hz|J|W|V|N|Pa|C|[Oo]hm|S|F|Wb|T|H|lm|lx +SI_UNIT {BASIC}|{DERIVED} + +/* Additional recognized units: all metric prefixes allowed. */ +ADD_ALL eV|Jy|R|G|barn + +/* Additional recognized units: only super-metric prefixes allowed. */ +ADD_SUP a|yr|pc|bit|[bB]yte + +/* Additional recognized units: only sub-metric prefixes allowed. */ +ADD_SUB mag + +/* Additional recognized units for which NO metric prefixes are allowed. */ +GENERAL deg|arcmin|arcsec|mas|turn|min|h|d|cy|erg|Ry|u|D +ASTRO [Aa]ngstrom|AU|lyr|beam|solRad|solMass|solLum|Sun +DEVICE adu|bin|chan|count|ct|photon|ph|pixel|pix|voxel +ADD_NONE {GENERAL}|{ASTRO}|{DEVICE} + +/* All additional recognized units. */ +ADD_UNIT {ADD_ALL}|{ADD_SUP}|{ADD_SUB}|{ADD_NONE} + +/* Exclusive start states. */ +%x PAREN PREFIX UNITS EXPON FLUSH + +%{ +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsmath.h" +#include "wcsunits.h" +#include "wcsutil.h" + +// User data associated with yyscanner. +struct wcsulex_extra { + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsulexe_scanner(const char unitstr[], int *func, \ + double *scale, double units[WCSUNITS_NTYPE], struct wcserr **err, \ + yyscan_t yyscanner) + +// Dummy definition to circumvent compiler warnings. +#define YY_INPUT(inbuff, count, bufsize) { count = YY_NULL; } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; + +%} + +%% + static const char *function = "wcsulexe_scanner"; + + void add(double *factor, double types[], double *expon, double *scale, + double units[]); + + // Initialise returned values. + *func = 0; + *scale = 1.0; + + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + units[i] = 0.0; + } + + if (err) *err = 0x0; + + double types[WCSUNITS_NTYPE]; + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + types[i] = 0.0; + } + double expon = 1.0; + double factor = 1.0; + + int bracket = 0; + int operator = 0; + int paren = 0; + int status = 0; + + // Avert a flex-induced memory leak. + if (YY_CURRENT_BUFFER && YY_CURRENT_BUFFER->yy_input_file == stdin) { + yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); + } + + yy_scan_string(unitstr, yyscanner); + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units parser error parsing '%s'", unitstr); + } + + BEGIN(INITIAL); + + #ifdef DEBUG + fprintf(stderr, "\n%s ->\n", unitstr); + #endif + +^" "+ { + // Pretend initial whitespace doesn't exist. + yy_set_bol(1); + } + +^"[" { + if (bracket++) { + BEGIN(FLUSH); + } else { + yy_set_bol(1); + } + } + +^10[0-9] { + status = wcserr_set(WCSERR_SET(UNITSERR_BAD_NUM_MULTIPLIER), + "Invalid exponent in '%s'", unitstr); + BEGIN(FLUSH); + } + +^10 { + factor = 10.0; + BEGIN(EXPON); + } + +^log" "*"(" { + *func = 1; + unput('('); + BEGIN(PAREN); + } + +^ln" "*"(" { + *func = 2; + unput('('); + BEGIN(PAREN); + } + +^exp" "*"(" { + *func = 3; + unput('('); + BEGIN(PAREN); + } + +^[*.] { + // Leading binary multiply. + status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), + "Dangling binary operator in '%s'", unitstr); + BEGIN(FLUSH); + } + +" "+ // Discard whitespace in INITIAL context. + +sqrt" "*"(" { + expon /= 2.0; + unput('('); + BEGIN(PAREN); + } + +"(" { + // Gather terms in parentheses. + yyless(0); + BEGIN(PAREN); + } + +[*.] { + if (operator++) { + BEGIN(FLUSH); + } + } + +^1"/" | +"/" { + if (operator++) { + BEGIN(FLUSH); + } else { + expon *= -1.0; + } + } + +{SI_UNIT}|{ADD_UNIT} { + operator = 0; + yyless(0); + BEGIN(UNITS); + } + +{PREFIX}({SI_UNIT}|{ADD_ALL}) | +{SUPPREFIX}{ADD_SUP} | +{SUBPREFIX}{ADD_SUB} { + operator = 0; + yyless(0); + BEGIN(PREFIX); + } + +"]" { + bracket = !bracket; + BEGIN(FLUSH); + } + +. { + status = wcserr_set(WCSERR_SET(UNITSERR_BAD_INITIAL_SYMBOL), + "Invalid symbol in INITIAL context in '%s'", unitstr); + BEGIN(FLUSH); + } + +"(" { + paren++; + operator = 0; + yymore(); + } + +")" { + paren--; + if (paren) { + // Not balanced yet. + yymore(); + + } else { + // Balanced; strip off the outer parentheses and recurse. + yytext[yyleng-1] = '\0'; + + int func_r; + double factor_r; + status = wcsulexe(yytext+1, &func_r, &factor_r, types, err); + + YY_BUFFER_STATE buf = YY_CURRENT_BUFFER; + yy_switch_to_buffer(buf, yyscanner); + + if (func_r) { + status = wcserr_set(WCSERR_SET(UNITSERR_FUNCTION_CONTEXT), + "Function in invalid context in '%s'", unitstr); + } + + if (status) { + BEGIN(FLUSH); + } else { + factor *= factor_r; + BEGIN(EXPON); + } + } + } + +[^()]+ { + yymore(); + } + +d { + factor = 1e-1; + BEGIN(UNITS); + } + +c { + factor = 1e-2; + BEGIN(UNITS); + } + +m { + factor = 1e-3; + BEGIN(UNITS); + } + +u { + factor = 1e-6; + BEGIN(UNITS); + } + +n { + factor = 1e-9; + BEGIN(UNITS); + } + +p { + factor = 1e-12; + BEGIN(UNITS); + } + +f { + factor = 1e-15; + BEGIN(UNITS); + } + +a { + factor = 1e-18; + BEGIN(UNITS); + } + +z { + factor = 1e-21; + BEGIN(UNITS); + } + +y { + factor = 1e-24; + BEGIN(UNITS); + } + +da { + factor = 1e+1; + BEGIN(UNITS); + } + +h { + factor = 1e+2; + BEGIN(UNITS); + } + +k { + factor = 1e+3; + BEGIN(UNITS); + } + +M { + factor = 1e+6; + BEGIN(UNITS); + } + +G { + factor = 1e+9; + BEGIN(UNITS); + } + +T { + factor = 1e+12; + BEGIN(UNITS); + } + +P { + factor = 1e+15; + BEGIN(UNITS); + } + +E { + factor = 1e+18; + BEGIN(UNITS); + } + +Z { + factor = 1e+21; + BEGIN(UNITS); + } + +Y { + factor = 1e+24; + BEGIN(UNITS); + } + +. { + // Internal parser error. + status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units parser error parsing '%s'", unitstr); + BEGIN(FLUSH); + } + +A { + // Ampere. + types[WCSUNITS_CHARGE] += 1.0; + types[WCSUNITS_TIME] -= 1.0; + BEGIN(EXPON); + } + +a|yr { + // Julian year (annum). + factor *= 31557600.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + +adu { + // Analogue-to-digital converter units. + types[WCSUNITS_COUNT] += 1.0; + BEGIN(EXPON); + } + +[Aa]ngstrom { + // Angstrom. + factor *= 1e-10; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + +arcmin { + // Minute of arc. + factor /= 60.0; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + +arcsec { + // Second of arc. + factor /= 3600.0; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + +AU { + // Astronomical unit. + factor *= 1.49598e+11; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + +barn { + // Barn. + factor *= 1e-28; + types[WCSUNITS_LENGTH] += 2.0; + BEGIN(EXPON); + } + +beam { + // Beam, as in Jy/beam. + types[WCSUNITS_BEAM] += 1.0; + BEGIN(EXPON); + } + +bin { + // Bin (e.g. histogram). + types[WCSUNITS_BIN] += 1.0; + BEGIN(EXPON); + } + +bit { + // Bit. + types[WCSUNITS_BIT] += 1.0; + BEGIN(EXPON); + } + +[bB]yte { + // Byte. + factor *= 8.0; + types[WCSUNITS_BIT] += 1.0; + BEGIN(EXPON); + } + +C { + // Coulomb. + types[WCSUNITS_CHARGE] += 1.0; + BEGIN(EXPON); + } + +cd { + // Candela. + types[WCSUNITS_LUMINTEN] += 1.0; + BEGIN(EXPON); + } + +chan { + // Channel. + types[WCSUNITS_BIN] += 1.0; + BEGIN(EXPON); + } + +count|ct { + // Count. + types[WCSUNITS_COUNT] += 1.0; + BEGIN(EXPON); + } + +cy { + // Julian century. + factor *= 3155760000.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + +D { + // Debye. + factor *= 1e-29 / 3.0; + types[WCSUNITS_CHARGE] += 1.0; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + +d { + // Day. + factor *= 86400.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + +deg { + // Degree. + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + +erg { + // Erg. + factor *= 1e-7; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + +eV { + // Electron volt. + factor *= 1.6021765e-19; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + +F { + // Farad. + types[WCSUNITS_MASS] -= 1.0; + types[WCSUNITS_LENGTH] -= 2.0; + types[WCSUNITS_TIME] += 3.0; + types[WCSUNITS_CHARGE] += 2.0; + BEGIN(EXPON); + } + +G { + // Gauss. + factor *= 1e-4; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + +g { + // Gram. + factor *= 1e-3; + types[WCSUNITS_MASS] += 1.0; + BEGIN(EXPON); + } + +H { + // Henry. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] += 2.0; + types[WCSUNITS_CHARGE] -= 2.0; + BEGIN(EXPON); + } + +h { + // Hour. + factor *= 3600.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + +Hz { + // Hertz. + types[WCSUNITS_TIME] -= 1.0; + BEGIN(EXPON); + } + +J { + // Joule. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + +Jy { + // Jansky. + factor *= 1e-26; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + +K { + // Kelvin. + types[WCSUNITS_TEMPERATURE] += 1.0; + BEGIN(EXPON); + } + +lm { + // Lumen. + types[WCSUNITS_LUMINTEN] += 1.0; + types[WCSUNITS_SOLID_ANGLE] += 1.0; + BEGIN(EXPON); + } + +lx { + // Lux. + types[WCSUNITS_LUMINTEN] += 1.0; + types[WCSUNITS_SOLID_ANGLE] += 1.0; + types[WCSUNITS_LENGTH] -= 2.0; + BEGIN(EXPON); + } + +lyr { + // Light year. + factor *= 2.99792458e8 * 31557600.0; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + +m { + // Metre. + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + +mag { + // Stellar magnitude. + types[WCSUNITS_MAGNITUDE] += 1.0; + BEGIN(EXPON); + } + +mas { + // Milli-arcsec. + factor /= 3600e+3; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + +min { + // Minute. + factor *= 60.0; + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + +mol { + // Mole. + types[WCSUNITS_MOLE] += 1.0; + BEGIN(EXPON); + } + +N { + // Newton. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 1.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + +[Oo]hm { + // Ohm. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 1.0; + types[WCSUNITS_CHARGE] -= 2.0; + BEGIN(EXPON); + } + +Pa { + // Pascal. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] -= 1.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + +pc { + // Parsec. + factor *= 3.0857e16; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + +photon|ph { + // Photon. + types[WCSUNITS_COUNT] += 1.0; + BEGIN(EXPON); + } + +pixel|pix { + // Pixel. + types[WCSUNITS_PIXEL] += 1.0; + BEGIN(EXPON); + } + +R { + // Rayleigh. + factor *= 1e10 / (4.0 * PI); + types[WCSUNITS_LENGTH] -= 2.0; + types[WCSUNITS_TIME] -= 1.0; + types[WCSUNITS_SOLID_ANGLE] -= 1.0; + BEGIN(EXPON); + } + +rad { + // Radian. + factor *= 180.0 / PI; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + +Ry { + // Rydberg. + factor *= 13.605692 * 1.6021765e-19; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 2.0; + BEGIN(EXPON); + } + +S { + // Siemen. + types[WCSUNITS_MASS] -= 1.0; + types[WCSUNITS_LENGTH] -= 2.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] += 2.0; + BEGIN(EXPON); + } + +s { + // Second. + types[WCSUNITS_TIME] += 1.0; + BEGIN(EXPON); + } + +solLum { + // Solar luminosity. + factor *= 3.8268e26; + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 3.0; + BEGIN(EXPON); + } + +solMass { + // Solar mass. + factor *= 1.9891e30; + types[WCSUNITS_MASS] += 1.0; + BEGIN(EXPON); + } + +solRad { + // Solar radius. + factor *= 6.9599e8; + types[WCSUNITS_LENGTH] += 1.0; + BEGIN(EXPON); + } + +sr { + // Steradian. + types[WCSUNITS_SOLID_ANGLE] += 1.0; + BEGIN(EXPON); + } + +Sun { + // Sun (with respect to). + types[WCSUNITS_SOLRATIO] += 1.0; + BEGIN(EXPON); + } + +T { + // Tesla. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + +turn { + // Turn. + factor *= 360.0; + types[WCSUNITS_PLANE_ANGLE] += 1.0; + BEGIN(EXPON); + } + +u { + // Unified atomic mass unit. + factor *= 1.6605387e-27; + types[WCSUNITS_MASS] += 1.0; + BEGIN(EXPON); + } + +V { + // Volt. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 1.0; + types[WCSUNITS_TIME] -= 2.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + +voxel { + // Voxel. + types[WCSUNITS_VOXEL] += 1.0; + BEGIN(EXPON); + } + +W { + // Watt. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] -= 3.0; + BEGIN(EXPON); + } + +Wb { + // Weber. + types[WCSUNITS_MASS] += 1.0; + types[WCSUNITS_LENGTH] += 2.0; + types[WCSUNITS_TIME] += 1.0; + types[WCSUNITS_CHARGE] -= 1.0; + BEGIN(EXPON); + } + +. { + // Internal parser error. + status = wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units parser error parsing '%s'", unitstr); + BEGIN(FLUSH); + } + +" "*("**"|^) { + // Exponentiation. + if (operator++) { + BEGIN(FLUSH); + } + } + +" "*{INTEGER} { + int i; + sscanf(yytext, " %d", &i); + expon *= (double)i; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + +" "*"("" "*{INTEGER}" "*")" { + int i; + sscanf(yytext, " (%d)", &i); + expon *= (double)i; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + +" "*"("" "*{FRAC}" "*")" { + int i, j; + sscanf(yytext, " (%d/%d)", &i, &j); + expon *= (double)i / (double)j; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + +" "*"("" "*{FLOAT}" "*")" { + char ctmp[72]; + sscanf(yytext, " (%s)", ctmp); + double dexp; + wcsutil_str2double(ctmp, &dexp); + expon *= dexp; + add(&factor, types, &expon, scale, units); + operator = 0; + BEGIN(INITIAL); + } + +" "*[.*]" "* { + // Multiply. + if (operator++) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + BEGIN(INITIAL); + } + } + +" "*"(" { + // Multiply. + if (operator) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + unput('('); + BEGIN(INITIAL); + } + } + +" "+ { + // Multiply. + if (operator) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + BEGIN(INITIAL); + } + } + +" "*"/"" "* { + // Divide. + if (operator++) { + BEGIN(FLUSH); + } else { + add(&factor, types, &expon, scale, units); + expon = -1.0; + BEGIN(INITIAL); + } + } + +" "*"]" { + add(&factor, types, &expon, scale, units); + bracket = !bracket; + BEGIN(FLUSH); + } + +. { + status = wcserr_set(WCSERR_SET(UNITSERR_BAD_EXPON_SYMBOL), + "Invalid symbol in EXPON context in '%s'", unitstr); + BEGIN(FLUSH); + } + +.* { + // Discard any remaining input. + } + +<> { + // End-of-string. + if (YY_START == EXPON) { + add(&factor, types, &expon, scale, units); + } + + if (bracket) { + status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_BRACKET), + "Unbalanced bracket in '%s'", unitstr); + } else if (paren) { + status = wcserr_set(WCSERR_SET(UNITSERR_UNBAL_PAREN), + "Unbalanced parenthesis in '%s'", unitstr); + } else if (operator == 1) { + status = wcserr_set(WCSERR_SET(UNITSERR_DANGLING_BINOP), + "Dangling binary operator in '%s'", unitstr); + } else if (operator) { + status = wcserr_set(WCSERR_SET(UNITSERR_CONSEC_BINOPS), + "Consecutive binary operators in '%s'", unitstr); + #ifdef DEBUG + } else { + fprintf(stderr, "EOS\n"); + #endif + } + + if (status) { + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + units[i] = 0.0; + *scale = 0.0; + } + } + + return status; + } + +%% + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsulexe( + const char unitstr[], + int *func, + double *scale, + double units[WCSUNITS_NTYPE], + struct wcserr **err) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsulex_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsulexe_scanner(unitstr, func, scale, units, err, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + + +/*---------------------------------------------------------------------------- +* Accumulate a term in a units specification and reset work variables. +*---------------------------------------------------------------------------*/ + +void add( + double *factor, + double types[], + double *expon, + double *scale, + double units[]) + +{ + *scale *= pow(*factor, *expon); + + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + units[i] += *expon * types[i]; + types[i] = 0.0; + } + + *expon = 1.0; + *factor = 1.0; + + return; +} diff --git a/deps/wcslib/C/wcsunits.c b/deps/wcslib/C/wcsunits.c new file mode 100644 index 0000000..35d01fc --- /dev/null +++ b/deps/wcslib/C/wcsunits.c @@ -0,0 +1,229 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsunits.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include + +#include "wcsunits.h" + +// Map status return value to message. +const char *wcsunits_errmsg[] = { + "Success", + "Invalid numeric multiplier", + "Dangling binary operator", + "Invalid symbol in INITIAL context", + "Function in invalid context", + "Invalid symbol in EXPON context", + "Unbalanced bracket", + "Unbalanced parenthesis", + "Consecutive binary operators", + "Internal parser error", + "Non-conformant unit specifications", + "Non-conformant functions", + "Potentially unsafe translation"}; + + +// Unit types. +const char *wcsunits_types[] = { + "plane angle", + "solid angle", + "charge", + "mole", + "temperature", + "luminous intensity", + "mass", + "length", + "time", + "beam", + "bin", + "bit", + "count", + "stellar magnitude", + "pixel", + "solar ratio", + "voxel"}; + +const char *wcsunits_units[] = { + "degree", + "steradian", + "Coulomb", + "mole", + "Kelvin", + "candela", + "kilogram", + "metre", + "second", + "", "", "", "", "", "", "", ""}; + +const char *wcsunits_funcs[] = { + "none", + "log", + "ln", + "exp"}; + +//---------------------------------------------------------------------------- + +int wcsunits( + const char have[], + const char want[], + double *scale, + double *offset, + double *power) + +{ + return wcsunitse(have, want, scale, offset, power, 0x0); +} + +//---------------------------------------------------------------------------- + +int wcsunitse( + const char have[], + const char want[], + double *scale, + double *offset, + double *power, + struct wcserr **err) + +{ + static const char *function = "wcsunitse"; + + int status; + + // Compiler balm for premature return on error. + *scale = 0.0; + *offset = 0.0; + *power = 1.0; + + int func1; + double scale1, units1[WCSUNITS_NTYPE]; + if ((status = wcsulexe(have, &func1, &scale1, units1, err))) { + return status; + } + + int func2; + double scale2, units2[WCSUNITS_NTYPE]; + if ((status = wcsulexe(want, &func2, &scale2, units2, err))) { + return status; + } + + // Check conformance. + for (int i = 0; i < WCSUNITS_NTYPE; i++) { + if (units1[i] != units2[i]) { + return wcserr_set(WCSERR_SET(UNITSERR_BAD_UNIT_SPEC), + "Mismatched units type '%s': have '%s', want '%s'", + wcsunits_types[i], have, want); + } + } + + switch (func1) { + case 0: + // No function. + if (func2) { + return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), + "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", + have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); + } + + *scale = scale1 / scale2; + break; + + case 1: + // log(). + if (func2 == 1) { + // log(). + *scale = 1.0; + *offset = log10(scale1 / scale2); + + } else if (func2 == 2) { + // ln(). + *scale = log(10.0); + *offset = log(scale1 / scale2); + + } else { + return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), + "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", + have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); + } + + break; + + case 2: + // ln(). + if (func2 == 1) { + // log(). + *scale = 1.0 / log(10.0); + *offset = log(scale1 / scale2); + + } else if (func2 == 2) { + // ln(). + *scale = 1.0; + *offset = log(scale1 / scale2); + + } else { + return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), + "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", + have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); + } + + break; + + case 3: + // exp(). + if (func2 != 3) { + return wcserr_set(WCSERR_SET(UNITSERR_BAD_FUNCS), + "Mismatched unit functions: have '%s' (%s), want '%s' (%s)", + have, wcsunits_funcs[func1], want, wcsunits_funcs[func2]); + } + + *scale = 1.0; + *power = scale1 / scale2; + break; + + default: + // Internal parser error. + return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units parser error"); + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsutrn(int ctrl, char unitstr[]) + +{ + return wcsutrne(ctrl, unitstr, 0x0); +} + +//---------------------------------------------------------------------------- + +int wcsulex( + const char unitstr[], + int *func, + double *scale, + double units[WCSUNITS_NTYPE]) + +{ + return wcsulexe(unitstr, func, scale, units, 0x0); +} diff --git a/deps/wcslib/C/wcsunits.h b/deps/wcslib/C/wcsunits.h new file mode 100644 index 0000000..4f6d688 --- /dev/null +++ b/deps/wcslib/C/wcsunits.h @@ -0,0 +1,408 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsunits.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wcsunits routines +* -------------------------------- +* Routines in this suite deal with units specifications and conversions, as +* described in +* += "Representations of world coordinates in FITS", += Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I) +* +* The Flexible Image Transport System (FITS), a data format widely used in +* astronomy for data interchange and archive, is described in +* += "Definition of the Flexible Image Transport System (FITS), version 3.0", += Pence, W.D., Chiappetti, L., Page, C.G., Shaw, R.A., & Stobie, E. 2010, += A&A, 524, A42 - http://dx.doi.org/10.1051/0004-6361/201015362 +* +* See also http://fits.gsfc.nasa.gov +* +* These routines perform basic units-related operations: +* +* - wcsunitse(): given two unit specifications, derive the conversion from +* one to the other. +* +* - wcsutrne(): translates certain commonly used but non-standard unit +* strings. It is intended to be called before wcsulexe() which only +* handles standard FITS units specifications. +* +* - wcsulexe(): parses a standard FITS units specification of arbitrary +* complexity, deriving the conversion to canonical units. +* +* +* wcsunitse() - FITS units specification conversion +* ------------------------------------------------- +* wcsunitse() derives the conversion from one system of units to another. +* +* A deprecated form of this function, wcsunits(), lacks the wcserr** +* parameter. +* +* Given: +* have const char [] +* FITS units specification to convert from (null- +* terminated), with or without surrounding square +* brackets (for inline specifications); text following +* the closing bracket is ignored. +* +* want const char [] +* FITS units specification to convert to (null- +* terminated), with or without surrounding square +* brackets (for inline specifications); text following +* the closing bracket is ignored. +* +* Returned: +* scale, +* offset, +* power double* Convert units using +* += pow(scale*value + offset, power); +* +* Normally offset is zero except for log() or ln() +* conversions, e.g. "log(MHz)" to "ln(Hz)". Likewise, +* power is normally unity except for exp() conversions, +* e.g. "exp(ms)" to "exp(/Hz)". Thus conversions +* ordinarily consist of +* += value *= scale; +* +* err struct wcserr ** +* If enabled, for function return values > 1, this +* struct will contain a detailed error message, see +* wcserr_enable(). May be NULL if an error message is +* not desired. Otherwise, the user is responsible for +* deleting the memory allocated for the wcserr struct. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1-9: Status return from wcsulexe(). +* 10: Non-conformant unit specifications. +* 11: Non-conformant functions. +* +* scale is zeroed on return if an error occurs. +* +* +* wcsutrne() - Translation of non-standard unit specifications +* ------------------------------------------------------------ +* wcsutrne() translates certain commonly used but non-standard unit strings, +* e.g. "DEG", "MHZ", "KELVIN", that are not recognized by wcsulexe(), refer to +* the notes below for a full list. Compounds are also recognized, e.g. +* "JY/BEAM" and "KM/SEC/SEC". Extraneous embedded blanks are removed. +* +* A deprecated form of this function, wcsutrn(), lacks the wcserr** parameter. +* +* Given: +* ctrl int Although "S" is commonly used to represent seconds, +* its translation to "s" is potentially unsafe since the +* standard recognizes "S" formally as Siemens, however +* rarely that may be used. The same applies to "H" for +* hours (Henry), and "D" for days (Debye). This +* bit-flag controls what to do in such cases: +* 1: Translate "S" to "s". +* 2: Translate "H" to "h". +* 4: Translate "D" to "d". +* Thus ctrl == 0 doesn't do any unsafe translations, +* whereas ctrl == 7 does all of them. +* +* Given and returned: +* unitstr char [] Null-terminated character array containing the units +* specification to be translated. +* +* Inline units specifications in a FITS header +* keycomment are also handled. If the first non-blank +* character in unitstr is '[' then the unit string is +* delimited by its matching ']'. Blanks preceding '[' +* will be stripped off, but text following the closing +* bracket will be preserved without modification. +* +* err struct wcserr ** +* If enabled, for function return values > 1, this +* struct will contain a detailed error message, see +* wcserr_enable(). May be NULL if an error message is +* not desired. Otherwise, the user is responsible for +* deleting the memory allocated for the wcserr struct. +* +* Function return value: +* int Status return value: +* -1: No change was made, other than stripping blanks +* (not an error). +* 0: Success. +* 9: Internal parser error. +* 12: Potentially unsafe translation, whether applied +* or not (see notes). +* +* Notes: +* 1: Translation of non-standard unit specifications: apart from leading and +* trailing blanks, a case-sensitive match is required for the aliases +* listed below, in particular the only recognized aliases with metric +* prefixes are "KM", "KHZ", "MHZ", and "GHZ". Potentially unsafe +* translations of "D", "H", and "S", shown in parentheses, are optional. +* += Unit Recognized aliases += ---- ---------------------------------------------------------- += Angstrom Angstroms angstrom angstroms += arcmin arcmins, ARCMIN, ARCMINS += arcsec arcsecs, ARCSEC, ARCSECS += beam BEAM += byte Byte += d day, days, (D), DAY, DAYS += deg degree, degrees, Deg, Degree, Degrees, DEG, DEGREE, += DEGREES += GHz GHZ += h hr, (H), HR += Hz hz, HZ += kHz KHZ += Jy JY += K kelvin, kelvins, Kelvin, Kelvins, KELVIN, KELVINS += km KM += m metre, meter, metres, meters, M, METRE, METER, METRES, += METERS += min MIN += MHz MHZ += Ohm ohm += Pa pascal, pascals, Pascal, Pascals, PASCAL, PASCALS += pixel pixels, PIXEL, PIXELS += rad radian, radians, RAD, RADIAN, RADIANS += s sec, second, seconds, (S), SEC, SECOND, SECONDS += V volt, volts, Volt, Volts, VOLT, VOLTS += yr year, years, YR, YEAR, YEARS +* +* The aliases "angstrom", "ohm", and "Byte" for (Angstrom, Ohm, and byte) +* are recognized by wcsulexe() itself as an unofficial extension of the +* standard, but they are converted to the standard form here. +* +* +* wcsulexe() - FITS units specification parser +* -------------------------------------------- +* wcsulexe() parses a standard FITS units specification of arbitrary +* complexity, deriving the scale factor required to convert to canonical +* units - basically SI with degrees and "dimensionless" additions such as +* byte, pixel and count. +* +* A deprecated form of this function, wcsulex(), lacks the wcserr** parameter. +* +* Given: +* unitstr const char [] +* Null-terminated character array containing the units +* specification, with or without surrounding square +* brackets (for inline specifications); text following +* the closing bracket is ignored. +* +* Returned: +* func int* Special function type, see note 4: +* 0: None +* 1: log() ...base 10 +* 2: ln() ...base e +* 3: exp() +* +* scale double* Scale factor for the unit specification; multiply a +* value expressed in the given units by this factor to +* convert it to canonical units. +* +* units double[WCSUNITS_NTYPE] +* A units specification is decomposed into powers of 16 +* fundamental unit types: angle, mass, length, time, +* count, pixel, etc. Preprocessor macro WCSUNITS_NTYPE +* is defined to dimension this vector, and others such +* WCSUNITS_PLANE_ANGLE, WCSUNITS_LENGTH, etc. to access +* its elements. +* +* Corresponding character strings, wcsunits_types[] and +* wcsunits_units[], are predefined to describe each +* quantity and its canonical units. +* +* err struct wcserr ** +* If enabled, for function return values > 1, this +* struct will contain a detailed error message, see +* wcserr_enable(). May be NULL if an error message is +* not desired. Otherwise, the user is responsible for +* deleting the memory allocated for the wcserr struct. +* +* Function return value: +* int Status return value: +* 0: Success. +* 1: Invalid numeric multiplier. +* 2: Dangling binary operator. +* 3: Invalid symbol in INITIAL context. +* 4: Function in invalid context. +* 5: Invalid symbol in EXPON context. +* 6: Unbalanced bracket. +* 7: Unbalanced parenthesis. +* 8: Consecutive binary operators. +* 9: Internal parser error. +* +* scale and units[] are zeroed on return if an error +* occurs. +* +* Notes: +* 1: wcsulexe() is permissive in accepting whitespace in all contexts in a +* units specification where it does not create ambiguity (e.g. not +* between a metric prefix and a basic unit string), including in strings +* like "log (m ** 2)" which is formally disallowed. +* +* 2: Supported extensions: +* - "angstrom" (OGIP usage) is allowed in addition to "Angstrom". +* - "ohm" (OGIP usage) is allowed in addition to "Ohm". +* - "Byte" (common usage) is allowed in addition to "byte". +* +* 3: Table 6 of WCS Paper I lists eleven units for which metric prefixes are +* allowed. However, in this implementation only prefixes greater than +* unity are allowed for "a" (annum), "yr" (year), "pc" (parsec), "bit", +* and "byte", and only prefixes less than unity are allowed for "mag" +* (stellar magnitude). +* +* Metric prefix "P" (peta) is specifically forbidden for "a" (annum) to +* avoid confusion with "Pa" (Pascal, not peta-annum). Note that metric +* prefixes are specifically disallowed for "h" (hour) and "d" (day) so +* that "ph" (photons) cannot be interpreted as pico-hours, nor "cd" +* (candela) as centi-days. +* +* 4: Function types log(), ln() and exp() may only occur at the start of the +* units specification. The scale and units[] returned for these refers +* to the string inside the function "argument", e.g. to "MHz" in log(MHz) +* for which a scale of 1e6 will be returned. +* +* +* Global variable: const char *wcsunits_errmsg[] - Status return messages +* ----------------------------------------------------------------------- +* Error messages to match the status value returned from each function. +* +* +* Global variable: const char *wcsunits_types[] - Names of physical quantities +* ---------------------------------------------------------------------------- +* Names for physical quantities to match the units vector returned by +* wcsulexe(): +* - 0: plane angle +* - 1: solid angle +* - 2: charge +* - 3: mole +* - 4: temperature +* - 5: luminous intensity +* - 6: mass +* - 7: length +* - 8: time +* - 9: beam +* - 10: bin +* - 11: bit +* - 12: count +* - 13: stellar magnitude +* - 14: pixel +* - 15: solar ratio +* - 16: voxel +* +* +* Global variable: const char *wcsunits_units[] - Names of units +* -------------------------------------------------------------- +* Names for the units (SI) to match the units vector returned by wcsulexe(): +* - 0: degree +* - 1: steradian +* - 2: Coulomb +* - 3: mole +* - 4: Kelvin +* - 5: candela +* - 6: kilogram +* - 7: metre +* - 8: second +* +* The remainder are dimensionless. +*===========================================================================*/ + +#ifndef WCSLIB_WCSUNITS +#define WCSLIB_WCSUNITS + +#include "wcserr.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +extern const char *wcsunits_errmsg[]; + +enum wcsunits_errmsg_enum { + UNITSERR_SUCCESS = 0, // Success. + UNITSERR_BAD_NUM_MULTIPLIER = 1, // Invalid numeric multiplier. + UNITSERR_DANGLING_BINOP = 2, // Dangling binary operator. + UNITSERR_BAD_INITIAL_SYMBOL = 3, // Invalid symbol in INITIAL context. + UNITSERR_FUNCTION_CONTEXT = 4, // Function in invalid context. + UNITSERR_BAD_EXPON_SYMBOL = 5, // Invalid symbol in EXPON context. + UNITSERR_UNBAL_BRACKET = 6, // Unbalanced bracket. + UNITSERR_UNBAL_PAREN = 7, // Unbalanced parenthesis. + UNITSERR_CONSEC_BINOPS = 8, // Consecutive binary operators. + UNITSERR_PARSER_ERROR = 9, // Internal parser error. + UNITSERR_BAD_UNIT_SPEC = 10, // Non-conformant unit specifications. + UNITSERR_BAD_FUNCS = 11, // Non-conformant functions. + UNITSERR_UNSAFE_TRANS = 12 // Potentially unsafe translation. +}; + +extern const char *wcsunits_types[]; +extern const char *wcsunits_units[]; + +#define WCSUNITS_PLANE_ANGLE 0 +#define WCSUNITS_SOLID_ANGLE 1 +#define WCSUNITS_CHARGE 2 +#define WCSUNITS_MOLE 3 +#define WCSUNITS_TEMPERATURE 4 +#define WCSUNITS_LUMINTEN 5 +#define WCSUNITS_MASS 6 +#define WCSUNITS_LENGTH 7 +#define WCSUNITS_TIME 8 +#define WCSUNITS_BEAM 9 +#define WCSUNITS_BIN 10 +#define WCSUNITS_BIT 11 +#define WCSUNITS_COUNT 12 +#define WCSUNITS_MAGNITUDE 13 +#define WCSUNITS_PIXEL 14 +#define WCSUNITS_SOLRATIO 15 +#define WCSUNITS_VOXEL 16 + +#define WCSUNITS_NTYPE 17 + + +int wcsunitse(const char have[], const char want[], double *scale, + double *offset, double *power, struct wcserr **err); + +int wcsutrne(int ctrl, char unitstr[], struct wcserr **err); + +int wcsulexe(const char unitstr[], int *func, double *scale, + double units[WCSUNITS_NTYPE], struct wcserr **err); + +// Deprecated. +int wcsunits(const char have[], const char want[], double *scale, + double *offset, double *power); +int wcsutrn(int ctrl, char unitstr[]); +int wcsulex(const char unitstr[], int *func, double *scale, + double units[WCSUNITS_NTYPE]); + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_WCSUNITS diff --git a/deps/wcslib/C/wcsutil.c b/deps/wcslib/C/wcsutil.c new file mode 100644 index 0000000..aea119b --- /dev/null +++ b/deps/wcslib/C/wcsutil.c @@ -0,0 +1,541 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsutil.c,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include +#include +#include +#include + +#include "wcsutil.h" +#include "wcsmath.h" + +//---------------------------------------------------------------------------- + +void wcsdealloc(void *ptr) + +{ + free(ptr); + + return; +} + +//---------------------------------------------------------------------------- + +void wcsutil_strcvt(int n, char c, int nt, const char src[], char dst[]) + +{ + if (n <= 0) return; + + if (c != '\0') c = ' '; + + if (src == 0x0) { + if (dst) { + memset(dst, c, n); + } + + } else { + // Copy to the first NULL character. + int j; + for (j = 0; j < n; j++) { + if ((dst[j] = src[j]) == '\0') { + break; + } + } + + if (j < n) { + // The given string is null-terminated. + memset(dst+j, c, n-j); + + } else { + // The given string is not null-terminated. + if (c == '\0') { + // Work backwards, looking for the first non-blank. + for (j = n - 1; j >= 0; j--) { + if (dst[j] != ' ') { + break; + } + } + + j++; + if (j == n && !nt) { + dst[n-1] = '\0'; + } else { + memset(dst+j, '\0', n-j); + } + } + } + } + + if (nt) dst[n] = '\0'; + + return; +} + +//---------------------------------------------------------------------------- + +void wcsutil_blank_fill(int n, char c[]) + +{ + if (n <= 0) return; + + if (c == 0x0) { + return; + } + + // Replace the terminating null and all successive characters. + for (int j = 0; j < n; j++) { + if (c[j] == '\0') { + memset(c+j, ' ', n-j); + break; + } + } + + return; +} + +//---------------------------------------------------------------------------- + +void wcsutil_null_fill(int n, char c[]) + +{ + if (n <= 0) return; + + if (c == 0x0) { + return; + } + + // Find the first NULL character. + int j; + for (j = 0; j < n; j++) { + if (c[j] == '\0') { + break; + } + } + + // Ensure null-termination. + if (j == n) { + j = n - 1; + c[j] = '\0'; + } + + // Work backwards, looking for the first non-blank. + j--; + for (; j > 0; j--) { + if (c[j] != ' ') { + break; + } + } + + if (++j < n) { + memset(c+j, '\0', n-j); + } + + return; +} + +//---------------------------------------------------------------------------- + +int wcsutil_all_ival(int nelem, int ival, const int iarr[]) + +{ + for (int i = 0; i < nelem; i++) { + if (iarr[i] != ival) return 0; + } + + return 1; +} + +//---------------------------------------------------------------------------- + +int wcsutil_all_dval(int nelem, double dval, const double darr[]) + +{ + for (int i = 0; i < nelem; i++) { + if (darr[i] != dval) return 0; + } + + return 1; +} + +//---------------------------------------------------------------------------- + +int wcsutil_all_sval(int nelem, const char *sval, const char (*sarr)[72]) + +{ + for (int i = 0; i < nelem; i++) { + if (strncmp(sarr[i], sval, 72)) return 0; + } + + return 1; +} + +//---------------------------------------------------------------------------- + +int wcsutil_allEq(int nvec, int nelem, const double *first) + +{ + if (nvec <= 0 || nelem <= 0) return 0; + + double v0 = *first; + for (const double *vp = first+nelem; vp < first + nvec*nelem; vp += nelem) { + if (*vp != v0) return 0; + } + + return 1; +} + +//---------------------------------------------------------------------------- + +int wcsutil_dblEq( + int nelem, + double tol, + const double *darr1, + const double *darr2) + +{ + if (nelem == 0) return 1; + if (nelem < 0) return 0; + + if (darr1 == 0x0 && darr2 == 0x0) return 1; + + if (tol == 0.0) { + // Handled separately for speed of execution. + for (int i = 0; i < nelem; i++) { + double dval1 = (darr1 ? darr1[i] : UNDEFINED); + double dval2 = (darr2 ? darr2[i] : UNDEFINED); + + // Undefined values must match exactly. + if (dval1 == UNDEFINED && dval2 != UNDEFINED) return 0; + if (dval1 != UNDEFINED && dval2 == UNDEFINED) return 0; + + if (dval1 != dval2) return 0; + } + + } else { + for (int i = 0; i < nelem; i++) { + double dval1 = (darr1 ? darr1[i] : UNDEFINED); + double dval2 = (darr2 ? darr2[i] : UNDEFINED); + + // Undefined values must match exactly. + if (dval1 == UNDEFINED && dval2 != UNDEFINED) return 0; + if (dval1 != UNDEFINED && dval2 == UNDEFINED) return 0; + + // Otherwise, compare within the specified tolerance. + if (fabs(dval1 - dval2) > 0.5*tol) return 0; + } + } + + return 1; +} + +//---------------------------------------------------------------------------- + +int wcsutil_intEq(int nelem, const int *iarr1, const int *iarr2) + +{ + if (nelem == 0) return 1; + if (nelem < 0) return 0; + + if (iarr1 == 0x0 && iarr2 == 0x0) return 1; + + for (int i = 0; i < nelem; i++) { + int ival1 = (iarr1 ? iarr1[i] : 0); + int ival2 = (iarr2 ? iarr2[i] : 0); + + if (ival1 != ival2) return 0; + } + + return 1; +} + +//---------------------------------------------------------------------------- + +int wcsutil_strEq(int nelem, char (*sarr1)[72], char (*sarr2)[72]) + +{ + if (nelem == 0) return 1; + if (nelem < 0) return 0; + + if (sarr1 == 0x0 && sarr2 == 0x0) return 1; + + for (int i = 0; i < nelem; i++) { + char *sval1 = (sarr1 ? sarr1[i] : ""); + char *sval2 = (sarr2 ? sarr2[i] : ""); + + if (strncmp(sval1, sval2, 72)) return 0; + } + + return 1; +} + +//---------------------------------------------------------------------------- + +void wcsutil_setAll(int nvec, int nelem, double *first) + +{ + if (nvec <= 0 || nelem <= 0) return; + + double v0 = *first; + for (double *vp = first+nelem; vp < first + nvec*nelem; vp += nelem) { + *vp = v0; + } +} + +//---------------------------------------------------------------------------- + +void wcsutil_setAli(int nvec, int nelem, int *first) + +{ + if (nvec <= 0 || nelem <= 0) return; + + int v0 = *first; + for (int *vp = first+nelem; vp < first + nvec*nelem; vp += nelem) { + *vp = v0; + } +} + +//---------------------------------------------------------------------------- + +void wcsutil_setBit(int nelem, const int *sel, int bits, int *array) + +{ + if (bits == 0 || nelem <= 0) return; + + if (sel == 0x0) { + // All elements selected. + for (int *arrp = array; arrp < array + nelem; arrp++) { + *arrp |= bits; + } + + } else { + // Some elements selected. + for (int *arrp = array; arrp < array + nelem; arrp++) { + if (*(sel++)) *arrp |= bits; + } + } +} + +//---------------------------------------------------------------------------- + +char *wcsutil_fptr2str(void (*fptr)(void), char hext[19]) + +{ + // Test for little-endian addresses. + int *(ip[2]), j[2], le = 1; + ip[0] = j; + ip[1] = j + 1; + unsigned char *p = (unsigned char *)(&fptr); + if ((unsigned char *)ip[0] < (unsigned char *)ip[1]) { + // Little-endian, reverse it. + p += sizeof(fptr) - 1; + le = -1; + } + + char *t = hext; + sprintf(t, "0x0"); + t += 2; + + int gotone = 0; + for (size_t i = 0; i < sizeof(fptr); i++) { + // Skip leading zeroes. + if (*p) gotone = 1; + + if (gotone) { + sprintf(t, "%02x", *p); + t += 2; + } + + p += le; + } + + return hext; +} + +//---------------------------------------------------------------------------- + +static void wcsutil_locale_to_dot(char *buf) + +{ + struct lconv *locale_data = localeconv(); + const char *decimal_point = locale_data->decimal_point; + + if (decimal_point[0] != '.' || decimal_point[1] != 0) { + size_t decimal_point_len = strlen(decimal_point); + char *inbuf = buf; + char *outbuf = buf; + + for ( ; *inbuf; inbuf++) { + if (strncmp(inbuf, decimal_point, decimal_point_len) == 0) { + *outbuf++ = '.'; + inbuf += decimal_point_len - 1; + } else { + *outbuf++ = *inbuf; + } + } + + *outbuf = '\0'; + } +} + + +void wcsutil_double2str(char *buf, const char *format, double value) + +{ + sprintf(buf, format, value); + wcsutil_locale_to_dot(buf); + + // Look for a decimal point or exponent. + char *bp = buf; + while (*bp) { + if (*bp != ' ') { + if (*bp == '.') return; + if (*bp == 'e') return; + if (*bp == 'E') return; + } + bp++; + } + + // Not found, add a fractional part. + bp = buf; + if (*bp == ' ') { + char *cp = buf + 1; + if (*cp == ' ') cp++; + + while (*cp) { + *bp = *cp; + bp++; + cp++; + } + + *bp = '.'; + bp++; + if (bp < cp) *bp = '0'; + } +} + +//---------------------------------------------------------------------------- + +static const char *wcsutil_dot_to_locale(const char *inbuf, char *outbuf) + +{ + struct lconv *locale_data = localeconv(); + const char *decimal_point = locale_data->decimal_point; + + if (decimal_point[0] != '.' || decimal_point[1] != 0) { + char *out = outbuf; + size_t decimal_point_len = strlen(decimal_point); + + for ( ; *inbuf; inbuf++) { + if (*inbuf == '.') { + memcpy(out, decimal_point, decimal_point_len); + out += decimal_point_len; + } else { + *out++ = *inbuf; + } + } + + *out = '\0'; + + return outbuf; + } else { + return inbuf; + } +} + + +int wcsutil_str2double(const char *buf, double *value) + +{ + char ctmp[72]; + return sscanf(wcsutil_dot_to_locale(buf, ctmp), "%lf", value) < 1; +} + + +int wcsutil_str2double2(const char *buf, double *value) + +{ + value[0] = 0.0; + value[1] = 0.0; + + // Get the integer part. + char ltmp[72]; + if (sscanf(wcsutil_dot_to_locale(buf, ltmp), "%lf", value) < 1) { + return 1; + } + value[0] = floor(value[0]); + + char ctmp[72]; + strcpy(ctmp, buf); + + // Look for a decimal point. + char *dptr = strchr(ctmp, '.'); + + // Look for an exponent. + char *eptr; + if ((eptr = strchr(ctmp, 'E')) == NULL) { + if ((eptr = strchr(ctmp, 'D')) == NULL) { + if ((eptr = strchr(ctmp, 'e')) == NULL) { + eptr = strchr(ctmp, 'd'); + } + } + } + + int exp = 0; + if (eptr) { + // Get the exponent. + if (sscanf(eptr+1, "%d", &exp) < 1) { + return 1; + } + + if (!dptr) { + dptr = eptr; + eptr++; + } + + if (dptr+exp <= ctmp) { + // There is only a fractional part. + return sscanf(wcsutil_dot_to_locale(buf, ctmp), "%lf", value+1) < 1; + } else if (eptr <= dptr+exp+1) { + // There is no fractional part. + return 0; + } + } + + // Get the fractional part. + if (dptr) { + char *cptr = ctmp; + while (cptr <= dptr+exp) { + if ('0' < *cptr && *cptr <= '9') *cptr = '0'; + cptr++; + } + + if (sscanf(wcsutil_dot_to_locale(ctmp, ltmp), "%lf", value+1) < 1) { + return 1; + } + } + + return 0; +} diff --git a/deps/wcslib/C/wcsutil.h b/deps/wcslib/C/wcsutil.h new file mode 100644 index 0000000..e371fc1 --- /dev/null +++ b/deps/wcslib/C/wcsutil.h @@ -0,0 +1,501 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsutil.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wcsutil routines +* ------------------------------- +* Simple utility functions. With the exception of wcsdealloc(), these +* functions are intended for internal use only by WCSLIB. +* +* The internal-use functions are documented here solely as an aid to +* understanding the code. They are not intended for external use - the API +* may change without notice! +* +* +* wcsdealloc() - free memory allocated by WCSLIB functions +* -------------------------------------------------------- +* wcsdealloc() invokes the free() system routine to free memory. +* Specifically, it is intended to free memory allocated (using calloc()) by +* certain WCSLIB functions (e.g. wcshdo(), wcsfixi(), fitshdr()), which it is +* the user's responsibility to deallocate. +* +* In certain situations, for example multithreading, it may be important that +* this be done within the WCSLIB sharable library's runtime environment. +* +* PLEASE NOTE: wcsdealloc() must not be used in place of the destructors for +* particular structs, such as wcsfree(), celfree(), etc. +* +* Given and returned: +* ptr void* Address of the allocated memory. +* +* Function return value: +* void +* +* +* wcsutil_strcvt() - Copy character string with padding +* ----------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_strcvt() copies one character string to another up to the specified +* maximum number of characters. +* +* If the given string is null-terminated, then the NULL character copied to +* the returned string, and all characters following it up to the specified +* maximum, are replaced with the specified substitute character, either blank +* or NULL. +* +* If the source string is not null-terminated and the substitute character is +* blank, then copy the maximum number of characters and do nothing further. +* However, if the substitute character is NULL, then the last character and +* all consecutive blank characters preceding it will be replaced with NULLs. +* +* Used by the Fortran wrapper functions in translating C strings into Fortran +* CHARACTER variables and vice versa. +* +* Given: +* n int Maximum number of characters to copy. +* +* c char Substitute character, either NULL or blank (anything +* other than NULL). +* +* nt int If true, then dst is of length n+1, with the last +* character always set to NULL. +* +* src char[] Character string to be copied. If null-terminated, +* then need not be of length n, otherwise it must be. +* +* Returned: +* dst char[] Destination character string, which must be long +* enough to hold n characters. Note that this string +* will not be null-terminated if the substitute +* character is blank. +* +* Function return value: +* void +* +* +* wcsutil_blank_fill() - Fill a character string with blanks +* ---------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_blank_fill() pads a character sub-string with blanks starting with +* the terminating NULL character (if any). +* +* Given: +* n int Length of the sub-string. +* +* Given and returned: +* c char[] The character sub-string, which will not be +* null-terminated on return. +* +* Function return value: +* void +* +* +* wcsutil_null_fill() - Fill a character string with NULLs +* -------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_null_fill() strips trailing blanks from a string (or sub-string) and +* propagates the terminating NULL character (if any) to the end of the string. +* +* If the string is not null-terminated, then the last character and all +* consecutive blank characters preceding it will be replaced with NULLs. +* +* Mainly used in the C library to strip trailing blanks from FITS keyvalues. +* Also used to make character strings intelligible in the GNU debugger, which +* prints the rubbish following the terminating NULL character, thereby +* obscuring the valid part of the string. +* +* Given: +* n int Number of characters. +* +* Given and returned: +* c char[] The character (sub-)string. +* +* Function return value: +* void +* +* +* wcsutil_all_ival() - Test if all elements an int array have a given value +* ------------------------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_all_ival() tests whether all elements of an array of type int all +* have the specified value. +* +* Given: +* nelem int The length of the array. +* +* ival int Value to be tested. +* +* iarr const int[] +* Pointer to the first element of the array. +* +* Function return value: +* int Status return value: +* 0: Not all equal. +* 1: All equal. +* +* +* wcsutil_all_dval() - Test if all elements a double array have a given value +* --------------------------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_all_dval() tests whether all elements of an array of type double all +* have the specified value. +* +* Given: +* nelem int The length of the array. +* +* dval int Value to be tested. +* +* darr const double[] +* Pointer to the first element of the array. +* +* Function return value: +* int Status return value: +* 0: Not all equal. +* 1: All equal. +* +* +* wcsutil_all_sval() - Test if all elements a string array have a given value +* --------------------------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_all_sval() tests whether the elements of an array of type +* char (*)[72] all have the specified value. +* +* Given: +* nelem int The length of the array. +* +* sval const char * +* String to be tested. +* +* sarr const char (*)[72] +* Pointer to the first element of the array. +* +* Function return value: +* int Status return value: +* 0: Not all equal. +* 1: All equal. +* +* +* wcsutil_allEq() - Test for equality of a particular vector element +* ------------------------------------------------------------------ +* INTERNAL USE ONLY. +* +* wcsutil_allEq() tests for equality of a particular element in a set of +* vectors. +* +* Given: +* nvec int The number of vectors. +* +* nelem int The length of each vector. +* +* first const double* +* Pointer to the first element to test in the array. +* The elements tested for equality are +* += *first == *(first + nelem) += == *(first + nelem*2) += : += == *(first + nelem*(nvec-1)); +* +* The array might be dimensioned as +* += double v[nvec][nelem]; +* +* Function return value: +* int Status return value: +* 0: Not all equal. +* 1: All equal. +* +* +* wcsutil_dblEq() - Test for equality of two arrays of type double +* ---------------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_dblEq() tests for equality of two double-precision arrays. +* +* Given: +* nelem int The number of elements in each array. +* +* tol double Tolerance for comparison of the floating-point values. +* For example, for tol == 1e-6, all floating-point +* values in the arrays must be equal to the first 6 +* decimal places. A value of 0 implies exact equality. +* +* arr1 const double* +* The first array. +* +* arr2 const double* +* The second array +* +* Function return value: +* int Status return value: +* 0: Not equal. +* 1: Equal. +* +* +* wcsutil_intEq() - Test for equality of two arrays of type int +* ------------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_intEq() tests for equality of two int arrays. +* +* Given: +* nelem int The number of elements in each array. +* +* arr1 const int* +* The first array. +* +* arr2 const int* +* The second array +* +* Function return value: +* int Status return value: +* 0: Not equal. +* 1: Equal. +* +* +* wcsutil_strEq() - Test for equality of two string arrays +* -------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_strEq() tests for equality of two string arrays. +* +* Given: +* nelem int The number of elements in each array. +* +* arr1 const char** +* The first array. +* +* arr2 const char** +* The second array +* +* Function return value: +* int Status return value: +* 0: Not equal. +* 1: Equal. +* +* +* wcsutil_setAll() - Set a particular vector element +* -------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_setAll() sets the value of a particular element in a set of vectors +* of type double. +* +* Given: +* nvec int The number of vectors. +* +* nelem int The length of each vector. +* +* Given and returned: +* first double* Pointer to the first element in the array, the value +* of which is used to set the others +* += *(first + nelem) = *first; += *(first + nelem*2) = *first; += : += *(first + nelem*(nvec-1)) = *first; +* +* The array might be dimensioned as +* += double v[nvec][nelem]; +* +* Function return value: +* void +* +* +* wcsutil_setAli() - Set a particular vector element +* -------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_setAli() sets the value of a particular element in a set of vectors +* of type int. +* +* Given: +* nvec int The number of vectors. +* +* nelem int The length of each vector. +* +* Given and returned: +* first int* Pointer to the first element in the array, the value +* of which is used to set the others +* += *(first + nelem) = *first; += *(first + nelem*2) = *first; += : += *(first + nelem*(nvec-1)) = *first; +* +* The array might be dimensioned as +* += int v[nvec][nelem]; +* +* Function return value: +* void +* +* +* wcsutil_setBit() - Set bits in selected elements of an array +* ------------------------------------------------------------ +* INTERNAL USE ONLY. +* +* wcsutil_setBit() sets bits in selected elements of an array. +* +* Given: +* nelem int Number of elements in the array. +* +* sel const int* +* Address of a selection array of length nelem. May +* be specified as the null pointer in which case all +* elements are selected. +* +* bits int Bit mask. +* +* Given and returned: +* array int* Address of the array of length nelem. +* +* Function return value: +* void +* +* +* wcsutil_fptr2str() - Translate pointer-to-function to string +* ------------------------------------------------------------ +* INTERNAL USE ONLY. +* +* wcsutil_fptr2str() translates a pointer-to-function to hexadecimal string +* representation for output. It is used by the various routines that print +* the contents of WCSLIB structs, noting that it is not strictly legal to +* type-pun a function pointer to void*. See +* http://stackoverflow.com/questions/2741683/how-to-format-a-function-pointer +* +* Given: +* fptr void(*)() Pointer to function. +* +* Returned: +* hext char[19] Null-terminated string. Should be at least 19 bytes +* in size to accomodate a 64-bit address (16 bytes in +* hex), plus the leading "0x" and trailing '\0'. +* +* Function return value: +* char * The address of hext. +* +* +* wcsutil_double2str() - Translate double to string ignoring the locale +* --------------------------------------------------------------------- +* INTERNAL USE ONLY. +* +* wcsutil_double2str() converts a double to a string, but unlike sprintf() it +* ignores the locale and always uses a '.' as the decimal separator. Also, +* unless it includes an exponent, the formatted value will always have a +* fractional part, ".0" being appended if necessary. +* +* Returned: +* buf char * The buffer to write the string into. +* +* Given: +* format char * The formatting directive, such as "%f". This +* may be any of the forms accepted by sprintf(), but +* should only include a formatting directive and +* nothing else. For "%g" and "%G" formats, unless it +* includes an exponent, the formatted value will always +* have a fractional part, ".0" being appended if +* necessary. +* +* value double The value to convert to a string. +* +* +* wcsutil_str2double() - Translate string to a double, ignoring the locale +* ------------------------------------------------------------------------ +* INTERNAL USE ONLY. +* +* wcsutil_str2double() converts a string to a double, but unlike sscanf() it +* ignores the locale and always expects a '.' as the decimal separator. +* +* Given: +* buf char * The string containing the value +* +* Returned: +* value double * The double value parsed from the string. +* +* +* wcsutil_str2double2() - Translate string to doubles, ignoring the locale +* ------------------------------------------------------------------------ +* INTERNAL USE ONLY. +* +* wcsutil_str2double2() converts a string to a pair of doubles containing the +* integer and fractional parts. Unlike sscanf() it ignores the locale and +* always expects a '.' as the decimal separator. +* +* Given: +* buf char * The string containing the value +* +* Returned: +* value double[2] The double value, split into integer and fractional +* parts, parsed from the string. +* +*===========================================================================*/ + +#ifndef WCSLIB_WCSUTIL +#define WCSLIB_WCSUTIL + +#ifdef __cplusplus +extern "C" { +#endif + +void wcsdealloc(void *ptr); + +void wcsutil_strcvt(int n, char c, int nt, const char src[], char dst[]); + +void wcsutil_blank_fill(int n, char c[]); +void wcsutil_null_fill (int n, char c[]); + +int wcsutil_all_ival(int nelem, int ival, const int iarr[]); +int wcsutil_all_dval(int nelem, double dval, const double darr[]); +int wcsutil_all_sval(int nelem, const char *sval, const char (*sarr)[72]); +int wcsutil_allEq (int nvec, int nelem, const double *first); + +int wcsutil_dblEq(int nelem, double tol, const double *arr1, + const double *arr2); +int wcsutil_intEq(int nelem, const int *arr1, const int *arr2); +int wcsutil_strEq(int nelem, char (*arr1)[72], char (*arr2)[72]); +void wcsutil_setAll(int nvec, int nelem, double *first); +void wcsutil_setAli(int nvec, int nelem, int *first); +void wcsutil_setBit(int nelem, const int *sel, int bits, int *array); +char *wcsutil_fptr2str(void (*fptr)(void), char hext[19]); +void wcsutil_double2str(char *buf, const char *format, double value); +int wcsutil_str2double(const char *buf, double *value); +int wcsutil_str2double2(const char *buf, double *value); + +#ifdef __cplusplus +} +#endif + +#endif // WCSLIB_WCSUTIL diff --git a/deps/wcslib/C/wcsutrn.c b/deps/wcslib/C/wcsutrn.c new file mode 100644 index 0000000..98f2a53 --- /dev/null +++ b/deps/wcslib/C/wcsutrn.c @@ -0,0 +1,6289 @@ +#line 1 "wcsutrn.c" + +#line 3 "wcsutrn.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +#ifdef yy_create_buffer +#define wcsutrn_create_buffer_ALREADY_DEFINED +#else +#define yy_create_buffer wcsutrn_create_buffer +#endif + +#ifdef yy_delete_buffer +#define wcsutrn_delete_buffer_ALREADY_DEFINED +#else +#define yy_delete_buffer wcsutrn_delete_buffer +#endif + +#ifdef yy_scan_buffer +#define wcsutrn_scan_buffer_ALREADY_DEFINED +#else +#define yy_scan_buffer wcsutrn_scan_buffer +#endif + +#ifdef yy_scan_string +#define wcsutrn_scan_string_ALREADY_DEFINED +#else +#define yy_scan_string wcsutrn_scan_string +#endif + +#ifdef yy_scan_bytes +#define wcsutrn_scan_bytes_ALREADY_DEFINED +#else +#define yy_scan_bytes wcsutrn_scan_bytes +#endif + +#ifdef yy_init_buffer +#define wcsutrn_init_buffer_ALREADY_DEFINED +#else +#define yy_init_buffer wcsutrn_init_buffer +#endif + +#ifdef yy_flush_buffer +#define wcsutrn_flush_buffer_ALREADY_DEFINED +#else +#define yy_flush_buffer wcsutrn_flush_buffer +#endif + +#ifdef yy_load_buffer_state +#define wcsutrn_load_buffer_state_ALREADY_DEFINED +#else +#define yy_load_buffer_state wcsutrn_load_buffer_state +#endif + +#ifdef yy_switch_to_buffer +#define wcsutrn_switch_to_buffer_ALREADY_DEFINED +#else +#define yy_switch_to_buffer wcsutrn_switch_to_buffer +#endif + +#ifdef yypush_buffer_state +#define wcsutrnpush_buffer_state_ALREADY_DEFINED +#else +#define yypush_buffer_state wcsutrnpush_buffer_state +#endif + +#ifdef yypop_buffer_state +#define wcsutrnpop_buffer_state_ALREADY_DEFINED +#else +#define yypop_buffer_state wcsutrnpop_buffer_state +#endif + +#ifdef yyensure_buffer_stack +#define wcsutrnensure_buffer_stack_ALREADY_DEFINED +#else +#define yyensure_buffer_stack wcsutrnensure_buffer_stack +#endif + +#ifdef yylex +#define wcsutrnlex_ALREADY_DEFINED +#else +#define yylex wcsutrnlex +#endif + +#ifdef yyrestart +#define wcsutrnrestart_ALREADY_DEFINED +#else +#define yyrestart wcsutrnrestart +#endif + +#ifdef yylex_init +#define wcsutrnlex_init_ALREADY_DEFINED +#else +#define yylex_init wcsutrnlex_init +#endif + +#ifdef yylex_init_extra +#define wcsutrnlex_init_extra_ALREADY_DEFINED +#else +#define yylex_init_extra wcsutrnlex_init_extra +#endif + +#ifdef yylex_destroy +#define wcsutrnlex_destroy_ALREADY_DEFINED +#else +#define yylex_destroy wcsutrnlex_destroy +#endif + +#ifdef yyget_debug +#define wcsutrnget_debug_ALREADY_DEFINED +#else +#define yyget_debug wcsutrnget_debug +#endif + +#ifdef yyset_debug +#define wcsutrnset_debug_ALREADY_DEFINED +#else +#define yyset_debug wcsutrnset_debug +#endif + +#ifdef yyget_extra +#define wcsutrnget_extra_ALREADY_DEFINED +#else +#define yyget_extra wcsutrnget_extra +#endif + +#ifdef yyset_extra +#define wcsutrnset_extra_ALREADY_DEFINED +#else +#define yyset_extra wcsutrnset_extra +#endif + +#ifdef yyget_in +#define wcsutrnget_in_ALREADY_DEFINED +#else +#define yyget_in wcsutrnget_in +#endif + +#ifdef yyset_in +#define wcsutrnset_in_ALREADY_DEFINED +#else +#define yyset_in wcsutrnset_in +#endif + +#ifdef yyget_out +#define wcsutrnget_out_ALREADY_DEFINED +#else +#define yyget_out wcsutrnget_out +#endif + +#ifdef yyset_out +#define wcsutrnset_out_ALREADY_DEFINED +#else +#define yyset_out wcsutrnset_out +#endif + +#ifdef yyget_leng +#define wcsutrnget_leng_ALREADY_DEFINED +#else +#define yyget_leng wcsutrnget_leng +#endif + +#ifdef yyget_text +#define wcsutrnget_text_ALREADY_DEFINED +#else +#define yyget_text wcsutrnget_text +#endif + +#ifdef yyget_lineno +#define wcsutrnget_lineno_ALREADY_DEFINED +#else +#define yyget_lineno wcsutrnget_lineno +#endif + +#ifdef yyset_lineno +#define wcsutrnset_lineno_ALREADY_DEFINED +#else +#define yyset_lineno wcsutrnset_lineno +#endif + +#ifdef yyget_column +#define wcsutrnget_column_ALREADY_DEFINED +#else +#define yyget_column wcsutrnget_column +#endif + +#ifdef yyset_column +#define wcsutrnset_column_ALREADY_DEFINED +#else +#define yyset_column wcsutrnset_column +#endif + +#ifdef yywrap +#define wcsutrnwrap_ALREADY_DEFINED +#else +#define yywrap wcsutrnwrap +#endif + +#ifdef yyalloc +#define wcsutrnalloc_ALREADY_DEFINED +#else +#define yyalloc wcsutrnalloc +#endif + +#ifdef yyrealloc +#define wcsutrnrealloc_ALREADY_DEFINED +#else +#define yyrealloc wcsutrnrealloc +#endif + +#ifdef yyfree +#define wcsutrnfree_ALREADY_DEFINED +#else +#define yyfree wcsutrnfree +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +typedef uint64_t flex_uint64_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin , yyscanner ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + yy_size_t yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void yyrestart ( FILE *input_file , yyscan_t yyscanner ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); +void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); +void yypop_buffer_state ( yyscan_t yyscanner ); + +static void yyensure_buffer_stack ( yyscan_t yyscanner ); +static void yy_load_buffer_state ( yyscan_t yyscanner ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, yy_size_t len , yyscan_t yyscanner ); + +void *yyalloc ( yy_size_t , yyscan_t yyscanner ); +void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); +void yyfree ( void * , yyscan_t yyscanner ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ + +#define wcsutrnwrap(yyscanner) (/*CONSTCOND*/1) +#define YY_SKIP_YYWRAP +typedef flex_uint8_t YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static const flex_int16_t yy_nxt[][128] = + { + { + 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, 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, 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, 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 + }, + + { + 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 9, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 10, 11, 12, 13, 12, + + 12, 14, 15, 12, 16, 17, 12, 18, 12, 19, + 20, 12, 21, 22, 12, 12, 23, 12, 12, 24, + 12, 8, 8, 8, 8, 8, 8, 25, 12, 12, + 26, 12, 12, 12, 27, 12, 12, 28, 12, 29, + 12, 12, 30, 12, 31, 32, 12, 12, 33, 12, + 12, 34, 12, 8, 8, 8, 8, 8 + }, + + { + 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 35, 8, 8, 8, 8, 8, 8, 8, + + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 10, 11, 12, 13, 12, + 12, 14, 15, 12, 16, 17, 12, 18, 12, 19, + 20, 12, 21, 22, 12, 12, 23, 12, 12, 24, + 12, 36, 8, 8, 8, 8, 8, 25, 12, 12, + 26, 12, 12, 12, 27, 12, 12, 28, 12, 29, + 12, 12, 30, 12, 31, 32, 12, 12, 33, 12, + 12, 34, 12, 8, 8, 8, 8, 8 + }, + + { + 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, + + 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 39, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 37, 37, 37, 37, 37, 37, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 37, 37, 37, 37, 37 + }, + + { + 7, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 38, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 39, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, + 37, 37, 37, 37, 37, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 37, 37, 37, 37, 37, 37, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 40, 37, 37, 37, 37, 37 + }, + + { + 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 38, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + 7, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 38, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + + 41, 41, 41, 41, 41, 41, 41, 41 + }, + + { + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7, -7, -7, + -7, -7, -7, -7, -7, -7, -7, -7 + }, + + { + 7, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8, -8, -8, + -8, -8, -8, -8, -8, -8, -8, -8 + }, + + { + 7, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + + -9, -9, 42, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9, -9, -9, + -9, -9, -9, -9, -9, -9, -9, -9 + + }, + + { + 7, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, -10, -10, -10, -10, -10, + -10, -10, -10, -10, -10, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 44, 43, 43, 43, 43, 43, 43, 43, + 43, -10, -10, -10, -10, -10, -10, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 45, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -10, -10, -10, -10, -10 + }, + + { + 7, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, -11, -11, -11, -11, -11, + -11, -11, -11, -11, -11, 43, 43, 43, 43, 46, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -11, -11, -11, -11, -11, -11, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 47, 43, -11, -11, -11, -11, -11 + }, + + { + 7, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, -12, -12, -12, -12, -12, + -12, -12, -12, -12, -12, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -12, -12, -12, -12, -12, -12, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -12, -12, -12, -12, -12 + }, + + { + 7, -13, -13, -13, -13, -13, -13, -13, -13, -13, + + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, -13, -13, -13, -13, -13, + -13, -13, -13, -13, -13, 48, 43, 43, 43, 49, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -13, -13, -13, -13, -13, -13, 43, 43, 43, + 43, 50, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -13, -13, -13, -13, -13 + }, + + { + 7, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, -14, -14, -14, -14, -14, + -14, -14, -14, -14, -14, 43, 43, 43, 43, 43, + 43, 43, 51, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -14, -14, -14, -14, -14, -14, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -14, -14, -14, -14, -14 + }, + + { + 7, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + + -15, -15, -15, -15, -15, -15, -15, -15, -15, -15, + -15, -15, -15, -15, -15, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 52, 43, 43, 43, 43, 43, 43, 43, + 53, -15, -15, -15, -15, -15, -15, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -15, -15, -15, -15, -15 + }, + + { + 7, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, -16, -16, -16, -16, -16, + -16, -16, -16, -16, -16, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 54, + 43, -16, -16, -16, -16, -16, -16, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -16, -16, -16, -16, -16 + }, + + { + 7, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, -17, -17, -17, -17, -17, + -17, -17, -17, -17, -17, 43, 43, 43, 43, 55, + 43, 43, 56, 43, 43, 43, 43, 57, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -17, -17, -17, -17, -17, -17, 43, 43, 43, + 43, 58, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -17, -17, -17, -17, -17 + }, + + { + 7, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + -18, -18, -18, -18, -18, -18, -18, -18, -18, -18, + + -18, -18, -18, -18, -18, 43, 43, 43, 43, 59, + 43, 43, 60, 61, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -18, -18, -18, -18, -18, -18, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -18, -18, -18, -18, -18 + }, + + { + 7, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, -19, -19, -19, -19, -19, + -19, -19, -19, -19, -19, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -19, -19, -19, -19, -19, -19, 43, 43, 43, + 43, 43, 43, 43, 62, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -19, -19, -19, -19, -19 + + }, + + { + 7, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -20, -20, + -20, -20, -20, -20, -20, 63, 43, 43, 43, 43, + 43, 43, 43, 64, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -20, -20, -20, -20, -20, -20, 65, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -20, -20, -20, -20, -20 + }, + + { + 7, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, -21, -21, -21, -21, -21, + -21, -21, -21, -21, -21, 66, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -21, -21, -21, -21, -21, -21, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -21, -21, -21, -21, -21 + }, + + { + 7, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, -22, -22, -22, -22, -22, + -22, -22, -22, -22, -22, 43, 43, 43, 43, 67, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -22, -22, -22, -22, -22, -22, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -22, -22, -22, -22, -22 + }, + + { + 7, -23, -23, -23, -23, -23, -23, -23, -23, -23, + + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, -23, -23, -23, -23, -23, + -23, -23, -23, -23, -23, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 68, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -23, -23, -23, -23, -23, -23, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 69, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -23, -23, -23, -23, -23 + }, + + { + 7, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, -24, -24, -24, -24, -24, + -24, -24, -24, -24, -24, 43, 43, 43, 43, 70, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 71, 43, 43, 43, 43, 43, 43, 43, + 43, -24, -24, -24, -24, -24, -24, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -24, -24, -24, -24, -24 + }, + + { + 7, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + + -25, -25, -25, -25, -25, -25, -25, -25, -25, -25, + -25, -25, -25, -25, -25, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -25, -25, -25, -25, -25, -25, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 72, 43, 43, 43, 73, 43, 43, 43, 43, 43, + 43, 43, 43, -25, -25, -25, -25, -25 + }, + + { + 7, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -26, -26, -26, -26, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -26, -26, -26, -26, -26, -26, 74, 43, 43, + 43, 75, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -26, -26, -26, -26, -26 + }, + + { + 7, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, -27, -27, -27, -27, -27, + -27, -27, -27, -27, -27, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -27, -27, -27, -27, -27, -27, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 52, 43, 43, 43, 43, 43, + 43, 43, 53, -27, -27, -27, -27, -27 + }, + + { + 7, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + -28, -28, -28, -28, -28, -28, -28, -28, -28, -28, + + -28, -28, -28, -28, -28, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -28, -28, -28, -28, -28, -28, 43, 43, 43, + 43, 58, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -28, -28, -28, -28, -28 + }, + + { + 7, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, -29, -29, -29, -29, -29, + -29, -29, -29, -29, -29, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -29, -29, -29, -29, -29, -29, 43, 43, 43, + 43, 76, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -29, -29, -29, -29, -29 + + }, + + { + 7, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, -30, -30, -30, -30, -30, + -30, -30, -30, -30, -30, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -30, -30, -30, -30, -30, -30, 65, 43, 43, + + 43, 43, 43, 43, 43, 77, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -30, -30, -30, -30, -30 + }, + + { + 7, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, -31, -31, -31, -31, -31, + -31, -31, -31, -31, -31, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -31, -31, -31, -31, -31, -31, 78, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -31, -31, -31, -31, -31 + }, + + { + 7, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, + -32, -32, -32, -32, -32, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -32, -32, -32, -32, -32, -32, 43, 43, 43, + 43, 79, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -32, -32, -32, -32, -32 + }, + + { + 7, -33, -33, -33, -33, -33, -33, -33, -33, -33, + + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, -33, -33, -33, -33, -33, + -33, -33, -33, -33, -33, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -33, -33, -33, -33, -33, -33, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 69, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -33, -33, -33, -33, -33 + }, + + { + 7, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, -34, -34, -34, -34, -34, + -34, -34, -34, -34, -34, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -34, -34, -34, -34, -34, -34, 43, 43, 43, + 43, 80, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -34, -34, -34, -34, -34 + }, + + { + 7, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, 81, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, 82, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35, -35, -35, + -35, -35, -35, -35, -35, -35, -35, -35 + }, + + { + 7, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + -36, -36, -36, -36, -36, -36, -36, -36, -36, -36, + + -36, -36, -36, -36, -36, -36, -36, -36 + }, + + { + 7, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, + -37, -37, -37, -37, -37, -37, -37, -37 + }, + + { + 7, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, + -38, -38, -38, -38, -38, -38, -38, -38 + }, + + { + 7, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + + 83, 83, 84, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 83, 83, 83, 83, 83 + + }, + + { + 7, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, -40, -40, -40, -40, -40, + -40, -40, -40, -40, -40, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, -40, -40, -40, -40, -40, -40, 86, 86, 86, + + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, -40, -40, -40, -40, -40 + }, + + { + 7, 87, 87, 87, 87, 87, 87, 87, 87, 87, + -41, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + }, + + { + 7, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, 42, -42, -42, -42, -42, -42, -42, -42, + + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42, -42, -42, + -42, -42, -42, -42, -42, -42, -42, -42 + }, + + { + 7, -43, -43, -43, -43, -43, -43, -43, -43, -43, + + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, -43, -43, -43, -43, -43, + -43, -43, -43, -43, -43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -43, -43, -43, -43, -43, -43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -43, -43, -43, -43, -43 + }, + + { + 7, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, -44, -44, -44, -44, -44, + -44, -44, -44, -44, -44, 43, 43, 88, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -44, -44, -44, -44, -44, -44, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -44, -44, -44, -44, -44 + }, + + { + 7, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + + -45, -45, -45, -45, -45, -45, -45, -45, -45, -45, + -45, -45, -45, -45, -45, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -45, -45, -45, -45, -45, -45, 43, 43, 43, + 43, 43, 43, 89, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -45, -45, -45, -45, -45 + }, + + { + 7, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, -46, -46, -46, -46, -46, + -46, -46, -46, -46, -46, 90, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -46, -46, -46, -46, -46, -46, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -46, -46, -46, -46, -46 + }, + + { + 7, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, -47, -47, -47, -47, -47, + -47, -47, -47, -47, -47, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -47, -47, -47, -47, -47, -47, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 91, 43, 43, 43, + 43, 43, 43, -47, -47, -47, -47, -47 + }, + + { + 7, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + -48, -48, -48, -48, -48, -48, -48, -48, -48, -48, + + -48, -48, -48, -48, -48, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 92, + 43, -48, -48, -48, -48, -48, -48, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -48, -48, -48, -48, -48 + }, + + { + 7, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, -49, -49, -49, -49, -49, + -49, -49, -49, -49, -49, 43, 43, 43, 43, 43, + 43, 93, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -49, -49, -49, -49, -49, -49, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -49, -49, -49, -49, -49 + + }, + + { + 7, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, -50, -50, -50, -50, -50, + -50, -50, -50, -50, -50, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -50, -50, -50, -50, -50, -50, 43, 43, 43, + + 43, 43, 43, 94, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -50, -50, -50, -50, -50 + }, + + { + 7, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, -51, -51, -51, -51, -51, + -51, -51, -51, -51, -51, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 95, -51, -51, -51, -51, -51, -51, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -51, -51, -51, -51, -51 + }, + + { + 7, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, -52, -52, -52, -52, -52, + -52, -52, -52, -52, -52, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -52, -52, -52, -52, -52, -52, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -52, -52, -52, -52, -52 + }, + + { + 7, -53, -53, -53, -53, -53, -53, -53, -53, -53, + + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, -53, -53, -53, -53, -53, + -53, -53, -53, -53, -53, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -53, -53, -53, -53, -53, -53, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -53, -53, -53, -53, -53 + }, + + { + 7, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, -54, -54, -54, -54, -54, + -54, -54, -54, -54, -54, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -54, -54, -54, -54, -54, -54, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -54, -54, -54, -54, -54 + }, + + { + 7, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + + -55, -55, -55, -55, -55, -55, -55, -55, -55, -55, + -55, -55, -55, -55, -55, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 96, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -55, -55, -55, -55, -55, -55, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -55, -55, -55, -55, -55 + }, + + { + 7, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, -56, -56, -56, -56, -56, + -56, -56, -56, -56, -56, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 97, -56, -56, -56, -56, -56, -56, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -56, -56, -56, -56, -56 + }, + + { + 7, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, -57, -57, -57, -57, -57, + -57, -57, -57, -57, -57, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -57, -57, -57, -57, -57, -57, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -57, -57, -57, -57, -57 + }, + + { + 7, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + -58, -58, -58, -58, -58, -58, -58, -58, -58, -58, + + -58, -58, -58, -58, -58, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -58, -58, -58, -58, -58, -58, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 98, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -58, -58, -58, -58, -58 + }, + + { + 7, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, -59, -59, -59, -59, -59, + -59, -59, -59, -59, -59, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 99, 43, 43, 43, 43, 43, + 43, -59, -59, -59, -59, -59, -59, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -59, -59, -59, -59, -59 + + }, + + { + 7, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, -60, -60, -60, -60, -60, + -60, -60, -60, -60, -60, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 100, -60, -60, -60, -60, -60, -60, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -60, -60, -60, -60, -60 + }, + + { + 7, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, -61, -61, -61, -61, -61, + -61, -61, -61, -61, -61, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 101, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -61, -61, -61, -61, -61, -61, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -61, -61, -61, -61, -61 + }, + + { + 7, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, -62, -62, -62, -62, -62, + -62, -62, -62, -62, -62, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -62, -62, -62, -62, -62, -62, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 102, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -62, -62, -62, -62, -62 + }, + + { + 7, -63, -63, -63, -63, -63, -63, -63, -63, -63, + + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -63, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 103, 43, 43, 43, 43, 43, 43, + 43, -63, -63, -63, -63, -63, -63, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -63, -63, -63, -63, -63 + }, + + { + 7, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, + -64, -64, -64, -64, -64, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 104, 43, + 43, -64, -64, -64, -64, -64, -64, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -64, -64, -64, -64, -64 + }, + + { + 7, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -65, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -65, -65, -65, -65, -65, -65, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 105, 43, 43, 43, 43, + 43, 43, 43, -65, -65, -65, -65, -65 + }, + + { + 7, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, -66, -66, -66, -66, -66, + -66, -66, -66, -66, -66, 43, 43, 43, 106, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -66, -66, -66, -66, -66, -66, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -66, -66, -66, -66, -66 + }, + + { + 7, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, -67, -67, -67, -67, -67, + -67, -67, -67, -67, -67, 43, 43, 107, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -67, -67, -67, -67, -67, -67, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -67, -67, -67, -67, -67 + }, + + { + 7, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + -68, -68, -68, -68, -68, -68, -68, -68, -68, -68, + + -68, -68, -68, -68, -68, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 108, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -68, -68, -68, -68, -68, -68, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -68, -68, -68, -68, -68 + }, + + { + 7, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, + -69, -69, -69, -69, -69, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -69, -69, -69, -69, -69, -69, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 109, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -69, -69, -69, -69, -69 + + }, + + { + 7, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, -70, -70, -70, -70, -70, + -70, -70, -70, -70, -70, 110, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -70, -70, -70, -70, -70, -70, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -70, -70, -70, -70, -70 + }, + + { + 7, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, -71, -71, -71, -71, -71, + -71, -71, -71, -71, -71, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -71, -71, -71, -71, -71, -71, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -71, -71, -71, -71, -71 + }, + + { + 7, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, -72, -72, -72, -72, -72, + -72, -72, -72, -72, -72, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -72, -72, -72, -72, -72, -72, 43, 43, 43, + 43, 43, 43, 111, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -72, -72, -72, -72, -72 + }, + + { + 7, -73, -73, -73, -73, -73, -73, -73, -73, -73, + + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, -73, -73, -73, -73, -73, + -73, -73, -73, -73, -73, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -73, -73, -73, -73, -73, -73, 43, 43, 112, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -73, -73, -73, -73, -73 + }, + + { + 7, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, -74, -74, -74, -74, -74, + -74, -74, -74, -74, -74, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -74, -74, -74, -74, -74, -74, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 113, 43, -74, -74, -74, -74, -74 + }, + + { + 7, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -75, -75, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -75, -75, -75, -75, -75, -75, 43, 43, 43, + 43, 43, 43, 114, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -75, -75, -75, -75, -75 + }, + + { + 7, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -76, -76, -76, -76, -76, -76, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 115, 43, 43, 43, + + 43, 43, 43, -76, -76, -76, -76, -76 + }, + + { + 7, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, -77, -77, -77, -77, -77, + -77, -77, -77, -77, -77, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -77, -77, -77, -77, -77, -77, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 116, 43, 43, -77, -77, -77, -77, -77 + }, + + { + 7, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + -78, -78, -78, -78, -78, -78, -78, -78, -78, -78, + + -78, -78, -78, -78, -78, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -78, -78, -78, -78, -78, -78, 43, 43, 43, + 117, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -78, -78, -78, -78, -78 + }, + + { + 7, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, -79, -79, -79, -79, -79, + -79, -79, -79, -79, -79, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -79, -79, -79, -79, -79, -79, 43, 43, 118, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -79, -79, -79, -79, -79 + + }, + + { + 7, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, -80, -80, -80, -80, -80, + -80, -80, -80, -80, -80, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -80, -80, -80, -80, -80, -80, 119, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -80, -80, -80, -80, -80 + }, + + { + 7, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, 81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, 82, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81, -81, -81, + -81, -81, -81, -81, -81, -81, -81, -81 + }, + + { + 7, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82, -82, -82, + -82, -82, -82, -82, -82, -82, -82, -82 + }, + + { + 7, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + + -83, -83, -83, -83, -83, -83, -83, -83, -83, -83, + -83, -83, -83, -83, -83, -83, -83, -83 + }, + + { + 7, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 84, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 83, 83, 83, 83, 83, 83, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 83, 83, 83, 83, 83 + }, + + { + 7, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85 + }, + + { + 7, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, -86, -86, -86, -86, -86, + -86, -86, -86, -86, -86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, -86, -86, -86, -86, -86, -86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + + 86, 86, 86, -86, -86, -86, -86, -86 + }, + + { + 7, 87, 87, 87, 87, 87, 87, 87, 87, 87, + -87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87 + }, + + { + 7, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + -88, -88, -88, -88, -88, -88, -88, -88, -88, -88, + + -88, -88, -88, -88, -88, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 120, 43, 43, + 43, 43, 43, 121, 43, 43, 43, 43, 43, 43, + 43, -88, -88, -88, -88, -88, -88, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -88, -88, -88, -88, -88 + }, + + { + 7, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, -89, -89, -89, -89, -89, + -89, -89, -89, -89, -89, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -89, -89, -89, -89, -89, -89, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 122, 43, 43, 43, 43, + 43, 43, 43, -89, -89, -89, -89, -89 + + }, + + { + 7, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, -90, -90, -90, -90, -90, + -90, -90, -90, -90, -90, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 123, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -90, -90, -90, -90, -90, -90, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -90, -90, -90, -90, -90 + }, + + { + 7, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -91, -91, -91, -91, -91, -91, 43, 43, 43, + 43, 124, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -91, -91, -91, -91, -91 + }, + + { + 7, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, -92, -92, -92, -92, -92, + -92, -92, -92, -92, -92, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 125, 43, 43, 43, 43, 43, 43, + 43, -92, -92, -92, -92, -92, -92, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -92, -92, -92, -92, -92 + }, + + { + 7, -93, -93, -93, -93, -93, -93, -93, -93, -93, + + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, + -93, -93, -93, -93, -93, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 126, 43, 43, 43, 43, 43, 43, 43, + 43, -93, -93, -93, -93, -93, -93, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -93, -93, -93, -93, -93 + }, + + { + 7, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, -94, -94, -94, -94, -94, + -94, -94, -94, -94, -94, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -94, -94, -94, -94, -94, -94, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 127, 43, 43, 43, 43, 43, + 43, 43, 43, -94, -94, -94, -94, -94 + }, + + { + 7, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + + -95, -95, -95, -95, -95, -95, -95, -95, -95, -95, + -95, -95, -95, -95, -95, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -95, -95, -95, -95, -95, -95, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -95, -95, -95, -95, -95 + }, + + { + 7, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, -96, -96, -96, -96, -96, + -96, -96, -96, -96, -96, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 128, 43, 43, 43, + 43, -96, -96, -96, -96, -96, -96, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -96, -96, -96, -96, -96 + }, + + { + 7, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, -97, -97, -97, -97, -97, + -97, -97, -97, -97, -97, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -97, -97, -97, -97, -97, -97, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -97, -97, -97, -97, -97 + }, + + { + 7, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + -98, -98, -98, -98, -98, -98, -98, -98, -98, -98, + + -98, -98, -98, -98, -98, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -98, -98, -98, -98, -98, -98, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 129, 43, + 43, 43, 43, -98, -98, -98, -98, -98 + }, + + { + 7, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, -99, -99, -99, -99, -99, + -99, -99, -99, -99, -99, 43, 43, 43, 43, 130, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 131, 43, 43, 43, 43, 43, 43, 43, + 43, -99, -99, -99, -99, -99, -99, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -99, -99, -99, -99, -99 + + }, + + { + 7, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, -100, -100, -100, -100, -100, + -100, -100, -100, -100, -100, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -100, -100, -100, -100, -100, -100, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -100, -100, -100, -100, -100 + }, + + { + 7, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, -101, -101, -101, -101, -101, + -101, -101, -101, -101, -101, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -101, -101, -101, -101, -101, -101, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -101, -101, -101, -101, -101 + }, + + { + 7, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -102, -102, -102, -102, -102, -102, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -102, -102, -102, -102, -102 + }, + + { + 7, -103, -103, -103, -103, -103, -103, -103, -103, -103, + + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, -103, -103, -103, -103, -103, + -103, -103, -103, -103, -103, 43, 43, 132, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -103, -103, -103, -103, -103, -103, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -103, -103, -103, -103, -103 + }, + + { + 7, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, -104, -104, -104, -104, -104, + -104, -104, -104, -104, -104, 43, 43, 43, 43, 133, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -104, -104, -104, -104, -104, -104, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -104, -104, -104, -104, -104 + }, + + { + 7, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + + -105, -105, -105, -105, -105, -105, -105, -105, -105, -105, + -105, -105, -105, -105, -105, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -105, -105, -105, -105, -105, -105, 43, 43, 134, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -105, -105, -105, -105, -105 + }, + + { + 7, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, -106, -106, -106, -106, -106, + -106, -106, -106, -106, -106, 43, 43, 43, 43, 43, + 43, 43, 43, 135, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -106, -106, -106, -106, -106, -106, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -106, -106, -106, -106, -106 + }, + + { + 7, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, -107, -107, -107, -107, -107, + -107, -107, -107, -107, -107, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 136, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -107, -107, -107, -107, -107, -107, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -107, -107, -107, -107, -107 + }, + + { + 7, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + -108, -108, -108, -108, -108, -108, -108, -108, -108, -108, + + -108, -108, -108, -108, -108, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 137, 43, 43, 43, 43, 43, + 43, -108, -108, -108, -108, -108, -108, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -108, -108, -108, -108, -108 + }, + + { + 7, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, -109, -109, -109, -109, -109, + -109, -109, -109, -109, -109, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -109, -109, -109, -109, -109, -109, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 138, 43, 43, 43, + 43, 43, 43, -109, -109, -109, -109, -109 + + }, + + { + 7, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, + -110, -110, -110, -110, -110, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 139, 43, 43, 43, 43, 43, 43, 43, + 43, -110, -110, -110, -110, -110, -110, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -110, -110, -110, -110, -110 + }, + + { + 7, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, -111, -111, -111, -111, -111, + -111, -111, -111, -111, -111, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -111, -111, -111, -111, -111, -111, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 140, 43, 43, 43, 43, + 43, 43, 43, -111, -111, -111, -111, -111 + }, + + { + 7, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, -112, -112, -112, -112, -112, + -112, -112, -112, -112, -112, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -112, -112, -112, -112, -112, -112, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 141, + 43, 43, 43, 43, 43, 142, 43, 43, 43, 43, + 43, 43, 43, -112, -112, -112, -112, -112 + }, + + { + 7, -113, -113, -113, -113, -113, -113, -113, -113, -113, + + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, -113, -113, -113, -113, -113, + -113, -113, -113, -113, -113, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -113, -113, -113, -113, -113, -113, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 143, 43, 43, 43, 43, + 43, 43, 43, -113, -113, -113, -113, -113 + }, + + { + 7, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, -114, -114, -114, -114, -114, + -114, -114, -114, -114, -114, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -114, -114, -114, -114, -114, -114, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 144, 43, 43, 43, 43, 43, + 43, 43, 43, -114, -114, -114, -114, -114 + }, + + { + 7, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + + -115, -115, -115, -115, -115, -115, -115, -115, -115, -115, + -115, -115, -115, -115, -115, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -115, -115, -115, -115, -115, -115, 43, 43, 43, + 43, 145, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 146, 43, 43, 43, 43, 43, + 43, 43, 43, -115, -115, -115, -115, -115 + }, + + { + 7, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, -116, -116, -116, -116, -116, + -116, -116, -116, -116, -116, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -116, -116, -116, -116, -116, -116, 43, 43, 43, + 43, 147, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -116, -116, -116, -116, -116 + }, + + { + 7, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, -117, -117, -117, -117, -117, + -117, -117, -117, -117, -117, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -117, -117, -117, -117, -117, -117, 43, 43, 43, + 43, 43, 43, 43, 43, 148, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -117, -117, -117, -117, -117 + }, + + { + 7, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + -118, -118, -118, -118, -118, -118, -118, -118, -118, -118, + + -118, -118, -118, -118, -118, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -118, -118, -118, -118, -118, -118, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 149, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -118, -118, -118, -118, -118 + }, + + { + 7, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, -119, -119, -119, -119, -119, + -119, -119, -119, -119, -119, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -119, -119, -119, -119, -119, -119, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 150, 43, 43, 43, 43, 43, + 43, 43, 43, -119, -119, -119, -119, -119 + + }, + + { + 7, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, -120, -120, -120, -120, -120, + -120, -120, -120, -120, -120, 43, 43, 43, 43, 43, + 43, 43, 43, 151, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -120, -120, -120, -120, -120, -120, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -120, -120, -120, -120, -120 + }, + + { + 7, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, -121, -121, -121, -121, -121, + -121, -121, -121, -121, -121, 43, 43, 43, 43, 152, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -121, -121, -121, -121, -121, -121, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -121, -121, -121, -121, -121 + }, + + { + 7, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, -122, -122, -122, -122, -122, + -122, -122, -122, -122, -122, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -122, -122, -122, -122, -122, -122, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 153, 43, 43, 43, + 43, 43, 43, -122, -122, -122, -122, -122 + }, + + { + 7, -123, -123, -123, -123, -123, -123, -123, -123, -123, + + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, -123, -123, -123, -123, -123, + -123, -123, -123, -123, -123, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -123, -123, -123, -123, -123, -123, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -123, -123, -123, -123, -123 + }, + + { + 7, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, -124, -124, -124, -124, -124, + -124, -124, -124, -124, -124, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -124, -124, -124, -124, -124, -124, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -124, -124, -124, -124, -124 + }, + + { + 7, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + + -125, -125, -125, -125, -125, -125, -125, -125, -125, -125, + -125, -125, -125, -125, -125, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -125, -125, -125, -125, -125, -125, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -125, -125, -125, -125, -125 + }, + + { + 7, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, -126, -126, -126, -126, -126, + -126, -126, -126, -126, -126, 43, 43, 43, 43, 154, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -126, -126, -126, -126, -126, -126, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -126, -126, -126, -126, -126 + }, + + { + 7, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -127, -127, -127, -127, -127, -127, 43, 43, 43, + 43, 155, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -127, -127, -127, -127, -127 + }, + + { + 7, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + -128, -128, -128, -128, -128, -128, -128, -128, -128, -128, + + -128, -128, -128, -128, -128, 43, 43, 43, 43, 43, + 43, 43, 43, 156, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -128, -128, -128, -128, -128, -128, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -128, -128, -128, -128, -128 + }, + + { + 7, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, -129, -129, -129, -129, -129, + -129, -129, -129, -129, -129, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -129, -129, -129, -129, -129, -129, 43, 43, 43, + 43, 43, 43, 43, 43, 157, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -129, -129, -129, -129, -129 + + }, + + { + 7, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, -130, -130, -130, -130, -130, + -130, -130, -130, -130, -130, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 158, 43, 43, 43, 43, 43, 43, 43, + 43, -130, -130, -130, -130, -130, -130, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -130, -130, -130, -130, -130 + }, + + { + 7, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, -131, 43, 43, 43, 43, 159, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -131, -131, -131, -131, -131, -131, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -131, -131, -131, -131, -131 + }, + + { + 7, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, -132, -132, -132, -132, -132, + -132, -132, -132, -132, -132, 160, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -132, -132, -132, -132, -132, -132, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -132, -132, -132, -132, -132 + }, + + { + 7, -133, -133, -133, -133, -133, -133, -133, -133, -133, + + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, -133, -133, -133, -133, -133, + -133, -133, -133, -133, -133, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 161, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -133, -133, -133, -133, -133, -133, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -133, -133, -133, -133, -133 + }, + + { + 7, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, -134, -134, -134, -134, -134, + -134, -134, -134, -134, -134, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -134, -134, -134, -134, -134, -134, 162, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -134, -134, -134, -134, -134 + }, + + { + 7, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + + -135, -135, -135, -135, -135, -135, -135, -135, -135, -135, + -135, -135, -135, -135, -135, 163, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -135, -135, -135, -135, -135, -135, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -135, -135, -135, -135, -135 + }, + + { + 7, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 164, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -136, -136, -136, -136, -136, -136, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -136, -136, -136, -136, -136 + }, + + { + 7, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, -137, -137, -137, -137, -137, + -137, -137, -137, -137, -137, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 165, 43, 43, 43, 43, 43, 43, + + 43, -137, -137, -137, -137, -137, -137, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -137, -137, -137, -137, -137 + }, + + { + 7, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, + + -138, -138, -138, -138, -138, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -138, -138, -138, -138, -138, -138, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 166, 43, 43, 43, 43, + 43, 43, 43, -138, -138, -138, -138, -138 + }, + + { + 7, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, -139, -139, -139, -139, -139, + -139, -139, -139, -139, -139, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 167, 43, 43, 43, 43, 43, 43, + 43, -139, -139, -139, -139, -139, -139, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -139, -139, -139, -139, -139 + + }, + + { + 7, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, -140, -140, -140, -140, -140, + -140, -140, -140, -140, -140, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -140, -140, -140, -140, -140, -140, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 168, 43, 43, 43, + 43, 43, 43, -140, -140, -140, -140, -140 + }, + + { + 7, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, -141, -141, -141, -141, -141, + -141, -141, -141, -141, -141, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -141, -141, -141, -141, -141, -141, 43, 43, 43, + 43, 43, 43, 43, 43, 169, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -141, -141, -141, -141, -141 + }, + + { + 7, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, -142, -142, -142, -142, -142, + -142, -142, -142, -142, -142, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -142, -142, -142, -142, -142, -142, 43, 43, 43, + 43, 170, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -142, -142, -142, -142, -142 + }, + + { + 7, -143, -143, -143, -143, -143, -143, -143, -143, -143, + + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, -143, -143, -143, -143, -143, + -143, -143, -143, -143, -143, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -143, -143, -143, -143, -143, -143, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -143, -143, -143, -143, -143 + }, + + { + 7, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, -144, -144, -144, -144, -144, + -144, -144, -144, -144, -144, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -144, -144, -144, -144, -144, -144, 43, 43, 43, + 43, 171, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -144, -144, -144, -144, -144 + }, + + { + 7, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + + -145, -145, -145, -145, -145, -145, -145, -145, -145, -145, + -145, -145, -145, -145, -145, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -145, -145, -145, -145, -145, -145, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 172, 43, 43, 43, 43, 43, + 43, 43, 43, -145, -145, -145, -145, -145 + }, + + { + 7, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, -146, -146, -146, -146, -146, + -146, -146, -146, -146, -146, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -146, -146, -146, -146, -146, -146, 43, 43, 43, + 43, 173, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -146, -146, -146, -146, -146 + }, + + { + 7, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, -147, -147, -147, -147, -147, + -147, -147, -147, -147, -147, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -147, -147, -147, -147, -147, -147, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 174, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -147, -147, -147, -147, -147 + }, + + { + 7, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + -148, -148, -148, -148, -148, -148, -148, -148, -148, -148, + + -148, -148, -148, -148, -148, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -148, -148, -148, -148, -148, -148, 175, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -148, -148, -148, -148, -148 + }, + + { + 7, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, -149, -149, -149, -149, -149, + -149, -149, -149, -149, -149, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -149, -149, -149, -149, -149, -149, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 176, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -149, -149, -149, -149, -149 + + }, + + { + 7, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, -150, -150, -150, -150, -150, + -150, -150, -150, -150, -150, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -150, -150, -150, -150, -150, -150, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 71, 43, 43, 43, 43, + 43, 43, 43, -150, -150, -150, -150, -150 + }, + + { + 7, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, -151, -151, -151, -151, -151, + -151, -151, -151, -151, -151, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 177, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -151, -151, -151, -151, -151, -151, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -151, -151, -151, -151, -151 + }, + + { + 7, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, -152, -152, -152, -152, -152, + -152, -152, -152, -152, -152, 43, 43, 178, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -152, -152, -152, -152, -152, -152, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -152, -152, -152, -152, -152 + }, + + { + 7, -153, -153, -153, -153, -153, -153, -153, -153, -153, + + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, -153, -153, -153, -153, -153, + -153, -153, -153, -153, -153, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -153, -153, -153, -153, -153, -153, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 179, 43, 43, 43, 43, 43, + 43, 43, 43, -153, -153, -153, -153, -153 + }, + + { + 7, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, -154, -154, -154, -154, -154, + -154, -154, -154, -154, -154, 43, 43, 43, 43, 180, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -154, -154, -154, -154, -154, -154, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -154, -154, -154, -154, -154 + }, + + { + 7, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + + -155, -155, -155, -155, -155, -155, -155, -155, -155, -155, + -155, -155, -155, -155, -155, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -155, -155, -155, -155, -155, -155, 43, 43, 43, + 43, 181, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -155, -155, -155, -155, -155 + }, + + { + 7, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, -156, -156, -156, -156, -156, + -156, -156, -156, -156, -156, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 182, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -156, -156, -156, -156, -156, -156, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -156, -156, -156, -156, -156 + }, + + { + 7, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, -157, -157, -157, -157, -157, + -157, -157, -157, -157, -157, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -157, -157, -157, -157, -157, -157, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 183, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -157, -157, -157, -157, -157 + }, + + { + 7, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + -158, -158, -158, -158, -158, -158, -158, -158, -158, -158, + + -158, -158, -158, -158, -158, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 184, 43, 43, 43, 43, 43, 43, + 43, -158, -158, -158, -158, -158, -158, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -158, -158, -158, -158, -158 + }, + + { + 7, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, -159, -159, -159, -159, -159, + -159, -159, -159, -159, -159, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 185, 43, 43, 43, 43, 43, 43, + 43, -159, -159, -159, -159, -159, -159, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -159, -159, -159, -159, -159 + + }, + + { + 7, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, -160, -160, -160, -160, -160, + -160, -160, -160, -160, -160, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 186, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -160, -160, -160, -160, -160, -160, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -160, -160, -160, -160, -160 + }, + + { + 7, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, -161, -161, -161, -161, -161, + -161, -161, -161, -161, -161, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 187, 43, 43, 43, 43, 43, 43, + 43, -161, -161, -161, -161, -161, -161, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -161, -161, -161, -161, -161 + }, + + { + 7, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, -162, -162, -162, -162, -162, + -162, -162, -162, -162, -162, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -162, -162, -162, -162, -162, -162, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 188, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -162, -162, -162, -162, -162 + }, + + { + 7, -163, -163, -163, -163, -163, -163, -163, -163, -163, + + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 189, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -163, -163, -163, -163, -163, -163, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -163, -163, -163, -163, -163 + }, + + { + 7, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, -164, -164, -164, -164, -164, + -164, -164, -164, -164, -164, 43, 43, 43, 190, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -164, -164, -164, -164, -164, -164, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -164, -164, -164, -164, -164 + }, + + { + 7, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + + -165, -165, -165, -165, -165, -165, -165, -165, -165, -165, + -165, -165, -165, -165, -165, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -165, -165, -165, -165, -165, -165, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -165, -165, -165, -165, -165 + }, + + { + 7, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, -166, -166, -166, -166, -166, + -166, -166, -166, -166, -166, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -166, -166, -166, -166, -166, -166, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -166, -166, -166, -166, -166 + }, + + { + 7, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, -167, -167, -167, -167, -167, + -167, -167, -167, -167, -167, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -167, -167, -167, -167, -167, -167, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -167, -167, -167, -167, -167 + }, + + { + 7, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + -168, -168, -168, -168, -168, -168, -168, -168, -168, -168, + + -168, -168, -168, -168, -168, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -168, -168, -168, -168, -168, -168, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 191, 43, 43, 43, 43, 43, + 43, 43, 43, -168, -168, -168, -168, -168 + }, + + { + 7, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -169, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -169, -169, -169, -169, -169, -169, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 192, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -169, -169, -169, -169, -169 + + }, + + { + 7, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, -170, -170, -170, -170, -170, + -170, -170, -170, -170, -170, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -170, -170, -170, -170, -170, -170, 43, 43, 193, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -170, -170, -170, -170, -170 + }, + + { + 7, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, -171, -171, -171, -171, -171, + -171, -171, -171, -171, -171, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -171, -171, -171, -171, -171, -171, 43, 43, 43, + 43, 194, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -171, -171, -171, -171, -171 + }, + + { + 7, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, -172, -172, -172, -172, -172, + -172, -172, -172, -172, -172, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -172, -172, -172, -172, -172, -172, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 195, 43, 43, 43, 43, + 43, 43, 43, -172, -172, -172, -172, -172 + }, + + { + 7, -173, -173, -173, -173, -173, -173, -173, -173, -173, + + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, -173, -173, -173, -173, -173, + -173, -173, -173, -173, -173, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -173, -173, -173, -173, -173, -173, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 196, 43, 43, 43, 43, + 43, 43, 43, -173, -173, -173, -173, -173 + }, + + { + 7, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, -174, -174, -174, -174, -174, + -174, -174, -174, -174, -174, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -174, -174, -174, -174, -174, -174, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 187, 43, 43, 43, 43, + 43, 43, 43, -174, -174, -174, -174, -174 + }, + + { + 7, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + + -175, -175, -175, -175, -175, -175, -175, -175, -175, -175, + -175, -175, -175, -175, -175, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -175, -175, -175, -175, -175, -175, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 197, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -175, -175, -175, -175, -175 + }, + + { + 7, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, -176, -176, -176, -176, -176, + -176, -176, -176, -176, -176, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -176, -176, -176, -176, -176, -176, 43, 43, 43, + 198, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -176, -176, -176, -176, -176 + }, + + { + 7, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, -177, -177, -177, -177, -177, + -177, -177, -177, -177, -177, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 199, 43, 43, 43, 43, 43, 43, + + 43, -177, -177, -177, -177, -177, -177, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -177, -177, -177, -177, -177 + }, + + { + 7, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + -178, -178, -178, -178, -178, -178, -178, -178, -178, -178, + + -178, -178, -178, -178, -178, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 200, 43, 43, 43, 43, 43, 43, + 43, -178, -178, -178, -178, -178, -178, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -178, -178, -178, -178, -178 + }, + + { + 7, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, -179, -179, -179, -179, -179, + -179, -179, -179, -179, -179, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -179, -179, -179, -179, -179, -179, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 201, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -179, -179, -179, -179, -179 + + }, + + { + 7, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, -180, -180, -180, -180, -180, + -180, -180, -180, -180, -180, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 202, 43, 43, 43, 43, 43, 43, + 43, -180, -180, -180, -180, -180, -180, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -180, -180, -180, -180, -180 + }, + + { + 7, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, -181, -181, -181, -181, -181, + -181, -181, -181, -181, -181, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -181, -181, -181, -181, -181, -181, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 203, 43, 43, 43, 43, + 43, 43, 43, -181, -181, -181, -181, -181 + }, + + { + 7, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, -182, -182, -182, -182, -182, + -182, -182, -182, -182, -182, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 204, 43, 43, 43, 43, 43, 43, + 43, -182, -182, -182, -182, -182, -182, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -182, -182, -182, -182, -182 + }, + + { + 7, -183, -183, -183, -183, -183, -183, -183, -183, -183, + + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, + -183, -183, -183, -183, -183, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -183, -183, -183, -183, -183, -183, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 205, 43, 43, 43, 43, + 43, 43, 43, -183, -183, -183, -183, -183 + }, + + { + 7, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, -184, -184, -184, -184, -184, + -184, -184, -184, -184, -184, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -184, -184, -184, -184, -184, -184, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -184, -184, -184, -184, -184 + }, + + { + 7, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + + -185, -185, -185, -185, -185, -185, -185, -185, -185, -185, + -185, -185, -185, -185, -185, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -185, -185, -185, -185, -185, -185, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -185, -185, -185, -185, -185 + }, + + { + 7, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, -186, -186, -186, -186, -186, + -186, -186, -186, -186, -186, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 206, 43, 43, 43, 43, 43, 43, + 43, -186, -186, -186, -186, -186, -186, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -186, -186, -186, -186, -186 + }, + + { + 7, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, -187, -187, -187, -187, -187, + -187, -187, -187, -187, -187, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -187, -187, -187, -187, -187, -187, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -187, -187, -187, -187, -187 + }, + + { + 7, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + -188, -188, -188, -188, -188, -188, -188, -188, -188, -188, + + -188, -188, -188, -188, -188, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -188, -188, -188, -188, -188, -188, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 207, 43, 43, 43, 43, + 43, 43, 43, -188, -188, -188, -188, -188 + }, + + { + 7, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -189, -189, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 208, 43, 43, 43, 43, 43, 43, + 43, -189, -189, -189, -189, -189, -189, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -189, -189, -189, -189, -189 + + }, + + { + 7, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, -190, -190, -190, -190, -190, + -190, -190, -190, -190, -190, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 209, 43, 43, 43, 43, 43, 43, + 43, -190, -190, -190, -190, -190, -190, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -190, -190, -190, -190, -190 + }, + + { + 7, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, -191, -191, -191, -191, -191, + -191, -191, -191, -191, -191, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -191, -191, -191, -191, -191, -191, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 210, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -191, -191, -191, -191, -191 + }, + + { + 7, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, -192, -192, -192, -192, -192, + -192, -192, -192, -192, -192, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -192, -192, -192, -192, -192, -192, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 199, 43, 43, 43, 43, + 43, 43, 43, -192, -192, -192, -192, -192 + }, + + { + 7, -193, -193, -193, -193, -193, -193, -193, -193, -193, + + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, -193, -193, -193, -193, -193, + -193, -193, -193, -193, -193, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -193, -193, -193, -193, -193, -193, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 200, 43, 43, 43, 43, + 43, 43, 43, -193, -193, -193, -193, -193 + }, + + { + 7, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, -194, -194, -194, -194, -194, + -194, -194, -194, -194, -194, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -194, -194, -194, -194, -194, -194, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 211, 43, 43, 43, 43, + 43, 43, 43, -194, -194, -194, -194, -194 + }, + + { + 7, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + + -195, -195, -195, -195, -195, -195, -195, -195, -195, -195, + -195, -195, -195, -195, -195, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -195, -195, -195, -195, -195, -195, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -195, -195, -195, -195, -195 + }, + + { + 7, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, -196, -196, -196, -196, -196, + -196, -196, -196, -196, -196, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -196, -196, -196, -196, -196, -196, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -196, -196, -196, -196, -196 + }, + + { + 7, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, -197, -197, -197, -197, -197, + -197, -197, -197, -197, -197, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -197, -197, -197, -197, -197, -197, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 212, 43, 43, 43, 43, + 43, 43, 43, -197, -197, -197, -197, -197 + }, + + { + 7, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + -198, -198, -198, -198, -198, -198, -198, -198, -198, -198, + + -198, -198, -198, -198, -198, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -198, -198, -198, -198, -198, -198, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 213, 43, 43, 43, 43, + 43, 43, 43, -198, -198, -198, -198, -198 + }, + + { + 7, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, -199, -199, -199, -199, -199, + -199, -199, -199, -199, -199, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -199, -199, -199, -199, -199, -199, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -199, -199, -199, -199, -199 + + }, + + { + 7, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, -200, -200, -200, -200, -200, + -200, -200, -200, -200, -200, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -200, -200, -200, -200, -200, -200, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -200, -200, -200, -200, -200 + }, + + { + 7, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, -201, -201, -201, -201, -201, + -201, -201, -201, -201, -201, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -201, -201, -201, -201, -201, -201, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 214, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -201, -201, -201, -201, -201 + }, + + { + 7, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, -202, -202, -202, -202, -202, + -202, -202, -202, -202, -202, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -202, -202, -202, -202, -202, -202, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -202, -202, -202, -202, -202 + }, + + { + 7, -203, -203, -203, -203, -203, -203, -203, -203, -203, + + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, -203, -203, -203, -203, -203, + -203, -203, -203, -203, -203, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -203, -203, -203, -203, -203, -203, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -203, -203, -203, -203, -203 + }, + + { + 7, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, -204, -204, -204, -204, -204, + -204, -204, -204, -204, -204, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -204, -204, -204, -204, -204, -204, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -204, -204, -204, -204, -204 + }, + + { + 7, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + + -205, -205, -205, -205, -205, -205, -205, -205, -205, -205, + -205, -205, -205, -205, -205, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -205, -205, -205, -205, -205, -205, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -205, -205, -205, -205, -205 + }, + + { + 7, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, -206, -206, -206, -206, -206, + -206, -206, -206, -206, -206, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -206, -206, -206, -206, -206, -206, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -206, -206, -206, -206, -206 + }, + + { + 7, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, -207, -207, -207, -207, -207, + -207, -207, -207, -207, -207, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, -207, -207, -207, -207, -207, -207, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -207, -207, -207, -207, -207 + }, + + { + 7, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + -208, -208, -208, -208, -208, -208, -208, -208, -208, -208, + + -208, -208, -208, -208, -208, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -208, -208, -208, -208, -208, -208, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -208, -208, -208, -208, -208 + }, + + { + 7, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -209, -209, -209, -209, -209, -209, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -209, -209, -209, -209, -209 + + }, + + { + 7, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, -210, -210, -210, -210, -210, + -210, -210, -210, -210, -210, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -210, -210, -210, -210, -210, -210, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 215, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -210, -210, -210, -210, -210 + }, + + { + 7, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + -211, -211, -211, -211, -211, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -211, -211, -211, -211, -211, -211, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -211, -211, -211, -211, -211 + }, + + { + 7, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, -212, -212, -212, -212, -212, + -212, -212, -212, -212, -212, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -212, -212, -212, -212, -212, -212, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -212, -212, -212, -212, -212 + }, + + { + 7, -213, -213, -213, -213, -213, -213, -213, -213, -213, + + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, -213, -213, -213, -213, -213, + -213, -213, -213, -213, -213, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -213, -213, -213, -213, -213, -213, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, -213, -213, -213, -213, -213 + }, + + { + 7, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, + -214, -214, -214, -214, -214, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -214, -214, -214, -214, -214, -214, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 216, 43, 43, 43, 43, + 43, 43, 43, -214, -214, -214, -214, -214 + }, + + { + 7, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + + -215, -215, -215, -215, -215, -215, -215, -215, -215, -215, + -215, -215, -215, -215, -215, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -215, -215, -215, -215, -215, -215, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 216, 43, 43, 43, 43, + 43, 43, 43, -215, -215, -215, -215, -215 + }, + + { + 7, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, -216, -216, -216, -216, -216, + -216, -216, -216, -216, -216, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, -216, -216, -216, -216, -216, -216, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, -216, -216, -216, -216, -216 + }, + + } ; + +static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); +static int yy_get_next_buffer ( yyscan_t yyscanner ); +static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (yy_size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; +#define YY_NUM_RULES 37 +#define YY_END_OF_BUFFER 38 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[217] = + { 0, + 0, 0, 0, 0, 36, 36, 38, 3, 2, 31, + 31, 31, 10, 31, 14, 31, 31, 20, 31, 31, + 31, 28, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 2, 1, 35, 37, 35, 32, + 36, 2, 31, 31, 31, 31, 31, 31, 31, 31, + 31, 13, 15, 17, 31, 31, 19, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, + 2, 1, 33, 33, 34, 32, 36, 31, 31, 31, + 31, 9, 11, 11, 12, 31, 16, 31, 31, 22, + + 21, 23, 31, 31, 31, 26, 27, 31, 31, 31, + 31, 31, 9, 31, 31, 31, 31, 27, 31, 31, + 31, 31, 7, 8, 9, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 29, 29, 30, 31, + 31, 31, 9, 31, 31, 31, 31, 31, 31, 30, + 31, 31, 31, 31, 31, 31, 31, 20, 20, 31, + 25, 31, 31, 31, 29, 29, 30, 31, 31, 31, + 31, 20, 20, 31, 31, 31, 5, 6, 31, 11, + 11, 18, 18, 20, 20, 24, 25, 24, 26, 27, + 31, 31, 31, 11, 20, 20, 26, 27, 5, 6, + + 31, 11, 11, 18, 18, 24, 24, 26, 27, 31, + 11, 26, 27, 31, 4, 4 + } ; + +static const yy_state_type yy_NUL_trans[217] = + { 0, + 8, 8, 37, 37, 41, 41, 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, 83, 0, + 87, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, 0, 0, 87, 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, 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, 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, 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, 0 + } ; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsutrn.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* wcsutrn.l is a Flex description file containing the definition of a lexical +* scanner that translates non-standard FITS units specifications. +* +* It requires Flex v2.5.4 or later. +* +* Refer to wcsunits.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ +/* Options. */ +#define YY_NO_INPUT 1 +/* Exclusive start states. */ + +#line 49 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsunits.h" + +// User data associated with yyscanner. +struct wcsutrn_extra { + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsutrne_scanner(int ctrl, char unitstr[], \ + struct wcserr **err, yyscan_t yyscanner) + +// Dummy definition to circumvent compiler warnings. +#define YY_INPUT(inbuff, count, bufsize) { count = YY_NULL; } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; + +#line 4448 "wcsutrn.c" +#line 4449 "wcsutrn.c" + +#define INITIAL 0 +#define NEXT 1 +#define FLUSH 2 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct wcsutrn_extra * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + yy_size_t yy_n_chars; + yy_size_t yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + }; /* end struct yyguts_t */ + +static int yy_init_globals ( yyscan_t yyscanner ); + +int yylex_init (yyscan_t* scanner); + +int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( yyscan_t yyscanner ); + +int yyget_debug ( yyscan_t yyscanner ); + +void yyset_debug ( int debug_flag , yyscan_t yyscanner ); + +YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); + +FILE *yyget_in ( yyscan_t yyscanner ); + +void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); + +FILE *yyget_out ( yyscan_t yyscanner ); + +void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); + + yy_size_t yyget_leng ( yyscan_t yyscanner ); + +char *yyget_text ( yyscan_t yyscanner ); + +int yyget_lineno ( yyscan_t yyscanner ); + +void yyset_lineno ( int _line_number , yyscan_t yyscanner ); + +int yyget_column ( yyscan_t yyscanner ); + +void yyset_column ( int _column_no , yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( yyscan_t yyscanner ); +#else +extern int yywrap ( yyscan_t yyscanner ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr , yyscan_t yyscanner); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * , yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( yyscan_t yyscanner ); +#else +static int input ( yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + errno=0; \ + while ( (result = (int) read( fileno(yyin), buf, (yy_size_t) max_size )) < 0 ) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (yyscan_t yyscanner); + +#define YY_DECL int yylex (yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_load_buffer_state( yyscanner ); + } + + { +#line 77 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" + +#line 79 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" + static const char *function = "wcsutrne_scanner"; + + if (err) *err = 0x0; + + char orig[80], subs[80]; + *orig = '\0'; + *subs = '\0'; + + int bracket = 0; + int unsafe = 0; + int status = -1; + + yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); + yy_scan_string(unitstr, yyscanner); + *unitstr = '\0'; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units translator error"); + } + + BEGIN(INITIAL); + + #ifdef DEBUG + fprintf(stderr, "\n%s ->\n", unitstr); + #endif + +#line 4727 "wcsutrn.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + while ( (yy_current_state = yy_nxt[yy_current_state][ YY_SC_TO_UI(*yy_cp) ]) > 0 ) + ++yy_cp; + + yy_current_state = -yy_current_state; + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ +case 1: +YY_RULE_SETUP +#line 107 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Looks like a keycomment. + strcat(unitstr, "["); + bracket = 1; + } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 113 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +// Discard leading whitespace. + YY_BREAK +case 3: +/* rule 3 can match eol */ +YY_RULE_SETUP +#line 115 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Non-alphabetic character. + strcat(unitstr, yytext); + if (bracket && *yytext == ']') { + BEGIN(FLUSH); + } + } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 123 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Angstrom"); + BEGIN(NEXT); + } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 129 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "arcmin"); + BEGIN(NEXT); + } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 135 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "arcsec"); + BEGIN(NEXT); + } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 141 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "beam"); + BEGIN(NEXT); + } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 147 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "byte"); + BEGIN(NEXT); + } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 153 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "d"); + BEGIN(NEXT); + } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 159 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 4) ? "d" : "D"); + BEGIN(NEXT); + } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 166 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "deg"); + BEGIN(NEXT); + } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 172 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "GHz"); + BEGIN(NEXT); + } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 178 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "h"); + BEGIN(NEXT); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 184 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 2) ? "h" : "H"); + BEGIN(NEXT); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 191 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Hz"); + BEGIN(NEXT); + } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 197 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "kHz"); + BEGIN(NEXT); + } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 203 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Jy"); + BEGIN(NEXT); + } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 209 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "K"); + BEGIN(NEXT); + } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 215 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "km"); + BEGIN(NEXT); + } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 221 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "m"); + BEGIN(NEXT); + } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 227 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "min"); + BEGIN(NEXT); + } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 233 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "MHz"); + BEGIN(NEXT); + } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 239 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "ohm"); + BEGIN(NEXT); + } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 245 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "Pa"); + BEGIN(NEXT); + } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 251 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "pixel"); + BEGIN(NEXT); + } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 257 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "rad"); + BEGIN(NEXT); + } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 263 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "s"); + BEGIN(NEXT); + } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 269 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 1) ? "s" : "S"); + BEGIN(NEXT); + } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 276 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "V"); + BEGIN(NEXT); + } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 282 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + strcpy(orig, yytext); + strcpy(subs, "yr"); + BEGIN(NEXT); + } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 288 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Not a recognized alias. + strcpy(orig, yytext); + strcpy(subs, orig); + BEGIN(NEXT); + } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 295 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Reject the alias match. + strcat(orig, yytext); + strcpy(subs, orig); + } + YY_BREAK +case 33: +/* rule 33 can match eol */ +YY_RULE_SETUP +#line 301 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Discard separating whitespace. + unput(yytext[yyleng-1]); + } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 306 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Compress separating whitespace. + strcat(unitstr, subs); + strcat(unitstr, " "); + if (strcmp(orig, subs)) status = 0; + unput(yytext[yyleng-1]); + *subs = '\0'; + BEGIN(INITIAL); + } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 316 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Copy anything else unchanged. + strcat(unitstr, subs); + if (strcmp(orig, subs)) status = 0; + unput(*yytext); + *subs = '\0'; + BEGIN(INITIAL); + } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 325 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // Copy out remaining input. + strcat(unitstr, yytext); + } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(NEXT): +case YY_STATE_EOF(FLUSH): +#line 330 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +{ + // End-of-string. + if (*subs) { + strcat(unitstr, subs); + if (strcmp(orig, subs)) status = 0; + } + + if (unsafe) { + return wcserr_set(WCSERR_SET(UNITSERR_UNSAFE_TRANS), + "Unsafe unit translation in '%s'", unitstr); + } + return status; + } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 344 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" +ECHO; + YY_BREAK +#line 5114 "wcsutrn.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( yywrap( yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = yyg->yytext_ptr; + int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + yy_size_t num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + yy_size_t new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin , yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + yy_state_type yy_current_state; + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + if ( *yy_cp ) + { + yy_current_state = yy_nxt[yy_current_state][YY_SC_TO_UI(*yy_cp)]; + } + else + yy_current_state = yy_NUL_trans[yy_current_state]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + + yy_current_state = yy_NUL_trans[yy_current_state]; + yy_is_jam = (yy_current_state == 0); + + (void)yyg; + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp , yyscan_t yyscanner) +{ + char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_cp = yyg->yy_c_buf_p; + + /* undo effects of setting up yytext */ + *yy_cp = yyg->yy_hold_char; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + yy_size_t number_to_move = yyg->yy_n_chars + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + yyg->yy_n_chars = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + yyg->yytext_ptr = yy_bp; + yyg->yy_hold_char = *yy_cp; + yyg->yy_c_buf_p = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin , yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( yyscanner ) ) + return 0; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); + yy_load_buffer_state( yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file , yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * @param yyscanner The scanner object. + */ + void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf , yyscanner ); + + yyfree( (void *) b , yyscanner ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_flush_buffer( b , yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(yyscanner); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (yyscan_t yyscanner) +{ + yy_size_t num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b , yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + yy_size_t i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n , yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n , yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + yy_size_t yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +yy_size_t yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param _line_number line number + * @param yyscanner The scanner object. + */ +void yyset_lineno (int _line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); + + yylineno = _line_number; +} + +/** Set the current column. + * @param _column_no column number + * @param yyscanner The scanner object. + */ +void yyset_column (int _column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + YY_FATAL_ERROR( "yyset_column called with no buffer" ); + + yycolumn = _column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * @param yyscanner The scanner object. + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = _out_str ; +} + +int yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void yyset_debug (int _bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = _bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +/* User-visible API */ + +/* yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ +int yylex_init(yyscan_t* ptr_yy_globals) +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* yylex_init_extra has the same functionality as yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to yyalloc in + * the yyextra field. + */ +int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) +{ + struct yyguts_t dummy_yyguts; + + yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = NULL; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = NULL; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + yyfree(yyg->yy_buffer_stack , yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + yyfree( yyg->yy_start_stack , yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s , yyscan_t yyscanner) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + (void)yyg; + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 344 "/Users/severin/Documents/GitHub/astroimsum/deps/wcslib/C/wcsutrn.l" + + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsutrne( + int ctrl, + char unitstr[], + struct wcserr **err) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsutrn_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsutrne_scanner(ctrl, unitstr, err, yyscanner); + yylex_destroy(yyscanner); + + return status; +} + diff --git a/deps/wcslib/C/wcsutrn.l b/deps/wcslib/C/wcsutrn.l new file mode 100644 index 0000000..e1a47f2 --- /dev/null +++ b/deps/wcslib/C/wcsutrn.l @@ -0,0 +1,366 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsutrn.l,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* wcsutrn.l is a Flex description file containing the definition of a lexical +* scanner that translates non-standard FITS units specifications. +* +* It requires Flex v2.5.4 or later. +* +* Refer to wcsunits.h for a description of the user interface and operating +* notes. +* +*===========================================================================*/ + +/* Options. */ +%option full +%option never-interactive +%option noinput +%option noyywrap +%option outfile="wcsutrn.c" +%option prefix="wcsutrn" +%option reentrant +%option extra-type="struct wcsutrn_extra *" + +/* Exclusive start states. */ +%x NEXT FLUSH + +%{ +#include +#include +#include +#include + +#include "wcserr.h" +#include "wcsunits.h" + +// User data associated with yyscanner. +struct wcsutrn_extra { + // Used in preempting the call to exit() by yy_fatal_error(). + jmp_buf abort_jmp_env; +}; + +#define YY_DECL int wcsutrne_scanner(int ctrl, char unitstr[], \ + struct wcserr **err, yyscan_t yyscanner) + +// Dummy definition to circumvent compiler warnings. +#define YY_INPUT(inbuff, count, bufsize) { count = YY_NULL; } + +// Preempt the call to exit() by yy_fatal_error(). +#define exit(status) longjmp(yyextra->abort_jmp_env, status); + +// Internal helper functions. +static YY_DECL; + +%} + +%% + static const char *function = "wcsutrne_scanner"; + + if (err) *err = 0x0; + + char orig[80], subs[80]; + *orig = '\0'; + *subs = '\0'; + + int bracket = 0; + int unsafe = 0; + int status = -1; + + yy_delete_buffer(YY_CURRENT_BUFFER, yyscanner); + yy_scan_string(unitstr, yyscanner); + *unitstr = '\0'; + + // Return here via longjmp() invoked by yy_fatal_error(). + if (setjmp(yyextra->abort_jmp_env)) { + return wcserr_set(WCSERR_SET(UNITSERR_PARSER_ERROR), + "Internal units translator error"); + } + + BEGIN(INITIAL); + + #ifdef DEBUG + fprintf(stderr, "\n%s ->\n", unitstr); + #endif + +^" "*"[" { + // Looks like a keycomment. + strcat(unitstr, "["); + bracket = 1; + } + +" "+ // Discard leading whitespace. + +[^A-Za-z] { + // Non-alphabetic character. + strcat(unitstr, yytext); + if (bracket && *yytext == ']') { + BEGIN(FLUSH); + } + } + +Angstroms|angstroms? { + strcpy(orig, yytext); + strcpy(subs, "Angstrom"); + BEGIN(NEXT); + } + +arcmins|ARCMINS? { + strcpy(orig, yytext); + strcpy(subs, "arcmin"); + BEGIN(NEXT); + } + +arcsecs|ARCSECS? { + strcpy(orig, yytext); + strcpy(subs, "arcsec"); + BEGIN(NEXT); + } + +BEAM { + strcpy(orig, yytext); + strcpy(subs, "beam"); + BEGIN(NEXT); + } + +Byte { + strcpy(orig, yytext); + strcpy(subs, "byte"); + BEGIN(NEXT); + } + +days?|DAYS? { + strcpy(orig, yytext); + strcpy(subs, "d"); + BEGIN(NEXT); + } + +D { + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 4) ? "d" : "D"); + BEGIN(NEXT); + } + +degrees?|Deg|Degrees?|DEG|DEGREES? { + strcpy(orig, yytext); + strcpy(subs, "deg"); + BEGIN(NEXT); + } + +GHZ { + strcpy(orig, yytext); + strcpy(subs, "GHz"); + BEGIN(NEXT); + } + +hr|HR { + strcpy(orig, yytext); + strcpy(subs, "h"); + BEGIN(NEXT); + } + +H { + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 2) ? "h" : "H"); + BEGIN(NEXT); + } + +hz|HZ { + strcpy(orig, yytext); + strcpy(subs, "Hz"); + BEGIN(NEXT); + } + +KHZ { + strcpy(orig, yytext); + strcpy(subs, "kHz"); + BEGIN(NEXT); + } + +JY { + strcpy(orig, yytext); + strcpy(subs, "Jy"); + BEGIN(NEXT); + } + +[kK]elvins?|KELVINS? { + strcpy(orig, yytext); + strcpy(subs, "K"); + BEGIN(NEXT); + } + +KM { + strcpy(orig, yytext); + strcpy(subs, "km"); + BEGIN(NEXT); + } + +metres?|meters?|M|METRES?|METERS? { + strcpy(orig, yytext); + strcpy(subs, "m"); + BEGIN(NEXT); + } + +MIN { + strcpy(orig, yytext); + strcpy(subs, "min"); + BEGIN(NEXT); + } + +MHZ { + strcpy(orig, yytext); + strcpy(subs, "MHz"); + BEGIN(NEXT); + } + +Ohm { + strcpy(orig, yytext); + strcpy(subs, "ohm"); + BEGIN(NEXT); + } + +[pP]ascals?|PASCALS? { + strcpy(orig, yytext); + strcpy(subs, "Pa"); + BEGIN(NEXT); + } + +pixels|PIXELS? { + strcpy(orig, yytext); + strcpy(subs, "pixel"); + BEGIN(NEXT); + } + +radians?|RAD|RADIANS? { + strcpy(orig, yytext); + strcpy(subs, "rad"); + BEGIN(NEXT); + } + +sec|seconds?|SEC|SECONDS? { + strcpy(orig, yytext); + strcpy(subs, "s"); + BEGIN(NEXT); + } + +S { + unsafe = 1; + strcpy(orig, yytext); + strcpy(subs, (ctrl & 1) ? "s" : "S"); + BEGIN(NEXT); + } + +[vV]olts?|VOLTS? { + strcpy(orig, yytext); + strcpy(subs, "V"); + BEGIN(NEXT); + } + +years?|YR|YEARS? { + strcpy(orig, yytext); + strcpy(subs, "yr"); + BEGIN(NEXT); + } + +[A-Za-z]+ { + // Not a recognized alias. + strcpy(orig, yytext); + strcpy(subs, orig); + BEGIN(NEXT); + } + +[A-Za-z]+ { + // Reject the alias match. + strcat(orig, yytext); + strcpy(subs, orig); + } + +" "+[^A-Za-z] { + // Discard separating whitespace. + unput(yytext[yyleng-1]); + } + +" "+[A-Za-z] { + // Compress separating whitespace. + strcat(unitstr, subs); + strcat(unitstr, " "); + if (strcmp(orig, subs)) status = 0; + unput(yytext[yyleng-1]); + *subs = '\0'; + BEGIN(INITIAL); + } + +. { + // Copy anything else unchanged. + strcat(unitstr, subs); + if (strcmp(orig, subs)) status = 0; + unput(*yytext); + *subs = '\0'; + BEGIN(INITIAL); + } + +.* { + // Copy out remaining input. + strcat(unitstr, yytext); + } + +<> { + // End-of-string. + if (*subs) { + strcat(unitstr, subs); + if (strcmp(orig, subs)) status = 0; + } + + if (unsafe) { + return wcserr_set(WCSERR_SET(UNITSERR_UNSAFE_TRANS), + "Unsafe unit translation in '%s'", unitstr); + } + return status; + } + +%% + +/*---------------------------------------------------------------------------- +* External interface to the scanner. +*---------------------------------------------------------------------------*/ + +int wcsutrne( + int ctrl, + char unitstr[], + struct wcserr **err) + +{ + // Function prototypes. + int yylex_init_extra(YY_EXTRA_TYPE extra, yyscan_t *yyscanner); + int yylex_destroy(yyscan_t yyscanner); + + struct wcsutrn_extra extra; + yyscan_t yyscanner; + yylex_init_extra(&extra, &yyscanner); + int status = wcsutrne_scanner(ctrl, unitstr, err, yyscanner); + yylex_destroy(yyscanner); + + return status; +} diff --git a/deps/wcslib/C/wtbarr.h b/deps/wcslib/C/wtbarr.h new file mode 100644 index 0000000..a501acb --- /dev/null +++ b/deps/wcslib/C/wtbarr.h @@ -0,0 +1,120 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wtbarr.h,v 8.4 2024/10/28 13:56:16 mcalabre Exp $ +*============================================================================= +* +* WCSLIB 8.4 - C routines that implement the FITS World Coordinate System +* (WCS) standard. Refer to the README file provided with WCSLIB for an +* overview of the library. +* +* +* Summary of the wtbarr struct +* ---------------------------- +* The wtbarr struct is used by wcstab() in extracting coordinate lookup tables +* from a binary table extension (BINTABLE) and copying them into the tabprm +* structs stored in wcsprm. +* +* +* wtbarr struct - Extraction of coordinate lookup tables from BINTABLE +* -------------------------------------------------------------------- +* Function wcstab(), which is invoked automatically by wcspih(), sets up an +* array of wtbarr structs to assist in extracting coordinate lookup tables +* from a binary table extension (BINTABLE) and copying them into the tabprm +* structs stored in wcsprm. Refer to the usage notes for wcspih() and +* wcstab() in wcshdr.h, and also the prologue to tab.h. +* +* For C++ usage, because of a name space conflict with the wtbarr typedef +* defined in CFITSIO header fitsio.h, the wtbarr struct is renamed to wtbarr_s +* by preprocessor macro substitution with scope limited to wtbarr.h itself, +* and similarly in wcs.h. +* +* int i +* (Given) Image axis number. +* +* int m +* (Given) wcstab array axis number for index vectors. +* +* int kind +* (Given) Character identifying the wcstab array type: +* - c: coordinate array, +* - i: index vector. +* +* char extnam[72] +* (Given) EXTNAME identifying the binary table extension. +* +* int extver +* (Given) EXTVER identifying the binary table extension. +* +* int extlev +* (Given) EXTLEV identifying the binary table extension. +* +* char ttype[72] +* (Given) TTYPEn identifying the column of the binary table that contains +* the wcstab array. +* +* long row +* (Given) Table row number. +* +* int ndim +* (Given) Expected dimensionality of the wcstab array. +* +* int *dimlen +* (Given) Address of the first element of an array of int of length ndim +* into which the wcstab array axis lengths are to be written. +* +* double **arrayp +* (Given) Pointer to an array of double which is to be allocated by the +* user and into which the wcstab array is to be written. +* +*===========================================================================*/ + +#ifndef WCSLIB_WTBARR +#define WCSLIB_WTBARR + +#ifdef __cplusplus +extern "C" { +#define wtbarr wtbarr_s // See prologue above. +#endif + // For extracting wcstab arrays. Matches + // the wtbarr typedef defined in CFITSIO + // header fitsio.h. +struct wtbarr { + int i; // Image axis number. + int m; // Array axis number for index vectors. + int kind; // wcstab array type. + char extnam[72]; // EXTNAME of binary table extension. + int extver; // EXTVER of binary table extension. + int extlev; // EXTLEV of binary table extension. + char ttype[72]; // TTYPEn of column containing the array. + long row; // Table row number. + int ndim; // Expected wcstab array dimensionality. + int *dimlen; // Where to write the array axis lengths. + double **arrayp; // Where to write the address of the array + // allocated to store the wcstab array. +}; + +#ifdef __cplusplus +#undef wtbarr +} +#endif + +#endif // WCSLIB_WTBARR diff --git a/deps/wcslib/CHANGES b/deps/wcslib/CHANGES new file mode 100644 index 0000000..1f7d999 --- /dev/null +++ b/deps/wcslib/CHANGES @@ -0,0 +1,3603 @@ +WCSLIB version 8.4 (2024/10/29) +------------------------------------ + +* C library + + - Fixed some problems in wcs_chksum() and changed wcs_fletcher32() to + conform to the standard computation. + + - New test program, twcs_pthread. + +* User manual + + - Documentation generation moved to doxygen 1.12.0 (was 1.10.0). + + +WCSLIB version 8.3 (2024/05/14) +------------------------------- + +* C library + + - Until now, wcsset() always operated unconditionally - the wcsprm + struct was set or reset regardless of its current state. Likewise + the various *set() functions for the other structs. + + However, in some situations, particularly in threaded applications, + it is desirable to have wcsset(), etc., check the state of the + struct and return immediately if it has already been set. This may + now be accomplished by setting wcsprm::flag == 1 (instead of 0) + before calling wcsset(). Likewise for the other structs. This sets + a "bypass" flag within the struct itself. + + - A new function, wcsenq(), queries the state of the wcsprm struct, + specifically whether WCSLIB is managing its memory, whether the + struct has been set, whether or not it is in bypass mode, and + whether it is self-consistent. There are corresponding functions + for the other structs: celenq(), disenq(), linenq(), prjenq(), + spcenq(), and tabenq(). Please refer to the WCSLIB manual. + + - In the C test suite, modified twcs to test wcsenq() and also + wcsset() in bypass mode. + + - Quelled nuisance compiler warnings in wcsbth(), wcspih(), wcsp2s(), + and wcshdo(). + +* Fortran wrappers + + - Interprocedural Link Time Optimization (LTO), when used with the + strict compiler options required by some Linux distributions, may + place more stringent requirements on mixing code written in + different languages. Specifically, as far as WCSLIB is concerned, + this applies for Fortran calling C (or vice versa) where the + function parameter list includes a character variable. + + It is important to note that the existing Fortran wrappers work as + they did before, with or without LTO, that issues only arise when + strict LTO compiler options are enabled, and that wrappers without + a character argument are unaffected. + + Fortran 2003 introduced the "language-binding-spec" attribute using + the keyword BIND. The INTERFACE block for a procedure may be given + the BIND(C) attribute to specify the interface of an external, + interoperable C function. Use of this BIND(C) attribute is now + virtually mandated by LTO (with said strict compiler options). + + The WCSLIB Fortran wrappers are written in C, e.g. wcs_f.c, with a + Fortran-compliant interface, and these C functions are intended to + be called directly from Fortran applications. Three options were + considered for achieving strict LTO compliance: + + 1) Require that all existing Fortran applications be modified to + conform to the Fortran 2003 language binding specification via + the addition of INTERFACE blocks bearing the BIND(C) attribute + for the existing wrappers. + + This option is clearly untenable. + + 2) Rewrite the WCSLIB Fortran wrappers completely in Fortran 2003. + + It seems that this option may be tenable as the BIND(C) spec + allows for C-equivalent derived types. However, it would + require rewriting all of the wrappers, 5 kloc of C code, in + Fortran 2003 code that must directly manipulate the internals + of all of the WCSLIB structs. + + 3) Introduce a new layer of thin wrappers, written in Fortran + 2003, that do nothing more than define the INTERFACE to the + existing wrappers written in C and then call them. + Essentially this extracts the changes required in option (1) + into a new set of wrappers. + + This was the option chosen on the basis of simplicity - only + specific wrappers, namely those with character arguments, need + be rewrapped. It also minimises WCSLIB's exposure to Fortran + 2003, particularly for the sake of legacy astronomical packages + such as Miriad and AIPS. Further, it admits the possibility of + the optional use of this extra layer of wrappers. + + The new Fortran 2003 wrappers reside in the Fortran subdirectory in + files by the name of *_bindc.f90. By default they are not compiled + and not used. To use them, WCSLIB must be configure'd with the new + '--with-bindc' option. This causes the new BIND(C) wrappers to be + compiled, and the names of the old wrappers to be changed, for + example from wcspih_() to wcspih_c(). + + LTO compile problems reported by Eli Schwartz, Gentoo maintainer. + + - Added wrappers for celenq(), disenq(), linenq(), prjenq(), spcenq(), + tabenq(), and wcsenq(). + + - In the Fortran test suite, modified twcs to test WCSENQ and also + WCSSET in bypass mode. + +* PGSBOX + + - Changes mirroring those described above for the Fortran wrappers, + the difference being that here we have a mix of C calling Fortran + (e.g. cpgsbox() calling PGSBOX) as well as Fortran calling C (e.g. + PGWCSL calling pgwcsl_c()). As with the Fortran wrappers, the new + configure option, '--with-bindc', chooses whether to use the new + BIND(C) PGSBOX wrappers. + +* Installation + + - Added '--with-bindc' as a new configure option (or BINDC=yes from + the environment) to signal the use of the new strictly LTO-compliant + Fortran wrappers. See above. + + - Modified 'configure' to report the version of gcc used. Likewise, + for the 'show' rule in makedefs. + +* User manual + + - Quelled a nuisance compiler warning in doxextr. + + - Documentation generation moved to doxygen 1.10.0 (was 1.9.8). + + +WCSLIB version 8.2.2 (2023/11/29) +--------------------------------- + +* C library (installation) + + - In prj.c, a number of variables with global scope that are only used + internally were declared static to avoid namespace conflicts arising + in Link Time Optimization (LTO) builds of the Rwcs wrappers. This + is a patch release as it does not affect the library itself other + than in localising some symbols that were never meant to be global. + Reported by Rodrigo Carrizo with patch. + + Likewise for an internally used helper function, prjoff(). + Likewise for a handful of variables in cel.c, dis.c, lin.c, tab.c, + wcs.c, wcsfix.c, and wcshdr.c. + + +WCSLIB version 8.2.1 (2023/11/17) +--------------------------------- + +* Installation + + - With searching enabled in the HTML manual, doxygen creates a new + subdirectory, html/search, which must be installed explicitly. + + +WCSLIB version 8.2 (2023/11/16) +------------------------------- + +* C library + + - In wcshdo(), fixed character buffer overflows in the comment string + for the longitude and latitude axes triggered by some projections, + and also the formatting for generic coordinate systems. Reported by + Shu Niu. + +* User manual + + - Documentation generation moved to doxygen 1.9.8 (was 1.9.7). + + - Enabled searching in the HTML manual. + + +WCSLIB version 8.1 (2023/07/06) +------------------------------- + +Changes in the contents of the auxprm struct (in 8.0 beta) necessitated +incrementing the major version number from 7 to 8, i.e. the ABI changed. +Took the opportunity for minor tweaks to wcsprm and disprm. + +* C library + + - In disprm, changed the order of maxdis and totdis to ensure correct + alignment of doubles on 32-bit machines. + +* Fortran wrappers + + - Match changes to disprm in the C library. + + - In the Fortran test suite, inserted a brief pause between plots in + tprj2, tspc, and tpih2, which have long been a blur. + +* PGSBOX + + - Quell innocuous compiler warnings from gfortran 12.1.0. Inserted a + brief pause between plots in pgtest and cpgtest. + + +WCSLIB version 8.0 beta (2023/07/01) +------------------------------------ + +Beta test version, not publically released. + +* C library + + - Support planetary keywords A_RADIUS, B_RADIUS, C_RADIUS, BLON_OBS, + BLAT_OBS, and BDIS_OBS in auxprm by analogy with the Solar keywords + added at 7.1. Requested by Chiara Marmo (Observatoire de Paris). + + - Added wcsprm::time to the wcsprm struct to record the TIME axis + number (along with lng, lat, and spec). + + - Fixed a bug in wcspih() and wcsbth() where trailing blanks were not + stripped from string keyvalues. Reported by Naveen Dukiya. + + Changed test program tdis3 to test this. + + - Fixed a problem affecting thread safety in disp2x(), disx2p(), and + diswarp(). Reported by Mohammad Akhlaghi. + +* Fortran wrappers + + - Match changes to the C library supporting planetary keywords in + auxprm and the addition of wcsprm::time. + +* User manual + + - Documentation generation moved to doxygen 1.9.7 (was 1.9.5). + + +WCSLIB version 7.12 (2022/09/09) +-------------------------------- + +* C library + + - In wcsp2s() and wcss2p(), fixed handling of status returns from + linp2x() and linx2p() relating to distortion functions, specifically + with respect to setting the stat[] vector. Reported by Sepideh + Eskandarlou (via Mohammad Akhlaghi). + + - When extracting by axis type, wcssub() did not account for the + possibility of time axes with -TAB or -LOG algorithm codes. + Reported by Mihai Cara. + +* Utilities + + - Fixed a bit of confusion in wcsgrid relating to cfitsio file opening + syntax, e.g. file.fits+1. It now matches wcsware in that regard. + + - Portability fix in sundazel - need to define _POSIX_C_SOURCE as + 199506L in order to get the declaration of localtime_r(). Reported + by Marc Espie. + +* User manual + + - Documentation generation moved to doxygen 1.9.5 (was 1.9.3). + + +WCSLIB version 7.11 (2022/04/26) +-------------------------------- + +* C library + + - In tabini(), the default index array should contain a 1-relative + sequence: {1, 2,... N}. Previously it was 0-relative. + + +WCSLIB version 7.10 (2022/04/24) +-------------------------------- + +* C library + + - In tabcpy(), collapse degenerate table index arrays if they are + collapsed in the source struct. Minor fix for output formatting + in tabprt(). + + - In the C test suite, added calls to wcstrim() in twcsfix to tidy + the structs before printing. + +* Utilities + + - The default option in wcsware now trims the wcsprm struct before + printing it. Use the '-p' option to print the untrimmed struct. + + +WCSLIB version 7.9 (2022/03/26) +------------------------------- + +* C library + + - In wcsset(), bug fix for identifying time coordinate axes. + Reported by Mihai Cara with patch. + + +WCSLIB version 7.8 (2022/03/25) +------------------------------- + +* C library + + - In wcssub(), bug fix for tabular coordinates that change axis + number, thus requiring tabprm::map to be updated. Reported by + Mihai Cara with patch. + + Also in wcssub(): + - check that all axes of a multi-dimensional table are extracted + together, + - fixed potential memory leaks for tabular coordinate axes when + an attempt to subimage non-separable axes fails, + - the error messages for non-separable coordinate systems are + generally more informative, + - subimage extraction by coordinate type now recognises time + coordinate axis types via WCSSUB_TIME. + + - wcsset() now identifies time coordinate axes in wcsprm::types. + + - Extended test program twcssub to test the above modifications. + +* Installation + + - Bug fix in the utils makefile for creating $(MANDIR)/man1. + Reported by Aleksander Kurek. + + - Bug fix in the Fortran makefile for compiling and using 'tofits'. + Reported by Stefan Brüns. + +* User manual + + - Documentation generation moved to doxygen 1.9.3 (was 1.9.1). + + +WCSLIB version 7.7 (2021/07/12) +------------------------------- + +* C library + + - In disfree() and disset(), removed potential for double invokation + of free() on allocated memory. Reported by Cyril Richard. + + - In wcsutil_fptr2str(), fixed a bug reported by Ralf Palsa (with fix) + that caused it to be overly enthusiastic in stripping leading zeroes + off addresses of function pointers. + + - In wcspcx(), replaced variable length arrays with allocated memory + (portability issue). Reported by Mihai Cara with patch. + + - Fixed buglets in wcsbth() and linsize() uncovered by gcc 11.1.0. + + - Quelled inconsequential compiler warnings from gcc 11.1.0 concerning + wcsmix() (function prototype in wcs.h), wcstrim(), wcseulexe(), + wcsulex(), and wcsutrne(). + + - Defined _POSIX_C_SOURCE appropriately in tprj2.c and tspc.c to get + the function prototype etc. for nanosleep() from time.h. + +* Fortran wrappers + + - Quelled numerous inconsequential compiler warnings from gfortran + 11.1.0. + + - Fixed minor bugs uncovered by gfortran 11.1.0 in test programs tdis2 + and ttab3. + +* Utilities + + - Moved 'tofits' from ./C/test/ into the utilities directory as it's + generally useful, and added usage (converted to man page). + + Also made it a bit smarter in dealing with ISO/IEC 8859 and UTF-8 + encoded byte streams, in particular translating non-breaking spaces + into ordinary spaces. + +* Installation + + - Two patches for configure.ac provided by Mosè Giordano: + 1. makes it possible to build the Windows library using the MinGW + cross-compiler, + 2. makes the soname of the MacOSX library consistent with other + Unix systems. + + +WCSLIB version 7.6 (2021/04/13) +------------------------------- + +* C library + + - Bug fix in tabs2x() triggered for 1-dimensional coordinate lookup + tables on axes > 1. Reported by Mihai Cara. + + - In datfix(), don't return status 0 if no change was made (fix for + change made at release 7.4). Reported by Derek Homeier. + + - New function wcspcx() in the wcsfix suite regularizes the linear + transformation component of a coordinate description to make it more + human-readable. It decomposes CDi_ja into PCi_ja and CDELTia in + such a way that CDELTia forms meaningful scaling parameters, often + leaving an orthogonal or near-orthogonal matrix. Optionally, it can + then permute rows of this matrix to unscramble axis permutations. + + A test header may be generated from wcspcx.keyrec for input to + wcsware (not exercised as part of the standard test suite). + + - New function wcstrim() frees memory allocated by wcsinit() for + arrays in a wcsprm struct that remain unused after the struct has + been set up. + + - New functions wcssize(), auxsize(), tabsize(), linsize(), dissize(), + celsize(), prjsize(), spcsize(), and wcserr_size() compute the total + size of the relevant structs, including allocated memory. + + - In the C test suite, inserted a brief pause in tprj2 and tspc, which + otherwise have now become a blur. + +* Fortran wrappers + + - Added wrappers for wcspcx(), wcstrim(), wcssize(), auxsize(), + tabsize(), linsize(), dissize(), celsize(), prjsize(), spcsize(), + and wcserr_size(). + +* Utilities + + - Added -c, -cp, -C, and -Cp options to wcsware to apply wcspcx() + in a variety of ways, -m to apply wcstrim(), and -z to report the + total size of the wcsprm struct with a breakdown of the sizes of + its constituent structs. + + - Fixed compiler warnings for sundazel (portability issue). + +* Installation + + - Upped the required version of Flex to 2.6.0 (was 2.5.9). Problems + with Flex 2.5.39 reported by Derek Homeier. + + Also added '--disable-flex' as a new configure option to force the + use of the pre-generated Flex sources. + + +WCSLIB version 7.5 (2021/03/20) +------------------------------- + +The C code in WCSLIB is moving piecemeal to the C99 standard. In fact, +various indispensible C99 constructs have been used in WCSLIB for many +years: the long long int data type (in fitshdr() only); stdint.h, +inttypes.h, and the use of PRI formatting control (in wcsprintf(), which +is widely used by the library); and the C99-extended library function +vsnprintf() (used by wcserr for a decade). Flex-generated C code also +uses C99 extensions, though with workarounds if they are not available. + +Except in the header prologues, which are formatted in a special way for +generating the user manual, comments were changed en masse to C99 style +in release 7.3.1, and variable declarations in code that I have occasion +to modify will transition to the more general placement allowed by C99. +However, I have no plans to use any of the more esoteric features of +C99. + +* C library + + - New function, wcsccs(), changes the celestial coordinate system of a + wcsprm struct, for example, from equatorial to galactic coordinates. + The parameters that define the spherical coordinate transformation + must be provided. This allows WCSLIB to provide this functionality + without needing to know anything about specific celestial coordinate + systems, and has the advantage of making the routine completely + general. Requested by Mohammad Akhlaghi. + + Modified test program twcsfix also to test wcsccs(). + + - Fixed a problem common to all of the Flex code (fitshdr, wcsbth, + wcspih, wcsulex, and wcsutrn) that made it thread-unsafe. Reported + by Cyril Richard. + + Added a new test program, tpthreads, to test thread safety. It is + only used for code development, and not exercised as part of the + standard test suite. + + - In fitshdr(), fixed a problem that potentially could arise on + systems where sizeof(long long int) is greater than 8 (64 bits). + +* Fortran wrappers + + - Match changes to the C library: added a wrapper for wcsccs(), and + modified twcsfix.f. + + - Because null addresses cannot be passed to functions in Fortran, + wcssub_() now interprets *nsub == -1 && *axes == -1 as a signal to + do a deep copy of one wcsprm struct to another. + +* Utilities + + - New utility, sundazel, computes the local time of the Sun's passage + through the specified apparent longitude or latitude in a user- + defined coordinate system. It can also perform several other Solar + related calculations. (It is unrelated to FITS WCS, and does not + use WCSLIB.) + +* Installation + + - Added an 'uninstall' rule to the makefiles. Suggested by + Cyril Richard. + + +WCSLIB version 7.4 (2021/01/31) +------------------------------- + +* C library + + - In wcshdo(), fixed a bug introduced in release 5.9 that potentially + caused loss of numerical precision in the sprintf() formatting of + floating point keyvalues. This was triggered when a large range of + CRPIXja, PCi_ja, or CDELTia values (as three separate groups) were + formatted using an 'f' format descriptor, the range not being so + large that it would have forced wcshdo() to revert to 'E' format. + Reported by Mohammad Akhlaghi. + + Also in wcshdo(), fixed a bug introduced in release 7.1 that caused + the coefficients of the TPD distortion function not to be written to + the header. TPD and Polynomial distortion function headers will now + always include the DPja.DOCORR keyword. Reported by Derek Homeier + with patch. + + - In wcsset(), fixed a segv generated in attempting to report a non- + standard units string with wcserr message reporting disabled. + Reported by Mohammad Akhlaghi. + + In wcsutrne(), allow 'Angstroms' and 'angstroms' as additional + synonyms for 'Angstrom'. + + - In datfix(), ensure that 0 is returned if an informational message + is set in wcsprm::err. Consequent on feedback independently from + Mihai Cara and Bruce Merry. + + Clarified that informational messages may be set in wcsprm::err + for returns of 0 from datfix(), obsfix(), unitfix(), and spcfix(). + +* User manual + + - Added cautions about translating CDi_ja to PCi_ja plus CDELTia for + those historical distortion functions (TPV, TNX, ZPX) that expect to + operate on intermediate world coordinates, rather than intermediate + pixel coordinates. Consequent on feedback from Mohammad Akhlaghi. + + - Documentation generation moved to doxygen 1.9.1 (was 1.8.19). + + +WCSLIB version 7.3.1 (2020/08/17) +--------------------------------- + +There are no functional changes in this release. + +* C library +* Fortran wrappers +* PGSBOX +* Utilities + + - Changed all C code, including within the flex sources, Fortran and + PGSBOX wrappers, and test suite, to use C99 style commenting (i.e. + using //), excluding the header prologues used to generate the user + manual. + +* User manual + + - Documentation generation moved to doxygen 1.8.19 (was 1.8.18). + + +WCSLIB version 7.3 (2020/06/03) +------------------------------- + +* C library + + - wcshdo() was writing MJD-OBS twice to the header, and MJD-BEG not + at all. + + - In wcshdo(), if MJDREF assumes its default value, just write + MJDREF = 0 (not MJDREFI & MJDREFF), and omit writing DATEREF, + which, with a value of '1858-11-17', looks strange and is + potentially confusing. Reported by Thomas Robitaille. + + If the fractional part of MJDREF is zero, then just write the + integer part as MJDREF (i.e. not as MJDREFI & MJDREFF). + + - Bug fix in wcsfix() - it was writing error messages that referred + to DATE-REF and MJD-REF rather then DATEREF and MJDREF. Reported + by Mihai Cara. + + - Under control of a new flag, WCSHDR_DATEREF, added the option to + wcspih() and wcsbth() to accept DATE-REF, MJD-REF, MJD-REFI, + MJD-REFF, JDREF, JD-REFI, and JD-REFF as synonyms for the standard + keywords, DATEREF, MJDREF, MJDREFI, MJDREFF, JDREF, JDREFI, and + JDREFF. The latter buck the pattern set by the other date keywords + ({DATE,MJD}-{OBS,BEG,AVG,END}), thereby increasing the potential + for confusion and error. + +* Fortran wrappers + + - As compilers are becoming much stricter (gfortran 10), modified all + Fortran test programs to use the type-specific equivalents of the + various *PUT and *GET routines. Reported by Ole Streicher. + + - For the fitshdr wrappers, added type-specific equivalents of + KEYGET: KEYGTI, KEYGTD, and KEYGTC. + +* PGSBOX + + - Modified pgtest to use the type-specific equivalents of WCSPUT. + +* User manual + + - In the section "WCSLIB Fortran wrappers", promoted use of the type- + specific equivalents of the various *PUT and *GET routines. + + - In the section "FITS-WCS and related software", added ASCL and ADS + codes, where they exist, for all software packages mentioned. + + - Documentation generation moved to doxygen 1.8.18 (was 1.8.17). + + +WCSLIB version 7.2 (2020/03/09) +------------------------------- + +* C library + + - In wcssub(), fixed a bug relating to handling coordinate lookup + tables. Reported by Mihai Cara with fix. + + Also increased the number of coordinate axes handled from 10 to 32. + +* Installation + + - New configure option, '--disable-shared', defeats generation of the + sharable library. + + +WCSLIB version 7.1 (2020/01/01) +------------------------------- + +Changes in the contents of the wcsprm struct necessitated incrementing +the major version number from 6 to 7 (i.e. the ABI changed). + +* C library + + - In wcsset(), set wcsprm::mjdref[] to zero if neither it nor + wcsprm::dateref are defined, as per the standard. Reported by + Thomas Robitaille. + + wcsset() now also checks that the number of coordinate axes does not + exceed 32. + + - In tabs2x(), fixed an out-of-bounds array access produced by invalid + world coordinates. Reported by Mihai Cara and Michael Seifert. + + In tab.c, declare static three helper functions, tabedge(), + tabrow(), and tabvox(), used by tabs2x(). Increased the number of + coordinate axes handled by tabvox() from 16 to 32. + + - Extended datfix() to handle MJDREF/DATEREF, overlooked in the + changes in release 6.1. Also fixed the handling of MJD < 0. + + - Support Solar keywords RSUN_REF, DSUN_OBS, CRLN_OBS, CRLT_OBS, + HGLN_OBS, and HGLT_OBS by accomodating them within an auxiliary + struct, auxprm, within the wcsprm struct. Now filled by the header + parsers, wcspih() and wcsbth() and handled routinely by wcsinit(), + wcssub(), wcscompare(), wcsfree(), wcsprt(), wcsset(), and wcshdo(). + Requested by Stuart Mumford (SunPy) with input from Bill Thompson. + + - Bug fix in wcsprintf_set() for resetting the output disposition. + Reported by Mihai Cara with patch. + + - In dis.{h,c}, the DOCORR record is now handled as a first-class + value via disprm::docorr. This required changing the struct. + + - In cel.c, spc.c, wcserr.c, wcsfix.c, wcshdr.c, and wcsutil.c, + quelled compiler warnings from gcc 9.2.0 generated by + -Wmaybe-uninitialized and -Wstringop-truncation (via -Wall). + + Similarly for various programs in the test suite. + + - In various functions, quelled warnings from the Microsoft Visual C++ + compiler, mostly relating to pointer arithmetic. Reported by + Michael Seifert. + +* Fortran wrappers + + - Handled compiler warnings from gcc 9.2.0 generated by + -Wstringop-truncation (via -Wall). + + - Minor enhancements to character argument handling, including, in + prjget_(), blank-filling the returned strings matching PRJ_CODE and + PRJ_NAME, and likewise for SPC_TYPE and SPC_CODE in spcget_(). + +* Utilities + + - In wcsgrid, handled compiler warnings from gcc 9.2.0 generated by + -Wstringop-truncation (via -Wall). + +* User manual + + - In the section on "FITS-WCS and related software", added mention of + the R wrappers (Rwcs). Suggested by Aaron Robotham. + + - Added a new section detailing the limit on the number of image axes + that WCSLIB can handle (currently 32), and how this could be + increased if needed. Prompted by Thomas Robitaille. + + - Augmented the section on the Fortran wrappers, particularly with + respect to character string handling in argument lists. + + - Documentation generation moved to doxygen 1.8.17 (was 1.8.16). + + +WCSLIB version 6.4 (2019/08/15) +------------------------------- + +* Installation + + - The rule change to the Fortran makefile in v6.3 to add getwcstab_f.o + to the sharable library causes it to depend on CFITSIO to resolve + fits_get_wcstab(). Hence backed out of that change. + +* User manual + + - Documentation generation moved to doxygen 1.8.16 (was 1.8.14). + + +WCSLIB version 6.3 (2019/07/12) +------------------------------- + +* C library + + - Fixed the Polynomial and TPD distortions so that, as stipulated in + WCS Paper IV, they are now considered to return an additive + correction to be applied to the given coordinates, rather than the + corrected coordinates themselves. + + Added a new subsection to the prologue of dis.h entitled 'Historical + idiosyncrasies', which discusses this issue and other vagueries. + + Amended components of the test suite accordingly: SIPTPV.keyrec, + TPV7.keyrec, and tdis1.c. + + - Fixed memory leaks and other potential problems that arose in the + wcserr system consequent on changes made in release 6.1. + + Memory allocated by wcsfixi() for messages in the array of wcserr + structs must now be freed by the caller. Amended twcsfix.c + accordingly. + + - Plugged memory leaks arising in disset(). + + - New function wcsdealloc() provided to free memory allocated within + certain WCSLIB routines. Suggested by David Motl. + + - Eliminated a swag of inconsequential compiler warnings, particularly + those emanating from the flex sources. + +* Validation + + - The library, Fortran wrappers, utilities, and test programs now pass + runtime analysis using -fsanitize=address and -fsanitize=undefined + in gcc 8.3.0, in addition to valgrind. Also compile-time strictures + using -std=c99, -pedantic, -Wall, -Wextra, and -DFORTIFY_SOURCE=2. + Prompted by feedback from Ole Streicher. + +* Installation + + - The non-graphical tests now run reliably in parallel builds + (make CHECK=nopgplot -j8 check). Requested by Mohammed Akhlaghi. + + The graphical tests can also be run in parallel, but as PGPLOT can + only handle one stream at a time, some graphics are likely to be + lost. Nevertheless, it is a useful option, especially with runtime + analysis via -fsanitize=address, etc. + + - As CFITSIO doesn't provide a Fortran wrapper for fits_read_wcstab(), + getwcstab_f.o is now always included in the WCSLIB object library + and sharable library if CFITSIO is available (and the WCSLIB Fortran + wrappers are required). Use 'configure --without-cfitsio' to + defeat this. + + - Tidied up some aspects of the build where CFITSIO is not available. + +* User manual + + - Fixed minor formatting problems in dis.h. + + +WCSLIB version 6.2 (2018/10/20) +------------------------------- + +* C library + + - Consequent on the change in release 6.1, reapplied soothing balm to + the wtbarr struct definition in wcs.h for C++ compilation (C and + Fortran compilation being unaffected). While the object libraries + themselves are unchanged, the modified wcs.h must be installed for + compiling C++ applications. Reported by Corentin Schreiber. + +* User manual + + - Fixed minor formatting problems with the doxygen manual generation. + + +WCSLIB version 6.1 (2018/10/19) +------------------------------- + +* C library + + - Added support for time-related WCS keywords (Paper VII) by expanding + the wcsprm struct to store them as auxiliary values, now filled by + the header parsers, wcspih() and wcsbth() and handled routinely by + wcsinit(), wcssub(), wcscompare(), wcsfree(), wcsprt(), wcsset(), + and wcshdo(). + + - Augmented datfix() to do various consistency checks on the new + time-related keyvalues, and added a new routine, obsfix(), to check + consistency of the OBSGEO-[XYZLBH] observatory coordinates. + + - In the usage notes for wcsbth(), clarified that, according to WCS + Papers III and VII, certain global image header keywords are + permitted in binary table headers and are expected to be inherited + by image arrays and pixel lists, and elaborated on the difficulties + that such inheritance may cause for pixel lists. + + - Revamped message string handling in the wcserr module to allow + arbitrarily long messages while greatly reducing the sizeof the + struct. + + - Extracted the definition of the wtbarr struct from wcs.h to a + separate header file, wtbarr.h, in order to reduce the number of + irrelevant warnings generated by 'gcc -Wpadded' (primarily for + code development). Applications code that needs to access members + of the struct (unlikely) must now include wtbarr.h (or wcslib.h). + + - The WCSLIB major version number was incremented as changes to the + wcsprm struct makes the ABI of the sharable library incompatible + with executables linked with that of older releases. + +* Fortran wrappers + + - Match changes to the C library, including adding a wrapper for + obsfix(). + +* Installation + + - Several changes to configure and the makefiles aimed at facilitating + code development. + + +WCSLIB version 5.20 (2018/10/05) +-------------------------------- + +* C library + + - Added utility functions dpkeyi() and dpkeyd() to dis.c, and removed + the corresponding functions from wcsutil.c. + +* Fortran wrappers + + - New wrappers for dpkeyi() and dpkeyd(). + +* Installation + + - Reworked the makefiles to allow parallel library builds, as required + by some software distributions. Reported by Dustin Lang with + suggested patch, and Zaak Beekman. (Parallel execution of the test + suite is not supported.) + + - The introduction of "deterministic" archiving (ar(1)) broke + dependency analysis in the WCSLIB makefiles on the many systems + where it is now enabled by default (i.e. binutils configured with + --enable-deterministic-archives). + + Modified configure to force non-deterministic archiving during the + library builds, thus repairing the dependency analysis. However, + the static object libraries are now reconstructed using + deterministic archiving in the process of installing them. + + - Fixed problems with the dependency analysis, solely affecting code + development. + + +WCSLIB version 5.19.1 (2018/07/28) +---------------------------------- + +* Installation + + - Updated ./config/config.{guess,sub} to the latest versions from the + GIT repository, timestamped 2018-07-18 and 2018-07-25, respectively. + The previous pair were dated 2012-02-10 and 2012-04-18. + + +WCSLIB version 5.19 (2018/07/27) +-------------------------------- + +* C library + + - In wcssub(), fixed a bug in handling distortion functions on axes + with changed axis number in the subimage (i.e. via deletion or + addition of an axis). + + - In various routines within dis.c, wcs.c, wcshdr.c, and wcspih.l, + increased the size of various sprintf() output buffers to avert + -Wformat-overflow warnings from gcc 8.1.0 (with -DFORTIFY_SOURCE=2). + Reported by Simon Conseil. + + Also fixed other warnings in these routines from gcc 8.1.0 + relating to -Wcast-function-type, -Wmaybe-uninitialized, and + -Wunused-parameter. + + - In wcsutrn.l (the units alias translator used by wcsfix), recognise + 'Deg', 'Degree', and 'Degrees' as aliases for 'deg'. Rogue header + reported by Jim Lewis. + + - Added a note to the prologue of spx.h explaining WCSLIB's use of + Cox's air-to-vacuum transformation equation rather than the IUGG + relation cited in WCS Paper III. Noted by Benjamin Alan Weaver. + + - In the test suite, avert nuisance compiler warnings in tdis1. + Made tsphdpa more robust in handling user coordinate input. + +* PGSBOX + + - In pgwcsl_(), avert nuisance warnings from gcc 8.1.0 relating to + unused parameters (-Wunused-parameter). Also averted nuisance + compiler warnings in cpgtest. + +* Utilities + + - wcsware was not reading the -TAB table from the FITS file for + alternate descriptions, bug reported by Chiara Marmo. Nor was + wcsfix() ever invoked for them. + + Made it more robust in handling user input of coordinates for the + -x and -w options. + + - Fixed compiler warnings from gcc 8.1.0 in HPXcvt + (-Wmaybe-uninitialized), and wcsgrid (-Wformat-overflow). + +* Installation + + - Amended configure.ac to allow cross-compilation, and also updated + the auxiliary configure scripts in the config/ directory. Patch + supplied by Mosè Giordano. + + +WCSLIB version 5.18 (2018/01/10) +-------------------------------- + +* C library + + - New routines introduced to preclude altering the global variables + NPVMAX, NPSMAX, and NDPMAX, which determine how much memory to + allocate for storing PVi_ma, PSi_ma, DPja, and DQia keyvalues: + wcsinit(), lininit(), lindist(), and disinit(). These are now used + by various WCSLIB routines, such as the header parsers, which + previously temporarily altered the global variables, thus posing a + thread hazard. Testing and feedback on thread-safety issues, with + patches, from Rodrigo Tobar Carrizo. + + - The Flex scanners, fitshdr(), wcsbth(), wcspih(), wcsulexe(), and + wcsutrne(), have been rewritten as thin wrappers (with the same API) + over scanners that were modified (with changed API) as required to + use Flex's "reentrant" option. Consequently, they are now reentrant + and should be thread-safe. That also passes through to the + deprecated wrappers, wcsulex() and wcsutrn(). + + - Fixed memory leaks in lindist() and lincpy() uncovered by valgrind. + + - Test programs tfitshdr, tpih1, tpih2, and ttab3 are now careful to + free all allocated memory before exit to defeat spurious reports of + memory leaks by valgrind. + +* Fortran wrappers + + - New wrappers for wcsinit(), lininit(), lindist(), and disinit(). + +* Installation + + - configure now recognises the value of ARFLAGS obtained from the + environment. + +* User manual + + - Updates and amendments in line with the above changes. + + - Documentation generation moved to doxygen 1.8.14 (was 1.8.13). + + +WCSLIB version 5.17 (2017/09/18) +-------------------------------- + +* C library + + - Fixed a memory leak in wcspih(). Reported by Pim Schellart. + + - Fixed compiler warnings about comparison between signed and unsigned + integers in tab.c (Pey-Lian Lim). Also fixed warnings in other + functions about unused parameters. + +* Fortran wrappers + + - Fixed compiler warnings about comparison between signed and unsigned + integers in several routines. + +* PGSBOX + + - Fixed a compiler warning about comparison between signed and + unsigned ints. + +* Installation + + - Removed setgid permission on installation directories (for Fedora + Linux, reported by Sergio Pascual). + +* User manual + + - Minor updates and amendments. + + - Documentation generation moved to doxygen 1.8.13 (was 1.8.10). + + +WCSLIB version 5.16 (2017/01/15) +-------------------------------- + +* C library + + - Bug fix in spcfix() for the previous change. Reported separately by + Julian Taylor & Peter Williams. + + +WCSLIB version 5.15 (2016/04/05) +-------------------------------- + +* C library + + - Bug fix in wcsulex.l for the previous change. Reported, and fix + supplied by Tammo Jan Dijkema. + + - In spcfix(), report the value of VELREF if ctype is translated from + the AIPS convention. + + +WCSLIB version 5.14 (2016/02/07) +-------------------------------- + +* C library + + - In wcsulex.l and wcsutrn.l, applied a workaround for a memory leak + introduced by a change (bug) in flex in Aug/2012. Reported, and + fix supplied by Thomas Robitaille and Erik Bray. + +* Installation + + - In MacOSX, create symlink libwcs.dylib pointing to the dynamic + library so that WCSLIB is linked dynamically by default. Requested + by Paul Price. + + +WCSLIB version 5.13 (2016/01/26) +-------------------------------- + +* C library + + - In wcshdo(), provide floating-point format control via the 'ctrl' + argument (formerly 'relax'). + + - In wcspih(), PLATEID by itself is no longer sufficient to trigger a + DSS translation (reported by James Allen). + + - In unitfix(), ensure that the message buffer cannot be overrun, e.g. + by blank-padded unit strings (reported by Vishal Kasliwal). + + +WCSLIB version 5.12 (2015/11/15) +-------------------------------- + +* C library + + - Bug fix in wcshdo() for CRVALia precision reported by Mihai Cara. + + +WCSLIB version 5.11 (2015/10/18) +-------------------------------- + +* C library + + - Bug fixes in wcspih.l and dis.c for WAT distortions provided by + Ole Streicher. + + +WCSLIB version 5.10 (2015/10/09) +-------------------------------- + +* C library + + - In wcshdo(), allow output of floating point keyvalues to 15 + significant digits (was 14), mainly for astropy. + + - In wcspih(), allow unrecognised WAT projection types (tan, etc.) to + pass without returning an error. Reported by Michael Droettboom. + Also fixed a bug triggered by SIP keywords in unconventional order, + reported by Colin Slater, LSST. + + +WCSLIB version 5.9 (2015/07/21) +------------------------------- + +* C library + + - In disx2p(), make proper allowance for the possibility that the TPD + and SIP forward and inverse distortion polynomials may not be of the + same degree, reported by Martin Kuemmel. + + - Fix-ups in wcshdo() reported by Michael Droettboom, and several + tidy-ups as well. + + +WCSLIB version 5.8 (2015/07/08) +------------------------------- + +* C library + + - DSS (Digitized Sky Survey) coordinates are now handled via TPD, as + are the TNX and ZPX "projections". New test script tdis3 and + headers DSS.keyrec, TNX.keyrec, and ZPX.keyrec. + + - New function dishdo() can be used to set a flag that causes + wcshdo() to write headers in the form of the distortion function + used internally (usually TPD). + + - Added the capability, via DPja.DOCORR, for a distortion function to + to compute an additive correction to the undistorted coordinates + (rather than computing the distorted coordinates themselves). + + - Added auxiliary variables to TPD via DPja.AUX.jhat.COEFF.m. + + - Bug fix in wcshdo() for TPV, diagnosed by Michael Droettboom. + +* Fortran wrappers + + - Wrapper for dishdo(). + + +WCSLIB version 5.7 (2015/06/29) +------------------------------- + +* C library + + - Extended wcssub() to handle distortions (and thus wcscopy() also). + This required axis mapping to be enabled for SIP distortions within + WCSLIB. + + - wcshdo() now handles all distortions currently supported by WCSLIB: + SIP, TPV, TPD, and Polynomial. + + - Bug fixes in sphx2s() and sphs2x() for non-unit vector strides for + special-case rotations. + + - In wcsset(), modify wcsprm::ctype after translating TPV so that + subsequent calls won't try to re-translate it, the PVi_ma records + by then having been erased. Reported by Michael Droettboom. Also, + restore NDPMAX after translating TPV. + + - Bug fixes in discpy(), disprt(), disset(), and disx2p(). + + - Added disperr(), prjperr(), spcperr(), spxperr(), and tabperr() to + complete the set and make reporting errors slightly more convenient. + +* Utilities + + - wcsware has a new option, -o, to print the wcsprm struct in the form + of a FITS header using wcshdo(). Also, the -a option has been + extended to allow a 0-relative numeric index for selecting an + alternate WCS, where the alternates are sequenced alphabetically + (without gaps) following the primary representation. + +* User manual + + - Documentation generation moved to doxygen 1.8.10 (was 1.8.9.1). + + +WCSLIB version 5.6 (2015/06/14) +------------------------------- + +* C library + + - Bug fixes in wcspih() and sipset() to account for the fact that the + independent variables of the SIP polynomial are pixel coordinate + offsets from CRPIXja, not pixel coordinates per se. Diagnosed by + Michael Droettboom. + + Validated SIP and TPV handling by comparing the output of + 'wcsware -x' with that of wcstools 'xy2sky -d -n6' using astropy's + SIP test headers, and separate SIP and TPV headers originating from + the Palomar Transient Factory provided by David Shupe. + + Changed SIP.keyrec so that CRPIX1 and CRPIX2 differ in value, + thereby making tests sensitive to any confusion between the two. + + +WCSLIB version 5.5 (2015/05/05) +------------------------------- + +* C library + + - Bug fixes in wcspih.l for headers with multiple distortions, and for + distortion parameter look-alike keywords. + + - Bug fix in sipset() uncovered by valgrind. + + +WCSLIB version 5.4.1 (2015/05/01) +--------------------------------- + +* C library + + - Added a fairly lengthy section to the prologue of dis.h describing + the Paper IV keywords and the distortion functions currently + implemented. + +* User manual + + - Added a new section on WCSLIB version numbers. + + +WCSLIB version 5.4 (2015/04/21) +------------------------------- + +* C library + + - Further work on distortions: wcspih() now parses Paper IV distortion + keywords (CPDISja, CQDISia, DPja, DQia, etc.), thus handling record- + valued keywords. SIP keywords are also parsed and translated into + Paper IV keywords. + + - TPV, SIP, and whereever possible, the general Polynomial distortion + function of Paper IV are now implemented by the Template Polynomial + Distortion (TPD), that being a superset of TPV and SIP. TPD, which + can also handle 1D distortions and be used for inversions, is also + supported as a separate distortion type defined by Paper IV + keywords. TPD efficiently handles 1D distortions and distortions + without radial terms. + + - Specialized inverse distortions, such as defined by SIP, are + implemented by TPD and recognized by disx2p(), which uses them to + compute the initial approximation of its more precise iterative + solution. + + - Generalized tdis1.c so that it can do closure tests for SIP headers, + and added a SIP test header. + + +WCSLIB version 5.3.1 (2015/04/21) +--------------------------------- + +* C library + + - Bug fix in test program tdis1.c reported by Martin Kuemmel. + + +WCSLIB version 5.3 (2015/04/21) +------------------------------- + +First public release of WCSLIB 5.x with distortions capability. + +* C library + + - Changed disprm::dtype from char[16] to char[72] for reasons relating + to header parsing. + + - More armour plating for disset() and friends. They also use new + utility functions wcsutil_dpkey_int() and wcsutil_dpkey_double() to + extract numeric values from a dpkey struct. This ensures their + independence of the data type, the appropriate reporting of dpkey + values by disprt(), and (eventually) the appropriate writing of DPja + and DQia keyvalues by wcshdo(). + + - Augmented the usage comments for dpfill() to explain how numeric + values in a dpkey struct are handled. + +* Utilities + + - wcsware now uses wcserr to provide a backtrace on errors. Also + fixed a couple of minor annoyances relating to alternate + representations. + + +WCSLIB version 5.2 beta release (2015/04/15) +-------------------------------------------- + +* C library + + - Further development of disprm and related functions to implement + the FITS keywords for distortions introduced in WCS Paper IV, thus + changing disprm's ABI once again. + + disprm's model is now similar to wcsprm's handling of PVi_ma and + PSi_ma, where the parsed keyrecords are loaded into a set of pvcard + and pscard structs and wcsset() does the analysis. For disprm, the + parsed DPja or DQia keyrecords are loaded into a set of dpkey + structs for disset() to analyse. + + - New function dpfill() aids in filling a dpkey struct. Function + disparms() has been removed. It was no longer needed as + disprm::parms[][] is now a "returned" member of the struct. + + - Implementation of the general Polynomial distortion function defined + in Sect. 3.1 of WCS Paper IV. The polynomial is defined in terms of + Paper IV keywords. + + - Bug fixes in diswarp() and linwarp() reported by + Michael Droettboom. + + - Test program tdis1 now tests a TPV header for closure in two ways: + directly as a specialist TPV distortion (as before), then by + translating it into a general polynomial distortion. It then also + tests that the TPV and polynomial distortions produce the same + results. + +* Fortran wrappers + + - Changes to the wrappers reflecting changes to disprm. + + - Bug fixes in fitshdr_f.c, and test programs tdis1.f, tfitshdr.f, + twcsfix.f, and twcs.f. All reported and/or fixed by Ole Streicher. + + +WCSLIB version 5.1 beta release (2015/04/07) +-------------------------------------------- + +* C library + + - Distortions-related bug fixes to linset(), linp2x(), and linx2p(). + + - New functions diswarp() and linwarp() compute statistics of the + distortion functions over a specified domain. Changed tdis1.c to + test them. + + - Changes to disprm (so changed ABI). + +* Fortran wrappers + + - Wrappers for diswarp() and linwarp(). + + +WCSLIB version 5.0 beta release (2015/04/05) +-------------------------------------------- + +* C library + + - Implemented the framework of WCS Paper IV (the draft distortions + proposal) based on a new struct, disprm, and suite of routines with + header dis.h: disini(), disalloc(), discpy(), disfree(), disprt(), + disset(), disp2x(), and disx2p(). New test program tdis1. + + Consequent changes to the linprm struct have altered its ABI, thus + necessitating an increment in the WCSLIB major verion number. + + - wcsset() now recognises the "TPV" projection proposed in an early + draft of WCS Paper II, and translates it into a disprm distortion - + by request of Octavi Fors. Additionally, it recognises "TPU" as + equivalent to "TPV" but using a prior distortion (coming before the + linear transformation matrix) rather than sequent (coming after it). + + - In wcspih() and wcsbth(), added relaxation flags to allow PC0i_0ja, + PV0j_0ma, and PS0j_0ma (i.e. with leading zeroes on the index). + + - Added wcslib_version() to return the WCSLIB version number, as + suggested by Ole Streicher. + + - Fixed problems uncovered by valgrind in prjbchk() (reported by + Ger van Diepen), sphx2s(), sphx2s(), spcspxe(), spcxpse(), tabini(), + and wcshdo_util(). + + - Tidied up error reporting, particularly relating to translating + status returns from lower-level functions. New functions linperr() + and celperr() report error messages from the structs they contain + in addition to their own. + + - Changed output formatting of floating point values in linprt(), + celprt(), prjprt(), spcprt(), tabprt(), and wcsprt(). Updated the + test output reference files for tbth1, tpih1, twcsfix, twcssub, and + twcstab to suit. + + - Tidied up several of the test programs, mostly to free memory + explicitly before exit so that valgrind doesn't report (non-)leaks. + +* Fortran wrappers + + - Wrappers for the new distortion functions. New test programs + tdis1.f and tdis2.f. + + - Updates following changes to wcspih() and wcsbth(). + + - Added wrappers for linperr() and celperr(). Also added prjperr_(), + spcperr_(), and tabperr_() as convenient wrappers on wcserr_prt(). + + - Wrapper for wcslib_version(). + +* Utilities + + - Added a "lint" function to wcsware to check a FITS header for + conformance to the WCS standard. New test program twcslint. + +* PGSBOX + + - In PGCRLB, fixed an incorrect use of the MOD intrinsic reported by + 'gfortran -std=f95' via Jean-Baptiste Marquette. + + +WCSLIB version 4.25.1 (2015/01/05) +---------------------------------- + +* C library + + - Updated the test output reference files for tpih1, tbth1, twcsfix, + and twcstab to account for the change to wcsset() in release 4.25. + +* Fortran wrappers + + - Updated the test output reference files for tpih1, twcsfix, and + twcstab to account for the change to wcsset() in release 4.25. + +* User manual + + - Documentation generation moved to doxygen 1.8.9.1 (was 1.8.8). + + +WCSLIB version 4.25 (2014/12/15) +---------------------------------- + +* C library + + - wcsset() now supplies default values for the auxiliary keywords + EQUINOXa and RADESYSa if not present in the FITS header. + + +WCSLIB version 4.24 (2014/09/19) +---------------------------------- + +* C library + + - Changed API to wcscompare() to allow a tolerance to be specified for + floating-point comparisons. Contributed by Michael Droettboom. + +* Fortran wrappers + + Track the change to wcscompare(). + +* User manual + + - Documentation generation moved to doxygen 1.8.8 (was 1.8.4). + + - Added mention of WCSLIB in "homebrew-science" (MacOSX) in the + section on other packages. + + +WCSLIB version 4.23 (2014/05/11) +-------------------------------- + +* C library + + - New function wcscompare() compares two wcsprm structs for equality + with varying degrees of strictness. Test program twcscompare. + Contributed by Michael Droettboom. + + - In wcssub(), fixed a bug uncovered by valgrind arising from + allocation of insufficient memory for temporaries when a new axis + is added. Reported by Michael Droettboom. + + - In wcshdo(), don't write RESTFRQ or RESTWAV if zero. + + Also, to distinguish them from integer keyvalues, floating- + point values will now always be written with an exponent or + fractional part, ".0" being appended if necessary to achieve this. + Suggested by Peter Weilbacher. + + - Fixed the '-h' option in twcshdr. + +* Fortran wrappers + + - Wrapper for wcscompare(). + + +WCSLIB version 4.22 (2014/04/13) +-------------------------------- + +* C library + + - In pcox2s() and pcos2x(), use alternative projection equations for + greater numerical precision near theta == 0. In cops2x(), return + an exact result for theta at the poles. Relaxed the tolerance for + bounds checking a little in sflx2s(). + + +WCSLIB version 4.21 (2014/03/24) +-------------------------------- + +* C library + + - New function prjbchk() performs bounds checking on native spherical + coordinates. It is invoked automatically by the deprojection (x2s) + routines if prjprm::bounds&4 is set. Documented the new bounds + checking implemented by prjbchk() in the prologue entry for + wcsbchk(). Improvements to tprj1 to test the vector API of prjx2s() + and to deal better with out-of-bounds native coordinates returned by + it. + + - Bug fixes in the projection routines: in hpxx2s() relating to bounds + checking, bug introduced at 4.20, reported by Michael Droettboom; in + parx2s() and molx2s() relating to setting the stat vector; in + hpxx2s() relating to implementation of the vector API; and in + xphx2s() relating to setting an out-of-bounds value of phi. + +* Fortran wrappers + + - Wrapper for prjbchk(). Modified tprj1.f to track changes to the C + version. + + +WCSLIB version 4.20 (2013/12/18) +-------------------------------- + +* C library + + - New function, wcsbchk(), for controlling bounds checking in the + projection routines. + + - Enable bounds checking in the pixel-to-sky (x2s) direction for HPX + and XPH if prjprm::bounds&2. Tightened bounds checking in xphx2s(). + prjini() now sets prjprm::bounds = 3 to enable all bounds checking + by default. + + - Fixed an incorrect error message in wcs_units(). Also report + potentially unsafe units translations in unitfix() - both + contributed by Michael Droettboom. + +* Fortran wrappers + + - Wrapper for wcsbchk(). + +* PGSBOX + + - Fixed a few nuisance warnings from gfortran 4.7.2 relating to + implicit type conversions in pgsbox.f. + +* User manual + + - Added mention of wcsjs (Javascript) in the section on other + packages. + + +WCSLIB version 4.19 (2013/09/30) +-------------------------------- + +* C library + + - Bug fix in wcshdo(), uncovered by cppcheck and reported by David + Binderman. Fixed additional minor inconsistencies in hpxx2s(), + wcsprintf(), and wcsfprintf() reported by cppcheck. + + - Minor fix to twcstab reported by cppcheck. + + - Bug fix in wcssub() for handling (non-standard) PROJPn keywords + (uncovered by valgrind, reported by Paul Price). + + +WCSLIB version 4.18 (2013/07/13) +-------------------------------- + +* C library + + - Implemented the butterfly projection (XPH), being the polar form of + the HEALPix projection with (H,K) = (4,3). Augmented tprj1.c and + tprj2.c to suit. + + - Bug fix in celfix() when translating GLS to SFL with non-zero + reference point. + +* Fortran wrappers + + - Wrappers for the XPH projection functions and corresponding + modifications to the test programs. + + - Fixed a few inconsequential warnings from gfortran 4.7.2 relating + to implicit type conversions in the test programs. + +* Utilities + + - In HPXcvt, fixed incorrect axis scaling (CDELT1 and CDELT2) in the + XPH header, and set the PCi_ja matrix in the HPX header to a pure + 45 degree rotation with appropriate adjustment of CDELT1 and CDELT2 + (matching XPH). Also set LONPOLE to 180 degree in the XPH header + with adjustment of CRVAL1 as recommended in the errata. These + changes prompted by Paddy Leahy. Also, modified the FITS header + comment for XPH - it is no longer "experimental", and accept the + '-x' option (i.e. without qualification) as equivalent to '-xn'. + +* User manual + + - Documentation generation moved to doxygen 1.8.4 (was 1.5.6). + + +WCSLIB version 4.17 (2013/01/29) +-------------------------------- + +* C library + + - Added wcsfprintf() to wcsprint.h. Now used in wcsbth() and wcspih() + to allow diagnostic output to be redirected. Changes provided by + Michael Droettboom. + + +WCSLIB version 4.16 (2012/11/07) +-------------------------------- + +* C library + + - When wcspih() constructs a default coordinate representation it will + give it the special name "DEFAULTS", and will not report "Found one + coordinate representation" (if reporting is enabled). + +* Utilities + + - wcsware has a new option, -P, which does the same as -p except that + it won't print a wcsprm struct with the name "DEFAULTS". + + +WCSLIB version 4.15 (2012/09/26) +-------------------------------- + +* C library + + - Bug fixes in spctype(), spcspxe(), spcxpse, and spctrne() for + propagating an error status correctly from lower-level routines. + Amendments to the prologues of these routines. Reported by + Hans Terlouw. + + - Similarly for wcsunitse(), wcsulexe(), and wcsutrne(). + +* PGSBOX + + - Bug fix in PGSBOX for handling cycles in angle when both world + coordinate elements are angular. Reported by Thomas Robitaille. + + +WCSLIB version 4.14 (2012/07/13) +-------------------------------- + +* C library + + - Problems were caused for fitshdr(), wcsbth(), wcspih(), wcsulex(), + datfix() and wcshdo(), by locales such as "fr_FR" in which commas + are used to delimit the decimal part of floating point numbers. + In particular, these locales adversely affect the behaviour of + sscanf() and sprintf() when reading and writing FITS header + keyvalues. Thread-safe fixes provided by Michael Droettboom. + + - Applied astropy patches from Michael Droettboom: attend to compiler + warnings in prj.c, spc.c, tab.c, and wcsutil.c, including those for + MS-Windows. + + +WCSLIB version 4.13.4 (2012/04/02) +---------------------------------- + +* Installation + + - Relaxed the closure tolerance slightly in tlog.f as for tlog.c + previously. + + +WCSLIB version 4.13.3 (2012/03/26) +---------------------------------- + +* Installation + + - Relaxed the closure tolerance slightly in tlog.c for gcc 4.6.3 on + Ubuntu 12.04 (reported by Ole Streicher). + + +WCSLIB version 4.13.2 (2012/03/21) +---------------------------------- + +* Installation + + - Changes to configure.ac and the GNUmakefiles to put '-lm' strictly + in the correct sequence when producing the sharable library + (reported by Ole Streicher). + + +WCSLIB version 4.13.1 (2012/03/15) +---------------------------------- + +* C library + + - Workaround in wcserr_set() for an unfortunate compiler segv from + gcc 4.2.1 in MacOSX 10.7. + + +WCSLIB version 4.13 (2012/03/14) +-------------------------------- + +* C library + + - Allow naxis == 0 in wcsini() and linini() for a degenerate + coordinate system as may be produced by wcssub(). In wcssub(), + ensure that wcsini() is called for coordinate systems with + naxis == 0. In wcssptr(), call spcfree() before spcini() to plug a + memory leak. + + +WCSLIB version 4.12 (2012/02/29) +-------------------------------- + +* C library + + - In spctrne(), guard against restfrq == restwav == 0.0 when + translating between two velocity-characteristic types, or between + two wave-characteristic types (the translation is independent of + restfrq and restwav, but a dummy value is needed for intermediate + calculations). + + +WCSLIB version 4.11 (2012/02/21) +-------------------------------- + +* C library + + - Bug fix in spcset() for handling simple linear spectral axes. + +* Fortran wrappers + + - Bug fix in spctrne_() for handling ctypeS2. + + +WCSLIB version 4.10 (2012/02/06) +-------------------------------- + +* C library + + - datfix() and spcfix() now return informative messages when dates and + AIPS-convention spectral axes are translated (changes contributed by + Michael Droettboom). spcaips() now returns an error status for + invalid values of VELREF. + + - wcssub() has been augmented with the ability to add new axes onto a + wcsprm struct. + + +WCSLIB version 4.9 (2012/01/24) +------------------------------- + +* C library + + - Fixes to wcsfixi() for collecting the messages properly in the info + array (from Michael Droettboom). + + - Handle certain malformed date strings more gracefully in datfix(). + + - Make informative messages printed by wcserr_prt() a bit more + informative. + + +WCSLIB version 4.8.4 (2011/12/05) +--------------------------------- + +* C library + + - Fixed the pseudo-random number generator in twcstab.c - gcc 4.6 with + '-O2' baulked at testing for signed integer overflow. + +* Installation + + - In configure.ac, the Fortran compiler's libraries must be added to + the link list when checking for the PGPLOT libraries since gcc is + driving the linker. Likewise in C/GNUmakefile when linking test + programs that use PGPLOT. + + - Use 'make CHECK=nopgplot check' to run only the non-graphical tests + (even if PGPLOT is available). + + - After compiling and running the tests, 'make check' now summarizes + the non-graphical test results and stops if any failed. + + +WCSLIB version 4.8.3 (2011/11/17) +--------------------------------- + +* C library + + - Minor generalization of the wcserr diagnostics to allow the return + of informative messages, which are associated with negative status + values. wcserr_prt() will now recognize and print them as such. + Added wcserr_clear() to reset (clear) a wcserr struct. + + - Modified unitfix() to return an informative message if a units + alias is applied, and wcsfixi() to allow such messages to be + propagated through the info array (from Michael Droettboom). + + - Modified twcsfix.c to use wcserr diagnostics, in particular to + report units alias translations. + +* Fortran wrappers + + - In wcsfix_(), interpret *naxis == 0 as meaning naxis == 0x0, thus + causing cylfix() to be skipped. + + - Modified twcsfix.f to reflect changes made to twcsfix.c. + + +WCSLIB version 4.8.2 (2011/10/04) +--------------------------------- + +* Installation + + - Changes for Debian package generation contributed by Ole Streicher: + - Corrections to 'configure' reported by 'lintian'. + - Generate man pages for the utility programs and install them. + + +WCSLIB version 4.8.1 (2011/09/19) +--------------------------------- + +* Installation + + - Set SONAME in the sharable library in accordance with + tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html + (reported by Ole Streicher, Debian package maintainer). The + sharable library will again be installed with full release number + and with a symbolic link from SONAME pointing to it. If defined, + SHRLN will point to SONAME. + + +WCSLIB version 4.8 (2011/08/15) +------------------------------- + +* C library + + - New error diagnostics mechanism contributed by Michael Droettboom: + + Most functions that return a numeric status (error) code now also + write a detailed error message to a wcserr struct attached to the + passed-in *prm struct. See wcserr.h for more information. + + Functions that didn't have a *prm struct as an argument have no + direct way to return an error message. Therefore, these functions + now have duplicate versions with the suffix "e" that take an + additional "struct wcserr *" parameter. These functions are: + + spcspx() -> spcspxe() + spctrn() -> spctrne() + spctyp() -> spctype() + spcxps() -> spcxpse() + wcsulex() -> wcsulexe() + wcsunits() -> wcsunitse() + wcsutrn() -> wcsutrne() + + A new function wcsfixi() was added which is identical to wcsfix() + but in addition stores all of the detailed textual messages about + the fixes that were performed. + + - In wcssub(), ensure that wcstab->m_tab has been initialized + before trying to free it on status return 12 or 13 (reported by + Hans Terlow). + + - Bug fixes: + - In sphx2s() and sphs2x() for the case where |eul[1]| = 180.0. + - For parsing AIPS-convention VELREF in wcsbth(). + - In spcaips() for translating AIPS-convention CTYPEia without + Doppler frame. + + - Non-graphical test programs now simply report "PASS" if they satisfy + the reporting tolerance for closure residuals, etc. Their full + output is reported otherwise. Run 'make MODE=interactive check' to + revert to the previous behaviour of reporting the full output for + tests that succeed. + + - Eliminated compiler warnings about type-punning of pointer-to- + function. + +* Fortran wrappers + + Extensive modifications to track the new error handling mechanism + in the C library. + +* Installation + + - configure now prefers gfortran over g77 if available. + + - Don't rely on "." being in the PATH if config.status needs to be + run in the pgsbox and utils makefile (reported by Peter Teuben). + + +WCSLIB version 4.7 (2011/02/07) +------------------------------- + +* C library + + - Bug fix in celset() for interpreting LATPOLEa when LONPOLEa = phi0. + Crept in at version 4.4. + + - Fixed the bounds test on y in hpxx2s() (HEALPix projection) for + unconventional values of H and K. In hpxx2s() and hpxs2x(), + corrected the offset of the southern polar half-facets for + even K. In hpxs2x(), put the phi = 180 meridian in the expected + place. + + - Bug fixes in tabx2s() and tabs2x() for default indexes (reported + by David Berry). In tabs2x(), if no solution is found then do + minor extrapolation past the ends of each row (1-D case only). + Sped up tabs2x() by about 50%. + + - New functions wcsprintf(), wcsprintf_set(), and wcsprintf_buf(), + declared in wcsprintf.h, provide control over the disposition of + output from celprt(), linprt(), prjprt(), spcprt(), tabprt(), and + wcsprt() routines. Prompted by Michael Droettboom, with an initial + implementation. + +* Fortran wrappers + + - In the various test programs, used EQUIVALENCEs to ensure that the + CEL, LIN, PRJ, etc. arrays are aligned on a DOUBLE PRECISION + boundary. + +* PGSBOX + + - Bug fix for the case where NG1 == 0 and GRID1(0) < 0, and likewise + for NG2 and GRID2. + +* Utilities + + - In wcsware, added a '-w' option to convert world coordinates + obtained from stdin to pixel coordinates using wcss2p(). Allow + multiple sets of input coordinates with the '-x' and '-w' options + and report the value of the intermediate world coordinates. + +* User manual + + - Fixed list formatting for function return values < 0 or > 9. + + - New section for wcsprintf() and related routines. + +* Installation + + - Changes prompted by Sébastien Fabbro for the Gentoo Linux package: + a) autoconf updates, + b) respect LDFLAGS when building the shared library, + c) install documentation, + d) recognise DESTDIR for doing a staged installation. + + - As of this release, the minor WCSLIB version number (second field) + will be incremented if and only if a change is made that affects the + library itself, not the documentation or utilities. The version + number on the installed libraries and header files will omit the + patch number (third field). + + +WCSLIB version 4.6.3 (2010/11/24) +--------------------------------- + +* C library + + - Bug fix in wcsbth() for handling the inheritance of image header + keywords (uncovered by valgrind, reported by Jim Lewis). + + +WCSLIB version 4.6.2 (2010/11/22) +--------------------------------- + +* C library + + - Fixed a memory leak in wcsbth.l (reported by Jim Lewis). + + +WCSLIB version 4.6.1 (2010/11/18) +--------------------------------- + +* Fortran wrappers + + - Fixed typos in cel_f.c, celget[cdi] -> celgt[cdi]. + + +WCSLIB version 4.6 (2010/11/16) +------------------------------- + +* C library + + - In wcsulex.l and wcsutrn.l, stdlib.h must be included explicitly + before the redefinition of exit() - most versions of flex do include + it upfront but some don't (reported by Peter Williams). + +* Fortran wrappers + + - Changes intended to avert nuisance compiler warnings that could + potentially obscure warnings indicative of a genuine problem: + + - To stop messages about unused variables when the relevant compiler + option is set, e.g. 'g77 -Wunused', the various *_ERRMSG arrays + defined in the Fortran include files and (formerly) initialized + therein via DATA statements, e.g. PRJ_ERRMSG in prj.inc, have now + been placed into COMMON blocks with names such as PRJ_DATA, and + are initialized via DATA statements in BLOCK DATA subprograms + defined in separate files, e.g. prj_data.f. + + - To stop messages about subroutines being invoked with inconsistent + argument lists if the relevant compiler option is not set, e.g. + 'g77 -Wno-globals', the C wrapper functions that take 'void *' + arguments now have separate forms for INTEGER, DOUBLE PRECISION, + and CHARACTER arguments that simply invoke the generic function. + Application code must be modified to take advantage of this. + +* User manual + + - In the section on the Fortran wrappers in the manual, warn about the + need for the INTEGER array holding a data structure to be aligned on + a DOUBLE PRECISION boundary. + + +WCSLIB version 4.5.6 (2010/10/28) +--------------------------------- + +* Installation + + - Fixed the search for CFITSIO and PGPLOT library and include + directories. + + +WCSLIB version 4.5.5 (2010/10/14) +--------------------------------- + +* Installation + + - Build the PGSBOX sharable library. + + +WCSLIB version 4.5.4 (2010/09/28) +--------------------------------- + +* C library + + - In wcshdo(), according to the FITS standard, "Letters in the + exponential form ('E' or 'D') shall be upper case" (reported by + Michael Droettboom). + + +WCSLIB version 4.5.3 (2010/09/23) +--------------------------------- + +* Utilities + + - Various improvements to wcsgrid: correct the scaling set via + cpgwnad(); label angles other than RA,Dec in decimal degrees; + draw the projection boundary for projections other than zenithals. + + +WCSLIB version 4.5.2 (2010/09/23) +--------------------------------- + +* C library + + - Fixed the translation of GLS to SFL in wcsset() and celfix() when + the reference longitude is non-zero - it introduces an offset in + longitude in the normal way. (This undoes part of the change + applied in version 4.4.) + + +WCSLIB version 4.5.1 (2010/08/12) +--------------------------------- + +* C library + + - New utility function, sphpad(), computes the coordinates of points + offset by given angular distances and position angles from a given + point on the sky (complementary to sphdpa()). + +* Fortran wrappers + + - New wrapper function: + - SPHPAD for sphpad(). + + +WCSLIB version 4.5 (2010/07/16) +------------------------------- + +* C library + + - Fixed the interpretation of VELREF when translating AIPS-convention + spectral types. Such translation is now handled by a new special- + purpose function, spcaips(). The wcsprm struct has been augmented + with an entry for velref which is filled by wcspih() and wcsbth(). + Previously, selection by VELREF of the radio or optical velocity + convention for type VELO was not properly handled. + +* Fortran wrappers + + - New wrapper function: + - SPCAIPS for spcaips(). + + - Changed spc.inc, spc_f.c, wcs.inc and wcs_f.c to track VELREF + changes. + + - Declared functions external in the include files to avoid compiler + warnings about unused variables (if the particular option is set). + +* Utilities + + - Added a '-q' option to fitshdr to quit after a specified number + of HDUs. + + +WCSLIB version 4.4.4 (2009/09/14) +--------------------------------- + +* Installation + + - Added more configure options for controlling the build: + --disable-fortran, --disable-utils, --without-cfitsio, and + --without-pgplot. + + +WCSLIB version 4.4.3 (2009/09/03) +--------------------------------- + +* C library + + - Set wave number units to "/m" in spctyp(), was "1/m" which is not + strictly legal and wasn't handled by wcsulex() (reported by + Hans Terlow). Also fixed a number of units specifications in the + prologue of spx.h to conform with Paper I usage. + + - In wcsulex(), allow unit strings like "1/m" in addition to "/m", + provided that the superfluous "1" is the first non-blank character + in the expression, or parenthesised sub-expression. + + - In wcssptr(), ensure that i is always reset if given < 0. + +* User manual + + - Augmented the list of FITS WCS and related software in the manual. + + +WCSLIB version 4.4.2 (2009/08/13) +--------------------------------- + +* C library + + - In sphx2s() and sphs2x(), handle the case where |eul[1]| = 180.0 + separately for speed and accuracy. This change also fixes a rare + and subtle bug in cels2x() that occurs when celprm::isolat is set + and the magnitude of the first latitude in the lat[] vector exceeds + 90 deg (reported by Hans Terlouw). + +* Installation + + - Fix relating to creation of symlinks when installing the libraries. + + +WCSLIB version 4.4.1 (2009/08/11) +--------------------------------- + +* Installation + + - Fixes for installation of the CHANGES file and for the creation of a + symbolic link for the sharable library if one already exists. + + +WCSLIB version 4.4 (2009/08/10) +------------------------------- + +* C library + + - Creation of WCSLIB user manual from the header file prologues using + a special-purpose parser, doxextr, and sed scripts to generate input + for doxygen. This required minor formatting changes to all + prologues plus miscellaneous changes such as naming of arguments in + function prototypes. + + - Bug fix in wcsset() that affected handling of PROJPn (deprecated) + and PVi_ma attached to the longitude (not latitude) axis. Guard + against long strings when copying the projection code. In + wcs_types(), allow for early Paper IV distortion codes (e.g. + "RA---TAN-SIP") when parsing CTYPEia. + + - Use sincos() whereever possible for a ~15% speedup (patches for + cel.c, prj.c and sph.c supplied by Michael Droettboom). configure + checks for, and uses it automatically if available. + + - Fixed the translation of GLS to SFL in wcsset() and celfix() when + the reference longitude and latitude are non-zero. (In the AIPS + convention, this simply translates the reference point, i.e. the map + as a whole, to those coordinates without creating an oblique grid.) + + - Bug fix in prjoff(), a utility function used by the prj routines. + It forces (x,y) = (0,0) at (phi_0,theta_0) when the latter are set + by PVi_[012]a attached to the longitude (not latitude) axis. Rarely + used in practice. + + - New utility function, sphdpa(), computes the distance and position + angle from a point on the sphere to a set of field points. + + - In sphx2s() and sphx2s(), handle a simple change in origin of + longitude using a short-cut calculation for speed and accuracy. + Similarly in celset(), check whether phip == phi0 when computing + latp and if so use a short-cut that ensures latp == 90.0 (exactly) + if lat0 == theta0. The resulting spherical rotation then becomes a + simple change in origin of longitude. In particular, these changes + should assist PGSBOX in drawing grid lines of +/-180 longitude, to + prevent flip-flopping between one and the other. + + - wcsbth() & wcspih(): resolved an inconsistency between the + documentation and code by renamimg WCSHDR_VSOURCEa as + WCSHDR_VSOURCE. + + - Flex code: moved declaration of helper functions out of global + scope. + + - Fixed the call to wcss2p() in twcshdr (in a section of code not + usually exercised). + +* Fortran wrappers + + - New wrapper functions: + - WCSBTH for wcsbth(), + - WCSBDX for wcsbdx(), + - CDFIX for cdfix(), + - SPHDPA for sphdpa(). + + - Updated WCSLEN (in wcs.inc) and added WCS_COLAX and WCS_VELANGL to + match changes to wcsprm made in v4.3 with corresponding changes to + the wrapper functions. Likewise updated TABLEN (in tab.inc) for + changes to tabprm, and added CEL_LATPREQ for celprm. + + - Struct lengths (WCSLEN, PRJLEN, etc.) are now long enough to + accomodate 64-bit machines. + + - Updated the flag bits for the RELAX argument in wcshdr.inc to + reflect changes to wcshdr.h made in v4.3. Renamed WCSHDR_VSOURCEa + to WCSHDR_VSOURCE for consistency with the C library. + +* PGSBOX + + - Improved grid labelling, particularly in minimizing the number of + fields required in sexagesimal labels. + +* Utilities + + - New utility program: + + - wcsware extracts the WCS keywords for an image from the specified + FITS file, constructs wcsprm structs for each coordinate + representation found, and performs a variety of operations using + them. + + - Old utility programs (first appeared in 4.3 but were not recorded): + + - HPXcvt reorganises HEALPix data into a 2-D FITS image with HPX + coordinate system. + + - wcsgrid extracts the WCS keywords for an image from the specified + FITS file and uses pgsbox() to plot a 2-D coordinate graticule for + each alternate representation found. + + - fitshdr lists headers from a FITS file specified on the command + line, or else on stdin, printing them as 80-character keyrecords + without trailing blanks. + +* Installation + + - New configure options, --with-pgplotinc, --with-pgplotlib, + --with-cfitsioinc and --with-cfitsiolib allow additional directories + to be added to the library and include file search path. + + - Miscellaneous fixes and improvements to the installation process. + + - Generate a metadata file for pkg-config. + + - Added 'make MODE=interactive check' to run the test programs in + interactive mode rather than batch. + + - Merged the separate CHANGES files for C, Fortran and PGSBOX into + one (this), with a new section for utilities. + + +WCSLIB version 4.3.3 (2009/04/30) +--------------------------------- + +* C library + + - fitshdr.l, wcsbth.l, and wcspih.l: use setjmp/longjmp to preempt + the call to exit() which is hard-coded in function yy_fatal_error() + supplied by flex. + + - wcspih.l: if NAXIS is non-zero but there were no WCS keywords at + all in the header then create a default WCS with blank alternate + version. + + +WCSLIB version 4.3.2 (2009/03/16) +--------------------------------- + +* C library + + - utils/GNUmakefile: create BINDIR if necessary prior to installing + utilities. + + +WCSLIB version 4.3.1 (2008/09/08) +--------------------------------- + +* Installation + + - Top-level GNUmakefile: install header files. + + +WCSLIB version 4.3 (2007/12/27) +------------------------------- + +* C library + + - A new general WCS header parser wcsbth() handles binary table image + arrays and pixel lists as well as image array headers. Added + "colax" to the wcsprm struct to record the column numbers for each + axis in a pixel list. + + - New function wcsbdx() is the analog of wcsidx() for the array of + wcsprm structs returned by wcsbth(). + + - New function wcshdo() writes out a wcsprm struct as a FITS header. + + - Changes to wcspih(): + - Bug fix, check for a == 0 (indication of a keyword that applies + to all alternates) in internal helper function wcspih_naxes() + (reported by Craig Markwardt). + - Added a new ctrl option to remove valid WCS keyrecords except for + those with a more general role, namely {DATE,MJD}-{OBS,AVG} and + OBSGEO-{X,Y,Z} (suggested by Jim Lewis). + - Added a rule for VELANGLa. Also added "velangl" to the wcsprm + struct. + - Do checks on the i, k & m keyword parameters in . + - Fixed the test for repeated blanks in the NAXIS and WCSAXES + patterns. + - Fixed three rules to allow m == 0. + - Reworked the implementation notes in the prologue. + + - The flex scanners, fitshdr.l, wcsbth.l, wcspih.l, wcsulex.l, and + wcsutrn.l, invoke yylex_destroy() before returning to avoid a 16kiB + memory leak. This was reported by several people, however it may be + problematic depending on the version of flex used - version 2.5.9 or + later is required. If this is not available, C sources pre- + generated by flex 2.5.33 will be used. + + - In wcs.c, don't define the signbit macro if already defined (for + MacOSX). + + - In wcs.h, documented wtbarr namespace issues in C++. + + - In wcsset(), always set wcsprm.cunit[i], if possible (primarily for + use by wcshdo()). + + - In wcsfix.c, parenthesised a boolean expression that was otherwise + incorrect. + + - Fixed an obscure floating point rounding error in celset() that + appeared with -O2 optimization in gcc v3.3.5 (Linux). + + - prjset() now correctly propagates the status value returned by the + specific projection-setting functions (reported by Bill Pence). + + - Bug fix in hpxx2s(), also added bounds checking. Minor efficiencies + in carx2s() and merx2s(). + + - In the various functions that print the contents of the structs, use + the "%p" printf conversion specifier to print addresses rather than + casting the pointer to int and using "#x". The latter does not work + on 64-bit machines where sizeof(int) != sizeof(void*). + + - Reorganized the various structs to get alignment on 64-bit machines. + + - All header file prologues now reference the README file for an + overview of the library. + + - Miscellaneous portability fixes for 64-bit, MacOSX, OSF compiler, + etc. + + - Elimination of compiler warnings, e.g. parenthesised assignments + used as truth values (a favourite gcc gripe!), etc. + + - Process flex descriptions using a newer version of flex, primarily + for MacOSX. However, the processed files are now only used when + flex 2.5.9 or later is not available. + + - Removed WCSLIB 2.x backwards-compatibility measures from lin.h, + prj.h, prj.c, and sph.h. + +* Fortran wrappers + + - (No substantive changes.) + +* PGSBOX + + - Miscellaneous improvements to PGSBOX. + +* General + + - Switched licensing to LGPL 3.0. + + - In comment text, replaced use of the obsolete term "card" with + "keyrecord" which consists of a "keyword", "keyvalue", and + "keycomment". + +* Installation + + - General improvements to the installation process: autoconf-related + portability improvements, particularly relating to Fortran name + mangling; makefile rules for building the shared library, for + processing flex descriptions; don't rely on "." being in the PATH + when running tests. + + +WCSLIB version 4.2 (2005/09/23) +------------------------------- + +* C library + + - Brought the installation process under control of GNU autoconf, + the top-level makefile now builds and tests everything, and the C + library has a config.h in which WCS_INT64 is set. Added an INSTALL + file. + + - Merged the FORTRAN, C and PGSBOX READMEs into one top-level README. + + - Extensions for -TAB coordinate handling: in tabx2s() and tabs2x(), + allow extrapolation by half a cell at either end of the index and + coordinate tables; fits_read_wcstab() (in getwcstab.{h,c}) allows + TDIMn to be omitted for 1-D lookup tables for which it has the form + '(1,K)', i.e. describing a degenerate 2-D array; wcsprt() now prints + the wtbarr structs in wcsprm. + + - Bug fixes for -TAB coordinate handling: in tabx2s() and tabs2x() + the incorrect indexing variable, m instead of i, was used for + tab->crval[]; wcsp2s() and wcss2p() returned prematurely in the + tabular coordinate loop; in wcstab(), removed an extraneous + assignment to wtbp->kind for index arrays. + + - In wcsp2s() and wcss2p(), elements of the stat[] vector that had + been set were being reset incorrectly to zero. The stat[] values + are now set as flag bits for each coordinate element. + + - Added cdfix() to the wcsfix() suite to fix erroneously omitted + CDi_ja cards. + + - PGSBOX is now compiled into a separate object library, and is + installed alongside WCSLIB. + + - Eliminated several instances of non-ANSI C library functions and + header files and some residual K&R C usage. The Sun C compiler + complained about const int definitions of initializers used in + variable declarations in some of the test programs; changed these + to preprocessor macros. + +* Fortran wrappers + + - Fixed handling of 64-bit integer keyvalues in keyget_(). + + - Fixed output formatting of 64-bit integer keyvalues in tfitshdr.f. + + - Fixed minor syntax errors in twcsfix.f and tpih1.f reported by the + Sun Fortran compiler. + + - The output of each test program now identifies the source file. + +* PGSBOX + + - (No substantive changes.) + + +WCSLIB version 4.1 (2005/08/31) +------------------------------- + +* C library + + Summary of added functionality: + + - -TAB coordinate axes are now fully implemented in the WCSLIB driver + functions (in wcs.{h,c}); multiple -TAB axes are supported. A new + function, wcstab(), which is automatically invoked by wcspih(), + parses -TAB-related header cards and sets up structs for a separate + routine that reads the necessary arrays from a FITS binary table + extension. + + An implementation of this routine in CFITSIO, fits_read_wcstab(), + is provided. Note however that the interface of this function is + experimental, and the code itself must be considered beta-release in + WCSLIB 4.1. + + - Units specifications, either from CNAMEia or inline comments (with + brackets), of arbitrary complexity are now fully implemented via a + parser, wcsulex(), and converter, wcsunits(). This is invoked + automatically by wcsset(). + + - Translators for non-standard WCS constructs are provided. These + cover date formats, units specifications, defunct celestial + projection types, AIPS spectral axis types, and the repair of + malformed cylindrical coordinate systems. + + - wcspih() now has options to remove the WCS cards it has processed + from the header and a new generic FITS header parser, fitshdr(), may + be used to parse the remaining non-WCS cards. In addition to the + more basic types, it handles 64-bit and 'very long' (70 digit) + integer keyvalues, and also continued string keyvalues. It also + does keyword matching and extracts units specifications in inline + comments. + + - -LOG coordinates are now implemented independently of spectral + coordinate types. Multiple -LOG axes are supported. + + - New function wcssptr() translates the spectral axis in a wcsprm + struct to the required type. + + - The README file now gives an introduction to, and complete overview + of, WCSLIB. It provides a point of entry to programming with + WCSLIB. Complete descriptions and usage notes for all functions are + contained in the header files. + + - The FORTRAN wrappers and test programs are now completely up-to-date + with respect to the C implementation. + + - All code, including the FORTRAN wrappers, PGSBOX, and all test + programs, now pass 'purify' without memory leaks, uninitialized + memory reads, memory access violations, or other memory faults. + + Change notes: + + - Added options to wcspih() to remove WCS cards from the input header + leaving only non-WCS cards behind. Modified test programs tpih1.c + and tpih2.c to use CFITSIO optionally via preprocessor macro + DO_CFITSIO. + + - New function wcstab() in wcshdr.{h,c} parses -TAB-related header + cards and sets up structs for a separate routine that reads the + necessary arrays from a FITS binary table extension. New + test/demo program twcstab.c using header defined in wcstab.cards. + + - CFITSIO implementation, fits_read_wcstab() in getwcstab.{h,c}, of a + function, independent of WCSLIB, for extracting arrays from a binary + table as required in constructing -TAB coordinates. + + - New units specification parser, wcsulex() in wcsunits.h and + wcsulex.l, and converter, wcsunits() in wcsunits.{h,c}. New + test/demo program tunits.c. + + - New parser for non-standard units specifications, wcsutrn() in + wcsunits.h and wcsutrn.l, also tested by tunits.c. + + - New functions datfix(), unitfix() (which applies wcsutrn()), + celfix(), and spcfix() join cylfix() in wcsfix.{h,c} to translate + various forms of non-standard or quasi-standard FITS WCS keyvalues + in a wcsprm struct. wcsfix() applies all of these in sequence. + New test/demo program twcsfix.c, with wcsfix() also now invoked by + tpih1.c. + + - New generic FITS header parser, fitshdr() in fitshdr.{h,l}. New + test/demo program tfitshdr.c uses wcs.cards with extra non-WCS + cards added. + + - -LOG coordinates are now treated as a coordinate type separate from + spectral coordinates, implemented via log.{h,c} and test program + tlog.c. The logarithmic functions were removed from spx.{h,c}, and + spc.c. + + - Extensive changes to wcs.{h,c} to support multiple -TAB and -LOG + coordinate axes and units conversion. Substantially changed the + test program, twcs.c, to test the more general functionality. + + - New function wcssptr() in wcs.{h,c} translates the spectral axis in + a wcsprm struct. + + - Added DATE-AVG to wcsprm. Also ntab, tab, nwtb, and wtb required + for -TAB implementation. Define struct wtbarr. + + - Added a types[] member to the wcsprm struct to identify axis + coordinate types using a four-digit code. + + - Use memset() in wcsini() to null-fill character arrays in the wcsprm + struct so that they don't appear to be padded with garbage when + displayed by gdb. + + - Do alias translation for AIPS-convention spectral types in wcsset() + using spctyp(). If wcsset() finds a CTYPEia in "4-3" form with an + unrecognized algorithm code it now returns an error rather than + assume that it's a linear axis. wcsset() now also resets lonpole + and latpole to the values actually used. + + - Modified spctyp() to translate AIPS-convention spectral ctypes, and + modified the argument list to return the parsed spectral type and + algorithm code. The return arguments will not be modified if + CTYPEia is not a valid spectral type; zero-pointers may be specified + for any that are not of interest. Removed the external const + variables, spc_codes and spc_ncode, as their function is now + fulfilled by spctyp(). + + - Fixed a bug in spctrn() in resolving ctypeS2 wildcarding. + + - Added latpreq member to the celprm struct, set by celset() to + indicate how LATPOLE is used. Augmented tcel2.c to report it. + + - New function tabmem() in tab.{h,c} takes control of user-allocated + memory. + + - tabini() allows K == 0 and also K[m] == 0 to initialize partially + the tabprm struct (for wcstab()). It now does fine-grained + bookkeeping of memory allocation for the index arrays and allocates + each individually. tabprm.index[] == 0x0 is recognized as default + indexing in tabset(), tabx2s() and tabs2x(). + + - The *prt() functions report parameters to an extra decimal place. + + - tabprt() prints the array index for elements of the coordinate and + index vectors. + + - Set the 0th element in all *_errmsg arrays to "Success". + + - Extracted string utility functions used by WCSLIB into + wcsutil.{h,c}. + + - Removed support for K&R C. + +* Fortran wrappers + + - The FORTRAN wrappers and test programs are now completely up-to-date + with respect to the C implementation. + + - New include files, wrappers, and test programs: + fitshdr.inc, fitshdr_f.c, getwcstab.inc, getwcstab_f.c, log.inc, + log_f.c, sph.inc, tab.inc, tab_f.c, tfitshdr.f, tlog.f, ttab1.f, + ttab2.f, ttab3.f, tunits.f, twcsfix.f, twcstab.f, wcsfix.inc, + wcsfix_f.c, wcsunits.inc, wcsunits_f.c. + + - Updates to reflect changes to the C library and test programs: + cel.inc, cel_f.c, prj.inc, spc.inc, spc_f.c, spx.inc, spx_f.c, + tlin.f, tpih1.f, tpih2.f, tprj1.f, tprj2.f, tspc.f, tsph.f, tspx.f, + twcs.f, twcsmix.f, twcssub.f, wcs.inc, wcs_f.c, wcshdr.inc, + wcshdr_f.c. + + - Added *_ERRMSG arrays containing status messages to all include + files. + + - Removed support for K&R C. + +* PGSBOX + + - Fixed a subtle though benign memory fault identified by 'purify'. + + - Reset LATPOLE in the COE example in cpgtest.f when drawing the + second (native) grid because it will have been set to a non-default + value by wcsset() when the first grid was drawn; set wcs.flag to -1 + before wcsinit() and call wcsfree() at the end. Similarly for + pgtest.f. + + +WCSLIB version 4.0 (2005/02/07) +------------------------------- + +* C library + + - Implemented tabular coordinates (-TAB). New files: tab.h and tab.c, + and test programs ttab[123].c. These have not been incorporated + into the higher-level (wcs.h) functions at this stage. + + - New spectral functions: spchek() checks a spectral algorithm code + for legitimacy; from the spectral keywords given, spcspx() derives + the corresponding CRVALi and CDELTi keywords for the underlying P-, + and X-type spectral coordinates; spcxps() does the opposite; + spctrn() combines spcspx() and spcxps() to translate one set of + spectral keywords into another, e.g. 'FREQ' -> 'ZOPT-F2W'. + + - Implemented the HEALPix (HPX) projection in the prj functions. + + - Added a new function, wcsidx(), to return an array that indexes the + alternate coordinate descriptions found by wcspih() (suggested by + Bill Pence, NASA/Goddard). Modified tpih1.c to exercise it. + + - In wcsp2s() and wcss2p(), check that nelem equals or exceeds + wcs.naxis; emphasised this in the usage notes for these functions + in tab.h (suggested by Bill Pence, NASA/Goddard). + + - Moved the macros used for UNDEFINED values and the corresponding + macro test function, undefined(), to wcsmath.h for general use. + Previously, UNDEFINED values were only used internally, but they are + now visible in some of the structs, particularly values of undefined + auxiliary header cards in the wcsprm struct. + + - Remove const from the double args in the specx() prototype in spx.h + to match the definition in spx.c (reported by Bryan Irby, + NASA/Goddard). + + - Fixed the interaction between the FLAVOUR and PGPLOTLIB definitions + in the C and FORTRAN Makefiles by introducing a separate variable, + DO_PLOTS, to control whether to exercise test programs that require + PGPLOT (reported by Bill Pence, NASA/Goddard). + +* Fortran wrappers + + - New wrapper defined in wcshdr_f.c: wcsidx_(). Modified test program + tpih1.f to use it. + +* PGSBOX + + - (No substantive changes.) + +* General + + - Changed the copyright notice in all library routines from LGPL to + GPL as recommended by the FSF (http://www.gnu.org/licenses/why-not- + lgpl.html). + +* Installation + + - General improvements to the installation process: fixed the + interaction between the FLAVOUR and PGPLOTLIB definitions in the + Makefile by introducing a separate variable, DO_PLOTS, to control + whether to exercise test programs that require PGPLOT (reported by + Bill Pence, NASA/Goddard). Added an "install" target to the + Makefile. + + +WCSLIB version 3.6 (2004/08/25) +------------------------------- + +* C library + + - New service routine, wcssub() extracts the coordinate description + for a subimage from a wcsprm struct. wcscopy() is now implemented + as a preprocessor macro that invokes wcssub(). New test program, + twcssub.c, tests wcssub(). + + - In wcspih(): + + 1) Fixed handling of string-valued keywords where the inline comment + contains a single-quote character ('). + + 2) Fixed the address arithmetic for EPOCH and VELREF. + + 3) Translate VSOURCEa into ZSOURCEa if required. + + 4) Recognize SSYSSRCa. + + 5) Support free-format string keyvalues, as well as integer and + floating-point keyvalues; documented this in the prologue of + wcshdr.h. + + 6) Allow header cards without inline comments. + + 7) Fixed function prototyping in wcspih.l (i.e. ANSI and non-ANSI + forms were potentially mixed). + + 8) Catch an unhandled newline character on the END card that was + echoed to stdout. + + 9) In error messages, print "ERROR" (uppercase) - POSIX standard. + + - Modified wcs.cards to explain and test free-format keyvalues, and + also augmented the inline comment on illegal WCS cards that are to + be rejected, and WCS-like cards to be discarded. Added a header + card with no inline comment. + + - Removed vsource from the wcsprm struct and added ssyssrc. + + - In wcsini(), fixed a problem with memory management for wcs.pv when + NPVMAX is zero; likewise for wcs.ps and NPSMAX. + + - In wcsprt(), don't print auxiliary coordinate system information in + arrays with zero address. + + - In wcss2p(), status == 9 (one or more invalid world coordinates) was + not returned appropriately. + + - Renamed twcs1.c to twcs.c, and twcs2.c to twcsmix.c. + + - "Error status/code/number" is now referred to consistently as the + "status return value". + + - Some vestiges of K&R C were removed: preprocessor definition of + const, and K&R function prototypes. + +* Fortran wrappers + + - New wrapper defined in wcs_f.c: wcssub_(). New test program, + twcssub.f. + + - Renamed twcs1.f to twcs.f, and twcs2.f to twcsmix.f. + +* PGSBOX + + - (No substantive changes.) + +* Installation + + - Worked over the C, FORTRAN, and PGSBOX makefiles, in particular to + make them all consistent. + + +WCSLIB version 3.5 (2004/06/28) +------------------------------- + +* C library + + - WCSLIB now provides a function, wcspih() implemented as a Flex + description, that parses a FITS image header, either that of a + primary HDU or an image extension. Given a character array + containing the header it identifies and reads all WCS cards for + the primary coordinate description and up to 26 alternate + descriptions and returns this information as an array of wcsprm + structs. A service routine, wcsvfree(), is provided to free the + memory allocated by wcspih(). The relevant header file for these + functions is wcshdr.h. + + Test programs, tpih1 and tpih2, are provided to verify wcspih. The + first simply prints the contents of the structs using wcsprt(). The + second uses cpgsbox() to draw coordinate graticules. A FITS WCS + test header has been developed to provide input to these test + programs. It is implemented as a list of card images, wcs.cards, + one card per line, together with a program, tofits, that compiles + these into a valid FITS file. tpih1 uses its own code to read this, + whereas tpih2 uses the fits_hdr2str() function from CFITSIO. + + - Removed twcsprt, tpih exercises wcsprt() much more thoroughly than + twcsprt ever did. Modified twcs1 to print the size of the various + structs as twcsprt used to. + + - Although they are not used in any coordinate calculations, the + wcsprm struct now provides data members for storing all of the + auxiliary FITS WCS header cards defined in Papers I, II, and III, + such as WCSNAMEa, EQUINOXa, and CNAMEia. Members are also provided + for storing the alternate descriptor code (the "a" in CTYPEia), and + the binary table column number. These are supported by the high + level WCSLIB routines, wcsini(), wcscopy(), wcsfree(), and wcsprt(). + Refer to wcs.h for details. + + - The number of PVi_ma cards for which wcsini() allocates memory is + now set by a global variable, NPVMAX (previously a C-preprocessor + macro). This defaults to 64 but may be changed by a new function, + wcsnpv(). The wcsprm struct contains a new member, npvmax, that + records the value of this number at the time the struct was + initialized. This is in addition to npv which records the actual + number of cards that were encountered. + + Similarly, NPSMAX (default 8) is used for the number of PSi_ma + cards, and it may be changed via wcsnps(). + + The axis number, i, in the pvcard struct used for storing PVi_ma + cards may now be set to 0 to indicate the latitude axis. + + - calloc() is now used in place of malloc() in allocating memory for + arrays, and inclusion of malloc.h has been replaced with stdlib.h + for all platforms. + + wcsfree() checks that wcs.flag != -1 before testing wcs.m_flag when + freeing memory allocated by wcsini() in case the struct is + uninitialized. Similarly for linfree(). + + - In prj.h, renamed C-preprocessor macros INI, PRT, SET, X2S and S2X + to PRJINI, PRJPRT, PRJSET, PRJX2S and PRJS2X to reduce the + likelihood of namespace clashes. Similarly in spc.h. + + Also, in prj.c, changed the name of helper routine offset() to + prjoff() to reduce the likelihood of global namespace conflicts. + + - In line with bonx2s() and bons2x(), bonset() now recognizes the + equatorial case of Bonne's projection as Sanson-Flamsteed, mainly so + that the auxiliary information in the prjprm struct more accurately + reflects the truth. Modified tcel2 to exercise this by using an + equatorial Bonne projection in place of the Hammer-Aitov. + + - zpns2x() used prj.w[0] for bounds checking, though this had not been + set by zpnset() for polynomials of degree N < 3. Consequently, + bounds checking for N < 3 was unreliable (reported by David Berry, + STARLINK). + + - Changed some variable names in tscs2x(), cscx2s(), cscs2x(), + qscx2s(), and qscs2x() to match Paper II, and likewise changed some + inequality tests in qscs2x() without changing the results. + + - Minor tidying up of output formatting in prjprt(). + + - Added the alternate version code to FITS WCS keywords mentioned in + comments, e.g. CTYPEi changed to CTYPEia. + +* Fortran wrappers + + - New wrappers defined in wcshdr_f.c: wcspih_() and wcsvfree_(), and + also a new service function, wcsvcopy_(). + + New test programs, TPIH1 and TPIH2, being analogues of tpih1 and + tpih2. Removed TWCSPRT. + + - In wcs_f.c, new wrappers wcsnpv_() and wcsnps_(); modified wcsput_() + and wcsget_() to handle new members of the wcsprm struct. Also + modified wcsput_() to null-fill all char[] members of the wcsprm + struct, and likewise wcsget_() to blank-fill them. + + - Modified wcs.inc to support changes to the wcsprm struct. + +* PGSBOX + + - In PGSBOX, increased the dimension of the WORLD and XY vectors from + 2 to 9 to accomodate higher-dimensional coordinate representations + of up to 9 elements. Similarly for pgwcsl(). The assumption + (presently) is that the first two world, and pixel, coordinate + elements are the relevant ones; the others are all set to zero when + pgwcsl() initializes and otherwise ignored. + + Assigned some variables in DATA to stop compiler messages about + uninitialized variables. + + - Generalized the Makefile, bringing it into line with the WCSLIB + Makefile, and adding separate targets for compiling and running the + test programs. The default target now simply compiles pgsbox.c and + cpgsbox.c. A separate target compiles pgwcsl.c and inserts it into + ../C/libwcs.a. + + +WCSLIB version 3.4 (2004/02/11) +------------------------------- + +* C library + + - In aitx2s(), apply the boundary condition 0.5 <= Z^2 <= 1 given + after Eq. (109) in WCS Paper II to detect outlying pixels. + + - Fixed several special-case bugs in celset(): + + 1) For theta_0 = 90, in substituting the default value for phi_p + (LONPOLE), + + a) for the special case when delta_0 = 90, celset() provided the + wrong value (180 instead of 0), + + b) celset() neglected to add phi_0 (normally 0). + + 2) For theta_0 != 90, + + a) for the special case when delta_0 = -90, celset() incorrectly + computed delta_p (as theta_0 instead of -theta_0), + + b) for the special case when delta_p = +90 (or -90), celset() + neglected to subtract (or add) phi_0 (normally 0). + + 3) For |delta_0| = 90, celset() incorrectly allowed the particular, + invalid, value of phi_p (LONPOLE) that put the other pole at the + fiducial point. + + 4) For theta_0 = 0, delta_0 = 0 LATPOLE determines delta_p + completely. For LATPOLE > 90 celset() now sets delta_p to 90, + and for LATPOLE < -90 it sets it to -90. + + - Additional refinements in celset(): + + 1) cel->ref[2] is normalized in the range [-180,180]. + + 2) Account for rounding error in the computation of delta_p. + + - sphx2s() and sphs2x() incorrectly handled the "change in the origin + of longitude" special case that arises when delta_p = -90, in the + even more restrictive case where |theta| = 90 also; it applied + Eq. (3) instead of Eq. (4) of Paper II. + + - Added a new test program, tcel2.c, to exercise celset() more + thoroughly. Renamed the original tcel.c to tcel1.c and modified the + Makefile to suit. + +* Fortran wrappers + + - (No changes.) + +* PGSBOX + + - (No substantive changes.) + + +WCSLIB version 3.3 (2003/10/21) +------------------------------- + +* C library + + - In celset(), the default value for phi_p (LONPOLE) is + + phi_p = phi_0 + ((delta_0 < theta_0) ? 180.0 : 0.0) + + Previously phi_0 (which is normally zero) was not added (reported by + David Berry, STARLINK). + + - wcsprt() and linprt() now check that the structs have been + initialized. + + - In wcsini(), when the wcsprm flag is -1 also set the linprm flag to + -1 to force initialization of the memory managed by linset(). + + - wcsset() now explicitly initializes the celprm and spcprm structs + via celini() and spcini(). + + - Fixed syntax errors in the macro definitions of linrev_errmsg and + linfwd_errmsg. + + - In Makefile, added the -ansi option to gcc to force it to behave + like a strict ANSI C compiler, specifically in setting the __STDC__ + preprocessor macro. + +* Fortran wrappers + + - (No changes.) + +* PGSBOX + + - PGSBOX now recognizes status returns -1, -2, and -3 from NLFUNC for + opcodes +2 and +1 which cause it to accept the returned (x,y) + coordinates but not consider them as one end of a crossing segment + for labelling world coordinate 1, 2, or both. + + - PGSBOX now takes care not to lose vertical tick marks (and hence + labels) at the left or right edge of the frame. Likewise for + horizontal tick marks at the top or bottom edge of the frame. + + - Tightened up the test in PGSBOX for cycles in angle to catch the + case where the coordinate value spans a full 360 degrees. + + - PGSBOX will no longer accept frame crossings that are too oblique; + floating point rounding errors may cause grid lines that should + otherwise track along the frame to weave down it from side-to-side + resulting in spurious crossing points. + + - Fixed a bug in pgwcsl_() for processing simple linear coordinates. + + - pgwcsl_() now returns error -2 if the latitude is outside -90 to +90 + for opcodes +2 and +1. + + - Amended the translation of status return codes from WCSLIB in + pgwcsl_(). + + - Provided a header file for pgwcsl_() (mainly for C++ usage). + + - Added extra test plots to PGTEST and cpgtest. + + - Added extra functionality to the Makefile. + + +WCSLIB version 3.2 (2003/09/09) +------------------------------- + +* C library + + - Added the facility of setting the flag member of a wcsprm struct to + -1 before calling wcsini() for the first time in order to initialize + memory management. Likewise for linprm and linini(). + + - Renamed wcscpy() to wcscopy() to avoid a conflict with the Posix + "wide character string" function of the same name (wchar.h). In + particular, this is used by the GNU C++ string class. + + - The higher level functions (wcs, cel, spc) no longer return + prematurely if some of the input coordinate values are invalid. + + - All functions now test whether a null pointer for the particular + struct (wcsprm, celprm, etc.) has been passed to them. + + - Function return codes have been rationalized into a consistent set + within each of the wcs, cel, lin, prj, spc, and spx suites of + functions. Error messages to match these error codes are now + encoded in a single character array, e.g. wcs_errmsg and prj_errmsg, + instead of a separate array for each function. Macro definitions + for the older character arrays (e.g. wcsini_errmsg) have been + provided for backward compatibility. + + - Declared prj_stat as extern in prj.h. + +* Fortran wrappers + + - (No changes.) + +* PGSBOX + + - Added an ENTRY point, PGLBOX, that provides a simplified interface + to PGSBOX for linear axes without having to specify an NLFUNC or the + associated parameters. + + +WCSLIB version 3.1 (2003/04/29) +------------------------------- + +* C library + + - Added "global" and "divergent" prjprm struct informational members + to record whether the projection is capable of mapping the whole + sphere, and whether it is divergent in latitude. + + - Function cylfix() provided to fix WCS FITS header cards for + malformed cylindrical projections (c.f. Paper II, Sect. 7.3.4). + + - Added support for CUNITi cards to wcsprm (but not currently + implemented). + + - Added macro implementations of the trigd functions to wcstrig.h, + enabled if WCSTRIG_MACRO is defined. + + - Improved printing of the WCSLIB structs. + + - Added macro definitions for the lengths of the WCSLIB structs + measured in sizeof(int) units (mainly for the FORTRAN wrappers). + +* Fortran wrappers + + - FORTRAN is now supported via a set of wrappers on the C library. + Refer to the README file. + +* PGSBOX + + + +WCSLIB version 3.0 beta release (2003/04/01) +-------------------------------------------- + +* C library + + - Fully vectorized function interfaces (C preprocessor macros are + available to implement the scalar interfaces of the proj.c, sph.c, + and lin.c routines from WCSLIB 2.x). + + - Implementation of Paper II, Sect. 2.5: User-specified + (phi0, theta0). + + - Implementation of Paper III (excluding "-TAB"). + + - Memory management is now implemented in the upper-level (wcs.c) + routines. + + - New extensible design should accomodate Paper IV (and any other) + without further change to the function interfaces. + +* PGSBOX + + - Added a C wrapper function, cpgsbox(), and C test/demo program, + cpgtest, that duplicates PGTEST and serves as a C coding template. + + - Added calendar date axes. + + - Sped up the max/min search - if only tickmarks are required there is + no need to search the interior of the image. + + - Return margin widths in CACHE(,NC). + + - Fixed a buglet that caused ticks at the frame edges to be skipped. + + - Return error 3 if CACHE overflows. + + - Adapted PGWCSL for WCSLIB 3.x - it is now a C function (for + interfacing to WCSLIB) with a FORTRAN-like interface (for PGSBOX). + + +WCSLIB version 2.9 (2002/04/03) +------------------------------- + +* C library + + - Fixed a bug with alias translation in wcsset(). + + - Added a conditional compilation directive to lin.c for Apple's + MacOSX. + +* Fortran library + + - Fixed CUBEFACE handling in WCSSET. + + +WCSLIB version 2.8 (2001/11/16) +------------------------------- + +* C library + + - Added support for the SZP projection with szpset(), szpfwd() and + szprev(), and generalized AZP with support for the tilt parameter, + gamma. + + - Added phi0 to the prjprm struct, this is set by the projection + initialization routines along with theta0. + + - Fixed a problem in wcsmix() caused by numerical imprecision that + could cause it not to recognize when convergence was reached; break + out of the loop early if a discontinuity is detected. + + - Clarified the usage of vspan in the prologue to wcsmix(). + + - Fixed comments relating to LATPOLE in the prologue to cel.c and + tcel.c, and replaced references to LONGPOLE with LONPOLE. + + - Augmented the error reports in twcs2. + + - Modified projex() in tproj1 and prjplt() in tproj2 to make use of + the information stored in the prjprm struct. + +* Fortran library + + - Added support for the SZP projection with SZPSET, SZPFWD and SZPREV, + and generalized AZP with support for the tilt parameter, gamma. + + - Changed the call sequence to PRJSET to return PHI0 along with + THETA0. + + - Fixed a problem in WCSMIX caused by numerical imprecision that could + cause it not to recognize when convergence was reached; break out of + the loop early if a discontinuity is detected. + + - Clarified the usage of VSPAN in the prologue to WCSMIX. + + - Fixed comments relating to LATPOLE in the prologue to CEL and TCEL, + and replaced references to LONGPOLE with LONPOLE. + + - Augmented the error reports in TWCS2. + + - Modified PROJEX in TPROJ1 and PRJPLT in TPROJ2 to use the generic + driver routines PRJSET, PRJFWD and PRJREV. PRJPLT also now uses the + projection type encoded in PRJ(11). + + +WCSLIB version 2.7 (2001/02/19) +------------------------------- + +* C library + + - Added generic driver routines prjset(), prjfwd() and prjrev(). + These invoke specific projection routines via the pointer-to- + function elements, prjfwd and prjrev, transferred to the prjprm + struct from celprm. + + - Added code (3-letter projection code) and theta0 (reference + latitude) elements to prjprm. + + - The projection code for the Sanson-Flamsteed projection is now SFL. + The upper-level routines, wcsset(), wcsfwd(), and wcsrev(), + recognize GLS as an alias for this. + + - wcsset() now recognizes 'xyLN/xyLT' axis pairs. + + - Two bugs in the translation from NCP to SIN in wcsfwd() and wcsrev() + were fixed: (1) the projection parameter was computed incorrectly + and (2) they did not honour prj->flag set to -1 to disable strict + bounds checking. + + - A bug in wcsmix() was fixed - it was relying on the wcsprm struct to + have been initialized beforehand. + + - The test programs now use the cpgplot interface to PGPLOT, the old + tpgc.c and tpgf.f wrappers have been removed. + +* Fortran library + + - Added generic driver routines PRJSET, PRJFWD and PRJREV. These are + keyed to specific projection routines via the value of PRJ(11) which + now differs for each projection. + + - The projection code for the Sanson-Flamsteed projection is now SFL. + The upper-level routines, WCSSET, WCSFWD, and WCSREV, recognize GLS + as an alias for this. + + - WCSSET now recognizes 'xyLN/xyLT' axis pairs. + + - A bug in the translation from NCP to SIN in WCSFWD and WCSREV was + fixed; they did not honour PRJ(11) set to -1 to disable strict + bounds checking. + + - A bug in WCSMIX was fixed - it was relying on the WCS array to have + been initialized beforehand. + + +WCSLIB version 2.6 (2000/05/10) +------------------------------- + +* C library + + - Check for invalid (x,y) in zearev(). + + - In wcsmath.h, guard against prior definition of PI and other + preprocessor variables. + +* Fortran library + + - Check for invalid (X,Y) in ZEAREV. + + - Declare COSD and SIND in WCSFWD and WCSREV, reported by Clive Page + (cgp@star.le.ac.uk). + + +WCSLIB version 2.5 (1999/12/14) +------------------------------- + +* C library + + - Added copyright notice to header files and prefixed include guard + names with "WCSLIB_". + + - Fixed cube face handling in wcsfwd() and wcsrev() (reported by + Doug Mink, CfA). Allow more general face layout in the inverse + quadcube projections. + + - Fixed the problem in wcsmix() where it failed to find a valid + solution when the solution point lay at a native pole of a + projection in which the pole is represented as a finite interval. + However, wcsmix() will only ever return one solution even when two + or more valid solutions may exist. + + - wcsmix() now accepts viter in the range 5 - 10, the specified value + will be pushed up or down into this range if necessary. + + - The projection routines for AZP, TAN, SIN, ZPN, and COP now return + error 2 if (phi,theta) correspond to the overlapped (far) side of + the projection. This strict bounds checking can be switched off by + setting prj->flag to -1 (rather than 0) when the projections are + initialized. + + - The upper level routines, wcsset(), wcsfwd(), wcsrev(), and + wcsmix(), now recognize the NCP projection and convert it to the + equivalent SIN projection. The lower level routines do not + recognize NCP. + + - Extracted definitions of mathematical constants (PI etc.) from + proj.h into wcsmath.h in order to avoid conflicts with their + definition in math.h in some systems (such as Linux). + + - Describe the two alternate representations of the quadcube + projections (i.e. faces laid out or stacked) in the prologue of + wcs.c. + +* Fortran library + + - Fixed cube face handling in WCSFWD and WCSREV, reported by Doug Mink + (dmink@cfa.harvard.edu). Allow more general face layout in the + inverse quadcube projections. + + - Fixed the problem in WCSMIX where it failed to find a valid solution + when the solution point lay at a native pole of a projection in + which the pole is represented as a finite interval. However, WCSMIX + will only ever return one solution even when two or more valid + solutions may exist. + + - WCSMIX now accepts VITER in the range 5 - 10, the specified value + will be pushed up or down into this range if necessary. + + - The projection routines for AZP, TAN, SIN, ZPN, and COP now return + error 2 if (phi,theta) correspond to the overlapped (far) side of + the projection. This strict bounds checking can be switched off by + setting PRJ(11) to -1 (rather than 0) when the projections are + initialized. + + - The upper level routines, WCSSET, WCSFWD, WCSREV, and WCSMIX, now + recognize the NCP projection and convert it to the equivalent SIN + projection. The lower level routines do not recognize NCP. + + - Describe the two alternate representations of the quadcube + projections (i.e. faces laid out or stacked) in the prologue of + wcs.f. + + +WCSLIB version 2.4 (1996/09/23) +------------------------------- + +* C library + + - In sinrev(), cscrev(), qscrev(), and tscrev(), return error 2 if + (x,y) do not lie within the perimeter of the projection. In + sinrev(), stop the computation of phi for the "synthesis" projection + being applied to the pure "orthographic" case (reported by + David Berry, STARLINK). + + - (Internal change) Renamed variables l <-> m in the quadcube + projections to accord with standard usage (and revised WCS draft + paper). + +* Fortran library + + - In SINREV, CSCREV, QSCREV, and TSCREV, return error 2 if (X,Y) do + not lie within the perimeter of the projection. In SINREV, stop the + computation of PHI for the "synthesis" projection being applied to + the pure "orthographic" case. Reported by David Berry + (dsb@ast.man.ac.uk). + + - (Internal change) Renamed variables L <-> M in the quadcube + projections to accord with standard usage (and revised WCS draft + paper). + + - (Internal change) Stopped PRJ(11) doing double service in any + projection. It is now set and tested for a specific magic value + rather than simply being non-zero. + + +WCSLIB version 2.3 (1996/06/24) +------------------------------- + +* C library + + - Fixed two bugs in zpnset(). The first led to an incorrect + determination of the degree of the polynomial and would mainly have + affected the efficiency of zpnrev(). The second affected the + determination of the boundary of the projection but would only have + been significant for projections with a point of inflection between + 9 and 10 degrees of the pole. Reported by David Berry, STARLINK. + + - Replaced usage of alloca() in lin.c with malloc() and free() for + portability as suggested by Klaus Banse, ESO (kbanse@eso.org). + + - Allow for C implementations that provide their own versions of + cosd(), sind(), tand(), acosd(), asind(), atand(), and atan2d(). + From Klaus Banse, ESO (kbanse@eso.org). + + - Implemented the CUBEFACE axis for quadcube projections. + + - Made all function prototypes const-correct. + + - Adapted the header files to C++ usage. + + - Added a new test program, twcs1, to verify closure of wcsfwd() and + wcsrev(). The old twcs test program is now called twcs2. + + - Added external arrays of error messages indexed by function return + value. For example, extern const char *wcsmix_errmsg[] for + wcsmix(). Messages for the many proj.c functions are in + prjfwd_errmsg[], etc. + +* Fortran library + + - Implemented the CUBEFACE axis for quadcube projections. + + - Added a new test program, TWCS1, to verify closure of WCSFWD and + WCSREV. The old TWCS test program is now called TWCS2. + + +WCSLIB version 2.2 (1996/01/18) +------------------------------- + +* C library + + - Amended the projection equations for the conics (COP, COD, COE, COO) + and Bonne's projection (BON) to correctly handle southern hemisphere + projections with PROJP1 < 0 (reported by Lindsay Davis, NOAO). + Revised tproj1 and tproj2 to test such cases. + +* Fortran library + + - Amended the projection equations for the conics (COP, COD, COE, COO) + and Bonne's projection (BON) to correctly handle southern hemisphere + projections with PROJP1 < 0 (reported by Lindsay Davis, NOAO). + Revised TPROJ1 and TPROJ2 to test such cases. + + - Increased the dimension of the WCS array from WCS(0:2) to WCS(0:3) + to allow for future handling of the CUBEFACE keyword - WCS(3) will + store an index to the CUBEFACE axis. This affects the call + sequences of WCSSET, WCSFWD, WCSREV, and WCSMIX. + + +WCSLIB version 2.1 (1995/11/17) +------------------------------- + +* C library + + The main change of interest to programmers is that of changed argument + lists for wcsfwd() and wcsrev() as described below. + + - The WCS linear transformations are now implemented in WCSLIB, + complete with matrix inverter. The new files are lin.c, lin.h, and + test program tlin.c. + + - Given either the celestial longitude or latitude plus an element of + the pixel coordinate a new routine, wcsmix(), solves for the + remaining elements by iterating on the unknown celestial coordinate + element using wcsfwd(). + + - The high level driver routines wcsfwd(), wcsrev(), and wcsmix() now + apply the full WCS algorithm chain (except for pixel regularization + table), including parsing the CTYPEn header cards and computing non- + celestial elements of the world coordinate. This required a change + to their argument lists which now more closely reflect the sequence + of algorithms applied. A new routine, wcsset(), parses the CTYPEn. + + - The high level driver routines of WCSLIB 1.0 are available as + intermediate level drivers celset(), celfwd(), and celrev(), but + note that their argument lists have been extended to return native + coordinates. The related struct is now called celprm instead of + wcsprm. + + - The reference point for conic projections is now at the midpoint of + the standard parallels. The FITS header cards PROJP1 and PROJP2 now + give the half-sum (midpoint) and half-difference of the latitudes of + the standard parallels; previously they gave the latitudes of the + standard parallels themselves. The change is reflected in this + release of WCSLIB. + + - A bug in celset() (formerly wcsset()) that misapplied WCS draft + equations 7 has been fixed (thanks to Rick Ebert IPAC/JPL and + Lindsey Davis, NOAO for reporting this). This affected the + computation of Euler angles for the celestial coordinate + transformation for those projections that have their reference point + away from the native pole. In investigating this a deficiency with + the formalism was discovered that led to the introduction of a + LATPOLE FITS header card which may be used to disambiguate where + CRVAL1, CRVAL2, and LONGPOLE do not uniquely determine the latitude + of the native pole. The celprm struct (formerly wcsprm) has been + extended to accomodate LATPOLE. + + - Default values of LONGPOLE and LATPOLE are now supported and their + use is recommended where appropriate. + + - Numerical precision was being lost near the native poles in the SIN, + AIR, and QSC projections and this has been recovered (reported by + Lindsey Davis, NOAO). Floating underflows in CSC are now avoided. + + - Numerical precision was also lost in certain circumstances in the + spherical coordinate transformation routines and this has been + fixed. + + - The test programs have been enhanced in various ways and the library + has been validated on an SGI machine using both 32-bit and 64-bit + compilers. + +* Fortran library + + The main change of interest to programmers is that of changed call + sequences for WCSFWD and WCSREV as described below. + + - The WCS linear transformations are now implemented in WCSLIB, + complete with matrix inverter. The new files are lin.f and test + program tlin.f. + + - Given either the celestial longitude or latitude plus an element of + the pixel coordinate a new routine, WCSMIX, solves for the remaining + elements by iterating on the unknown celestial coordinate element + using WCSFWD. + + - The high level driver routines WCSFWD, WCSREV, and WCSMIX now apply + the full WCS algorithm chain (except for pixel regularization + table), including parsing the CTYPEn header cards and computing non- + celestial elements of the world coordinate. This required a change + to their call sequences which now more closely reflect the sequence + of algorithms applied. A new routine, WCSSET, parses the CTYPEn. + + - The high level driver routines of WCSLIB 1.0 are available as + intermediate level drivers CELSET, CELFWD, and CELREV, but note + that their call sequences have been extended to return native + coordinates. The related parameter array is now called CEL instead + of WCS. + + - The reference point for conic projections is now at the midpoint of + the standard parallels. The FITS header cards PROJP1 and PROJP2 now + give the half-sum (midpoint) and half-difference of the latitudes of + the standard parallels; previously they gave the latitudes of the + standard parallels themselves. The change is reflected in this + release of WCSLIB. + + - A bug in CELSET (formerly WCSSET) that misapplied WCS draft + equations 7 has been fixed (thanks to Rick Ebert IPAC/JPL and + Lindsey Davis, NOAO for reporting this). This affected the + computation of Euler angles for the celestial coordinate + transformation for those projections that have their reference point + away from the native pole. In investigating this a deficiency with + the formalism was discovered that led to the introduction of a + LATPOLE FITS header card which may be used to disambiguate where + CRVAL1, CRVAL2, and LONGPOLE do not uniquely determine the latitude + of the native pole. The CEL parameter array (formerly WCS) has been + extended to accomodate LATPOLE as CEL(4), and the flag variable is + now CEL(5) (formerly WCS(4)). + + - Default values of LONGPOLE and LATPOLE are now supported and their + use is recommended where appropriate. + + - Numerical precision was being lost near the native poles in the SIN, + AIR, and QSC projections and this has been recovered (reported by + Lindsey Davis, NOAO). Floating underflows in CSC are now avoided. + + - Numerical precision was also lost in certain circumstances in the + spherical coordinate transformation routines and this has been + fixed. + + - The test programs have been enhanced in various ways and the + library has been validated on an SGI machine using both 32-bit and + 64-bit compilers. + + +WCSLIB version 1.0 (1995/01/31) +------------------------------- + +* C library + + Initial release. + +* Fortran library + + Initial release. + +------------------------------------------------------------------------ +$Id: CHANGES,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ diff --git a/deps/wcslib/CMakeLists.txt b/deps/wcslib/CMakeLists.txt new file mode 100644 index 0000000..8d5e1d7 --- /dev/null +++ b/deps/wcslib/CMakeLists.txt @@ -0,0 +1,83 @@ +PROJECT(WCSLIB) +CMAKE_MINIMUM_REQUIRED(VERSION 3.4) + +# Allow the developer to select if Dynamic or Static libraries are built +OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF) +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}") + +SET(INCLUDE_DIRS + "${CMAKE_CURRENT_SOURCE_DIR}" + "${CMAKE_CURRENT_SOURCE_DIR}/C" +) + +# Define project version +SET(${PROJECT_NAME}_MAJOR_VERSION 7) +SET(${PROJECT_NAME}_MINOR_VERSION 1) +SET(${PROJECT_NAME}_VERSION ${${PROJECT_NAME}_MAJOR_VERSION}.${${PROJECT_NAME}_MINOR_VERSION}) +SET(LIB_NAME wcslib) + +# run ./configure for setting config file +IF(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/wcsconfig.h") + MESSAGE(STATUS "wcslib already configured...") +ELSE() + EXECUTE_PROCESS(COMMAND ./configure WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +ENDIF() + +#run lex files +if(EXISTS "${CMAKE_SOURCE_DIR}/C/fitshdr.c") + MESSAGE(STATUS "flex fitshdr already created") +ELSE() + EXECUTE_PROCESS(COMMAND flex ${CMAKE_CURRENT_SOURCE_DIR}/C/fitshdr.l WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/C") +ENDIF() + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/C/wcsbth.c") + MESSAGE(STATUS "flex wcsbth already created") +ELSE() + EXECUTE_PROCESS(COMMAND flex ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsbth.l WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/C") +ENDIF() + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/C/wcspih.c") + MESSAGE(STATUS "flex wcspih already created") +ELSE() + EXECUTE_PROCESS(COMMAND flex ${CMAKE_CURRENT_SOURCE_DIR}/C/wcspih.l WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/C") +ENDIF() + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/C/wcsulex.c") + MESSAGE(STATUS "flex wcsulex already created") +ELSE() + EXECUTE_PROCESS(COMMAND flex ${CMAKE_SOURCE_DIR}/C/wcsulex.l WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/C") +ENDIF() + +if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/C/wcsutrn.c") + MESSAGE(STATUS "flex wcsutrn already created") +ELSE() + EXECUTE_PROCESS(COMMAND flex ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsutrn.l WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/C") +ENDIF() + +SET (LIB_TYPE STATIC) +IF (BUILD_SHARED_LIBS) + SET (LIB_TYPE SHARED) +ENDIF (BUILD_SHARED_LIBS) + +SET(H_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/wcsconfig.h ${CMAKE_CURRENT_SOURCE_DIR}/wcsconfig_f77.h ${CMAKE_CURRENT_SOURCE_DIR}/wcsconfig_tests.h ${CMAKE_CURRENT_SOURCE_DIR}/wcsconfig_utils.h + ${CMAKE_CURRENT_SOURCE_DIR}/C/cel.h ${CMAKE_CURRENT_SOURCE_DIR}/C/dis.h ${CMAKE_CURRENT_SOURCE_DIR}/C/fitshdr.h ${CMAKE_CURRENT_SOURCE_DIR}/C/getwcstab.h ${CMAKE_CURRENT_SOURCE_DIR}/C/lin.h ${CMAKE_CURRENT_SOURCE_DIR}/C/log.h + ${CMAKE_CURRENT_SOURCE_DIR}/C/prj.h ${CMAKE_CURRENT_SOURCE_DIR}/C/spc.h ${CMAKE_CURRENT_SOURCE_DIR}/C/sph.h ${CMAKE_CURRENT_SOURCE_DIR}/C/spx.h ${CMAKE_CURRENT_SOURCE_DIR}/C/tab.h ${CMAKE_CURRENT_SOURCE_DIR}/C/wcs.h + ${CMAKE_CURRENT_SOURCE_DIR}/C/wcserr.h ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsfix.h ${CMAKE_CURRENT_SOURCE_DIR}/C/wcshdr.h ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsprintf.h + ${CMAKE_CURRENT_SOURCE_DIR}/C/wcstrig.h ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsunits.h ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsutil.h ${CMAKE_CURRENT_SOURCE_DIR}/C/wtbarr.h +) + +SET(SRC_FILES + ${CMAKE_CURRENT_SOURCE_DIR}/C/cel.c ${CMAKE_CURRENT_SOURCE_DIR}/C/dis.c ${CMAKE_CURRENT_SOURCE_DIR}/C/fitshdr.c ${CMAKE_CURRENT_SOURCE_DIR}/C/getwcstab.c ${CMAKE_CURRENT_SOURCE_DIR}/C/lin.c ${CMAKE_CURRENT_SOURCE_DIR}/C/log.c + ${CMAKE_CURRENT_SOURCE_DIR}/C/prj.c ${CMAKE_CURRENT_SOURCE_DIR}/C/spc.c ${CMAKE_CURRENT_SOURCE_DIR}/C/sph.c ${CMAKE_CURRENT_SOURCE_DIR}/C/spx.c ${CMAKE_CURRENT_SOURCE_DIR}/C/tab.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcs.c + ${CMAKE_CURRENT_SOURCE_DIR}/C/flexed/wcsbth.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcserr.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsfix.c C/wcshdr.c + ${CMAKE_CURRENT_SOURCE_DIR}/C/flexed/wcspih.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsprintf.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcstrig.c ${CMAKE_CURRENT_SOURCE_DIR}/C/flexed/wcsulex.c + ${CMAKE_CURRENT_SOURCE_DIR}/C/flexed/wcsulex.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsunits.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsutil.c ${CMAKE_CURRENT_SOURCE_DIR}/C/wcsutrn.c +) + +INCLUDE_DIRECTORIES(${INCLUDE_DIRS}) + +ADD_LIBRARY(${LIB_NAME} ${LIB_TYPE} ${H_FILES} ${SRC_FILES}) +TARGET_LINK_LIBRARIES(${LIB_NAME} cfitsio) + +SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES VERSION ${${PROJECT_NAME}_VERSION} SOVERSION ${${PROJECT_NAME}_MAJOR_VERSION}) diff --git a/deps/wcslib/COPYING b/deps/wcslib/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/deps/wcslib/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. 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 +them 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 prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. 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. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey 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; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If 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 convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU 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 that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + 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. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +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. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + 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 +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program 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, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU 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 Lesser General +Public License instead of this License. But first, please read +. diff --git a/deps/wcslib/COPYING.LESSER b/deps/wcslib/COPYING.LESSER new file mode 100644 index 0000000..cca7fc2 --- /dev/null +++ b/deps/wcslib/COPYING.LESSER @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser 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 +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/deps/wcslib/Fortran/GNUmakefile b/deps/wcslib/Fortran/GNUmakefile new file mode 100644 index 0000000..55b3aae --- /dev/null +++ b/deps/wcslib/Fortran/GNUmakefile @@ -0,0 +1,467 @@ +#----------------------------------------------------------------------------- +# GNU makefile for building the WCSLIB 8.4 FORTRAN wrappers. +# +# Summary of the main targets +# --------------------------- +# build: Build the library +# +# clean: Delete intermediate object files. +# +# cleaner: clean, and also delete the test executables. +# +# cleanest (distclean, or realclean): cleaner, and also delete the +# object library. +# +# check (or test): Compile and run the test programs. By default they are +# executed in batch mode, and non-graphical tests only report +# "PASS" on success. Use +# +# make MODE=interactive check +# +# to run them interactively with full diagnostic output. To skip +# graphical tests even if PGPLOT is available, use +# +# make CHECK=nopgplot check +# +# tests: Compile the test programs (but don't run them). +# +# Notes: +# 1) If you need to make changes then preferably modify ../makedefs.in +# instead and re-run configure. +# +# 2) This makefile assumes that the WCSLIB 8.4 sources reside in ../C +# (as in the distribution kit). +# +# 3) twcstab assumes that ../C/wcstab.fits has already been generated by +# the corresponding C test program. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: GNUmakefile,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# Get configure settings. +SUBDIR := Fortran +include ../makedefs + +MODULES := $(sort $(patsubst %.c,%.o,$(wildcard *.c))) +MODULES += $(sort $(patsubst %.f,%.o,$(wildcard *.f))) + +ifdef BINDC + # Using Fortran 2003 BIND(C) interoperability mechanism. + MODULES += $(sort $(patsubst %.f90,%.o,$(wildcard *.f90))) + CPPFLAGS += -DBINDC +endif + +# Including getwcstab_f.c causes the sharable library to depend on CFITSIO. +MODULES := $(filter-out getwcstab_f.o,$(MODULES)) + +ifdef GETWCSTAB + FGETWCSTAB := ../C/getwcstab.o +endif + +WCSLIB := ../C/$(WCSLIB) +LIBLOCK := ../C/lib.lock + +# Build the sharable library? +ifneq "$(SHRLIB)" "" + PICLIB := ../C/libwcs-PIC.a + SHRLIB := ../C/$(SHRLIB) +endif + +CPPFLAGS += -I.. -I../C + +# Required by some test programs that use PGPLOT. +WCSLEEP := wcsleep_f.o + +vpath %.h ..:../C +vpath %.in .. + + +# For building and exercising the test suite +# ------------------------------------------ +# Test programs that don't require CFITSIO or PGPLOT. +TEST_N := tlin tdis1 tdis2 tlog tprj1 tsph tspx ttab1 twcs twcssub tpih1 \ + tfitshdr tunits twcsfix + +# Test programs that require CFITSIO (they don't need PGPLOT). +TEST_C := twcstab + +# Test programs that require PGPLOT but not PGSBOX. +TEST_P := tspc tprj2 tcel1 ttab2 ttab3 twcsmix + +# Test programs that require PGPLOT and PGSBOX. +TEST_B := tpih2 + +TESTS := $(TEST_N) + +# Do we have CFITSIO? +DO_CFITSIO := 1 +ifeq "$(CFITSIOLIB)" "" + DO_CFITSIO := 0 +endif + +ifeq "$(DO_CFITSIO)" "1" + # Yes, add test programs that use it. + TESTS += $(TEST_C) + CFITSIO_CFLAGS := $(filter-out -Wpadded,$(CFLAGS)) +endif + +# Do we have PGPLOT? +DO_PGPLOT := 0 +ifneq "$(CHECK)" "nopgplot" + DO_PGPLOT := 1 + ifeq "$(PGPLOTLIB)" "" + DO_PGPLOT := 0 + endif + + ifeq "$(DO_PGPLOT)" "1" + # Yes, add test programs that use it. + TESTS += $(TEST_P) $(TEST_B) + endif +endif + +PGSBOXLIB := ../pgsbox/libpgsbox-$(LIBVER).a +PGPLOTLIB := $(PGPLOTLIB) + +ADDRE := 0x[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]* + +# Pattern rules +#-------------- + +$(WCSLIB)(%.o) : %.c + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(RM) $% ; \ + fi + +$(WCSLIB)(%.o) : %.f + -@ echo '' + $(FC) $(FFLAGS) -c $< + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(RM) $% ; \ + fi + +$(WCSLIB)(%.o) : %.f90 + -@ echo '' + $(FC) $(FFLAGS) -c $< + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(AR) r$(ARFLAGS) $(WCSLIB) $% ; \ + $(RM) $% ; \ + fi + +$(PICLIB)(%_f.o) : $(WCSLIB)(%_f.o) + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) $(SHRFLAGS) -c $(%:.o=.c) + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(RM) $% ; \ + fi + +$(PICLIB)(%_data.o) : $(WCSLIB)(%_data.o) + -@ echo '' + $(FC) $(FFLAGS) $(SHRFLAGS) -c $(%:.o=.f) + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(RM) $% ; \ + fi + +$(PICLIB)(%_bindc.o) : $(WCSLIB)(%_bindc.o) + -@ echo '' + $(FC) $(FFLAGS) $(SHRFLAGS) -c $(%:.o=.f90) + @ if [ ! -f $(LIBLOCK) ] ; then \ + echo $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(AR) r$(ARFLAGS) $(PICLIB) $% ; \ + $(RM) $% ; \ + fi + +%.i : %.c + -@ echo '' + -@ $(RM) $@ + $(CPP) $(CPPFLAGS) $(CFLAGS) $< > $@ + +# Print out include file dependencies. +%.d : %.c + -@ echo '' + -@ $(CPP) $(CPPFLAGS) $(CFLAGS) $< | \ + sed -n -e 's|^# 1 "\([^/].*\.h\)".*|\1|p' | \ + sed -e 's|.*/||' | \ + sort -u + +%.o : %.f + -@ echo '' + $(FC) $(FFLAGS) -c $< + +%.o : %.f90 + -@ echo '' + $(FC) $(FFLAGS) -c $< + +%.fits : ../C/test/%.keyrec ../utils/tofits + ../utils/tofits < $< > $@ + +run_% : % + -@ echo '' + -@ $(TIMER) + @ if [ '$(MODE)' = interactive -o '$(VALGRIND)' ] ; then \ + printf 'Press to run $<: ' ; \ + read DUMMY ; \ + fi ; \ + if [ '$(VALGRIND)' ] ; then \ + if [ '$<' = tunits ] ; then \ + $(VALGRIND) ./$< < test/units_test ; \ + else \ + $(VALGRIND) ./$< ; \ + fi ; \ + else \ + if [ '$(filter $<, $(TEST_N) $(TEST_C))' ] ; then \ + if [ '$<' = tunits ] ; then \ + if [ '$(MODE)' = interactive ] ; then \ + ./$< < ../C/test/units_test 2>&1 | tee $<.out ; \ + else \ + ./$< < ../C/test/units_test > $<.out 2>&1 ; \ + fi ; \ + else \ + if [ '$(MODE)' = interactive ] ; then \ + ./$< < /dev/null 2>&1 | tee $<.out ; \ + else \ + ./$< < /dev/null > $<.out 2>&1 ; \ + fi ; \ + fi ; \ + if grep 'FAIL:' $<.out > /dev/null ; then \ + if [ '$(MODE)' != interactive ] ; then \ + head -2 $<.out ; \ + grep 'FAIL:' $<.out ; \ + fi ; \ + echo 'FAIL: Fortran/$<' >> test_results ; \ + elif grep 'PASS:' $<.out > /dev/null ; then \ + if [ '$(MODE)' != interactive ] ; then \ + head -2 $<.out ; \ + grep 'PASS:' $<.out ; \ + fi ; \ + echo 'PASS: Fortran/$<' >> test_results ; \ + elif [ -f 'test/$<.out' ] ; then \ + trap 'rm -f run_$<.tmp' 0 1 2 3 15 ; \ + sed -e 's/$(ADDRE)/0x
/g' \ + -e 's/chksum:.*/chksum: /' $<.out > \ + run_$<.tmp ; \ + mv -f run_$<.tmp $<.out ; \ + if cmp -s $<.out test/$<.out ; then \ + if [ '$(MODE)' != interactive ] ; then \ + head -2 $<.out ; \ + echo 'PASS: Output agrees with Fortran/test/$<.out' ; \ + fi ; \ + echo 'PASS: Fortran/$<' >> test_results ; \ + else \ + if [ '$(MODE)' != interactive ] ; then \ + cat $<.out ; \ + fi ; \ + echo '' ; \ + echo 'FAIL: Output disagrees with Fortran/test/$<.out' ; \ + echo 'FAIL: Fortran/$<' >> test_results ; \ + fi ; \ + elif [ '$(MODE)' != interactive ] ; then \ + cat $<.out ; \ + echo 'FAIL: Fortran/$<' >> test_results ; \ + fi ; \ + elif [ '$(MODE)' = interactive ] ; then \ + ./$< ; \ + else \ + if [ '$<' = tcel2 ] ; then \ + echo N | ./$< ; \ + else \ + yes | ./$< 2>&1 ; \ + fi ; \ + fi ; \ + fi + -@ echo '' + +# Static and static pattern rules +#-------------------------------- + +.PHONY : build check clean cleaner cleanest distclean install lib realclean \ + test tests uninstall + +build : lib + +lib : + @ $(MAKE) -C ../C lib + -@ echo '' + -@ echo 'Building WCSLIB Fortran wrappers...' + @ $(MAKE) --no-print-directory $(WCSLIB) + +$(WCSLIB) : $(LIBLOCK) $(MODULES:%=$(WCSLIB)(%)) + -@ echo '' + @ set *.o ; \ + if [ "$$1" != "*.o" ] ; then \ + echo $(AR) r$(ARFLAGS) $@ *.o ; \ + $(AR) r$(ARFLAGS) $@ *.o ; \ + echo $(RANLIB) $@ ; \ + $(RANLIB) $@ ; \ + $(RM) *.o ; \ + fi + -@ $(RM) $< + @ if [ "$(SHRLIB)" != "" ] ; then \ + $(MAKE) --no-print-directory $(SHRLIB) ; \ + fi + +$(SHRLIB) : $(PICLIB) + -@ echo '' + -@ $(RM) -r tmp + mkdir tmp && \ + cd tmp && \ + trap 'cd .. ; $(RM) -r tmp' 0 1 2 3 15 ; \ + $(AR) x ../$(PICLIB) && \ + $(SHRLD) -o $(@F) *.o $(LDFLAGS) $(LIBS) && \ + mv $(@F) ../../C + +$(PICLIB) : $(LIBLOCK) $(MODULES:%.o=$(PICLIB)(%.o)) + -@ echo '' + @ set *.o ; \ + if [ "$$1" != "*.o" ] ; then \ + echo $(AR) r$(ARFLAGS) $@ *.o ; \ + $(AR) r$(ARFLAGS) $@ *.o ; \ + $(RM) *.o ; \ + fi + -@ $(RM) $< + +$(LIBLOCK) : FORCE + @ $(RM) *.o + @ touch $@ + +install : build + $(MAKE) -C ../C install + $(INSTALL) -m 444 *.inc $(INCDIR) + +uninstall : + $(MAKE) -C ../C uninstall + +clean : + - $(RM) *.o $(LIBLOCK) *.i a.out t*.out core fort.* *.dSYM + - $(RM) -r $(EXTRA_CLEAN) + +cleaner : clean + - $(RM) .gdb_history + - $(RM) $(TEST_N) + - $(RM) $(TEST_P) tpih2 twcstab + - $(RM) fitshdr.fits pih.fits TPV7.fits test_results + +cleanest distclean realclean : cleaner + - $(RM) $(WCSLIB) $(PICLIB) $(SHRLIB) + +check test : tests $(TESTS:%=run_%) + +tests : $(TESTS) + +$(TEST_N) : % : test/%.f $(WCSLIB) + -@ echo '' + $(FC) $(FFLAGS) -o $@ $< $(LDFLAGS) $(WCSLIB) $(LIBS) + -@ $(RM) $@.o + +$(TEST_P) : % : test/%.f $(WCSLIB) $(WCSLEEP) + -@ echo '' + $(FC) $(FFLAGS) -o $@ $< $(LDFLAGS) $(WCSLIB) $(WCSLEEP) $(PGPLOTLIB) $(LIBS) + -@ $(RM) $@.o + +tpih2 : % : test/%.f $(PGSBOXLIB) $(WCSLIB) $(WCSLEEP) + -@ echo '' + $(FC) $(FFLAGS) -o $@ $< $(LDFLAGS) $(PGSBOXLIB) $(WCSLIB) \ + $(WCSLEEP) $(PGPLOTLIB) $(LIBS) + -@ $(RM) $@.o + +twcstab : test/twcstab.f getwcstab_f.o getwcstab.inc $(FGETWCSTAB) \ + $(WCSLIB) + -@ echo '' + $(FC) $(FFLAGS) -o $@ $< getwcstab_f.o $(FGETWCSTAB) \ + $(LDFLAGS) $(CFITSIOLIB) $(WCSLIB) $(LIBS) + -@ $(RM) $@.o $(FGETWCSTAB) + +getwcstab_f.o : getwcstab_f.c getwcstab.h + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) $(CFITSIO_CFLAGS) $(CFITSIOINC) -c $< + +../C/getwcstab.o :: + -@ echo '' + $(MAKE) -C ../C getwcstab.o + +$(WCSLEEP) : test/wcsleep_f.c + -@ echo '' + $(CC) $(CPPFLAGS) $(CFLAGS) -c $< + +$(PGSBOXLIB) : + -@ echo '' + $(MAKE) -C ../pgsbox lib + +../utils/tofits : ../utils/tofits.c + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $< + +../C/wcstab.fits : ; + +GNUmakefile : ../makedefs ; + +../makedefs ../wcsconfig.h ../wcsconfig_f77.h : makedefs.in wcsconfig.h.in \ + wcsconfig_f77.h.in ../config.status + -@ $(RM) ../wcsconfig.h ../wcsconfig_f77.h + cd .. && ./config.status + +show :: + -@ echo ' BINDC := $(BINDC)' + -@ echo ' MODULES := $(MODULES)' + -@ echo ' DO_CFITSIO := $(DO_CFITSIO)' + -@ echo ' DO_PGPLOT := $(DO_PGPLOT)' + -@ echo ' TESTS := $(TESTS)' + +# Dependencies (use the %.d pattern rule to list them) +#----------------------------------------------------- + +$(WCSLIB)(cel_f.o) : cel.h prj.h wcsconfig_f77.h wcserr.h wcsutil.h +$(WCSLIB)(dis_f.o) : dis.h wcsconfig_f77.h wcserr.h wcsutil.h +$(WCSLIB)(fitshdr_f.o) : fitshdr.h wcsconfig.h wcsconfig_f77.h wcsutil.h +$(WCSLIB)(getwcstab_f.o): getwcstab.h wcsconfig_f77.h +$(WCSLIB)(lin_f.o) : dis.h lin.h wcsconfig_f77.h wcserr.h wcsutil.h +$(WCSLIB)(log_f.o) : log.h wcsconfig_f77.h +$(WCSLIB)(prj_f.o) : prj.h wcsconfig_f77.h wcserr.h wcsutil.h +$(WCSLIB)(spc_f.o) : spc.h spx.h wcsconfig_f77.h wcserr.h wcsutil.h +$(WCSLIB)(sph_f.o) : sph.h wcsconfig_f77.h +$(WCSLIB)(spx_f.o) : spx.h wcsconfig_f77.h wcserr.h +$(WCSLIB)(tab_f.o) : tab.h wcsconfig_f77.h wcserr.h wcsutil.h +$(WCSLIB)(wcs_f.o) : cel.h lin.h prj.h spc.h spx.h wcs.h \ + wcsconfig_f77.h wcserr.h wcsutil.h +$(WCSLIB)(wcsfix_f.o) : cel.h lin.h prj.h spc.h spx.h wcs.h \ + wcsconfig_f77.h wcserr.h wcsfix.h +$(WCSLIB)(wcshdr_f.o) : cel.h lin.h prj.h spc.h spx.h wcs.h \ + wcsconfig_f77.h wcshdr.h +$(WCSLIB)(wcsunits_f.o) : wcsconfig_f77.h wcserr.h wcsunits.h wcsutil.h + +tcel1 : cel.inc prj.inc +tdis1 : lin.inc wcs.inc wcserr.inc wcshdr.inc +tdis2 : dis.inc lin.inc wcs.inc wcserr.inc wcshdr.inc +tfitshdr: fitshdr.inc wcshdr.inc +tlin : lin.inc +tlog : log.inc +tpih1 : wcs.inc wcsfix.inc wcshdr.inc +tpih2 : wcs.inc wcshdr.inc +tprj1 : prj.inc +tprj2 : prj.inc +tspc : spc.inc spx.inc +tspx : spx.inc +ttab1 : tab.inc +ttab2 : tab.inc +ttab3 : prj.inc tab.inc +tunits : wcsunits.inc +twcs : cel.inc prj.inc wcs.inc wcserr.inc wcsmath.inc +twcsfix : wcs.inc wcsfix.inc wcsunits.inc +twcsmix : cel.inc lin.inc prj.inc wcs.inc +twcssub : wcs.inc wcserr.inc +twcstab : getwcstab.inc wcs.inc wcsfix.inc wcshdr.inc + +run_tdis1 run_tdis2 : TPV7.fits +run_tfitshdr : fitshdr.fits +run_tpih1 run_tpih2: pih.fits +run_twcstab: ../C/wcstab.fits diff --git a/deps/wcslib/Fortran/cel.inc b/deps/wcslib/Fortran/cel.inc new file mode 100644 index 0000000..91fde95 --- /dev/null +++ b/deps/wcslib/Fortran/cel.inc @@ -0,0 +1,80 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: cel.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL CELPUT, CELPTC, CELPTD, CELPTI, + : CELGET, CELGTC, CELGTD, CELGTI, + : CELINI, CELFREE, CELSIZE, CELENQ, CELPRT, CELPERR, + : CELSET, CELX2S, CELS2X + + INTEGER CELPUT, CELPTC, CELPTD, CELPTI, + : CELGET, CELGTC, CELGTD, CELGTI, + : CELINI, CELFREE, CELSIZE, CELENQ, CELPRT, CELPERR, + : CELSET, CELX2S, CELS2X + +* Length of the CELPRM data structure (INTEGER array) on 64-bit +* machines. Only needs to be 144 on 32-bit machines. + INTEGER CELLEN + PARAMETER (CELLEN = 150) + +* Codes for CEL data structure elements used by CELPUT and CELGET. + INTEGER CEL_FLAG, CEL_OFFSET, CEL_PHI0, CEL_THETA0, CEL_REF, + : CEL_PRJ + + PARAMETER (CEL_FLAG = 100) + PARAMETER (CEL_OFFSET = 101) + PARAMETER (CEL_PHI0 = 102) + PARAMETER (CEL_THETA0 = 103) + PARAMETER (CEL_REF = 104) + PARAMETER (CEL_PRJ = 105) + +* Codes for CEL data structure elements used by CELGET (only). + INTEGER CEL_EULER, CEL_LATPRQ, CEL_ISOLAT, CEL_ERR + + PARAMETER (CEL_EULER = 200) + PARAMETER (CEL_LATPRQ = 201) + PARAMETER (CEL_ISOLAT = 202) + PARAMETER (CEL_ERR = 203) + +* Codes used by CELENQ. + INTEGER CELENQ_SET, CELENQ_BYP + + PARAMETER (CELENQ_SET = 2) + PARAMETER (CELENQ_BYP = 4) + +* Error codes and messages. + INTEGER CELERR_SUCCESS, CELERR_NULL_POINTER, CELERR_BAD_PARAM, + : CELERR_BAD_COORD_TRANS, CELERR_ILL_COORD_TRANS, + : CELERR_BAD_PIX, CELERR_BAD_WORLD + + PARAMETER (CELERR_SUCCESS = 0) + PARAMETER (CELERR_NULL_POINTER = 1) + PARAMETER (CELERR_BAD_PARAM = 2) + PARAMETER (CELERR_BAD_COORD_TRANS = 3) + PARAMETER (CELERR_ILL_COORD_TRANS = 4) + PARAMETER (CELERR_BAD_PIX = 5) + PARAMETER (CELERR_BAD_WORLD = 6) + + CHARACTER CEL_ERRMSG(0:6)*80 + COMMON /CEL_DATA/ CEL_ERRMSG diff --git a/deps/wcslib/Fortran/cel_bindc.f90 b/deps/wcslib/Fortran/cel_bindc.f90 new file mode 100644 index 0000000..7a9a687 --- /dev/null +++ b/deps/wcslib/Fortran/cel_bindc.f90 @@ -0,0 +1,74 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: cel_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION CELPTC (CEL, WHAT, VALUE, I) + INTEGER :: CEL(*), WHAT + CHARACTER :: VALUE(*) + INTEGER :: I + + INTERFACE + INTEGER(C_INT) FUNCTION CELPTC_C (CEL, WHAT, VALUE, I) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: CEL(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + INTEGER(C_INT) :: I + END FUNCTION CELPTC_C + END INTERFACE + + CELPTC = CELPTC_C (CEL, WHAT, VALUE, I) +END FUNCTION CELPTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION CELGTC (CEL, WHAT, VALUE) + INTEGER :: CEL(*), WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION CELGTC_C (CEL, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: CEL(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION CELGTC_C + END INTERFACE + + CELGTC = CELGTC_C (CEL, WHAT, VALUE) +END FUNCTION CELGTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION CELPERR (CEL, PREFIX) + INTEGER :: CEL(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION CELPERR_C (CEL, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: CEL(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION CELPERR_C + END INTERFACE + + CELPERR = CELPERR_C (CEL, PREFIX) +END FUNCTION CELPERR diff --git a/deps/wcslib/Fortran/cel_data.f b/deps/wcslib/Fortran/cel_data.f new file mode 100644 index 0000000..7727962 --- /dev/null +++ b/deps/wcslib/Fortran/cel_data.f @@ -0,0 +1,40 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: cel_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA CEL_BLOCK_DATA + + CHARACTER CEL_ERRMSG(0:6)*80 + + COMMON /CEL_DATA/ CEL_ERRMSG + + DATA CEL_ERRMSG / + : 'Success', + : 'Null celprm pointer passed', + : 'Invalid projection parameters', + : 'Invalid coordinate transformation parameters', + : 'Ill-conditioned coordinate transformation parameters', + : 'One or more of the (x,y) coordinates were invalid', + : 'One or more of the (lng,lat) coordinates were invalid'/ + + END diff --git a/deps/wcslib/Fortran/cel_f.c b/deps/wcslib/Fortran/cel_f.c new file mode 100644 index 0000000..6f0e031 --- /dev/null +++ b/deps/wcslib/Fortran/cel_f.c @@ -0,0 +1,330 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: cel_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include +#include +#include + +// Fortran name mangling. +#include +#define celput_ F77_FUNC(celput, CELPUT) +#define celptc_ F77_FUNC(celptc, CELPTC) +#define celptd_ F77_FUNC(celptd, CELPTD) +#define celpti_ F77_FUNC(celpti, CELPTI) +#define celget_ F77_FUNC(celget, CELGET) +#define celgtc_ F77_FUNC(celgtc, CELGTC) +#define celgtd_ F77_FUNC(celgtd, CELGTD) +#define celgti_ F77_FUNC(celgti, CELGTI) + +#define celini_ F77_FUNC(celini, CELINI) +#define celfree_ F77_FUNC(celfree, CELFREE) +#define celsize_ F77_FUNC(celsize, CELSIZE) +#define celenq_ F77_FUNC(celenq, CELENQ) +#define celprt_ F77_FUNC(celprt, CELPRT) +#define celperr_ F77_FUNC(celperr, CELPERR) +#define celset_ F77_FUNC(celset, CELSET) +#define celx2s_ F77_FUNC(celx2s, CELX2S) +#define cels2x_ F77_FUNC(cels2x, CELS2X) + +#ifdef BINDC + #undef celptc_ + #define celptc_ celptc_c + + #undef celgtc_ + #define celgtc_ celgtc_c + + #undef celperr_ + #define celperr_ celperr_c +#endif + +// Must match the values set in cel.inc. +#define CEL_FLAG 100 +#define CEL_OFFSET 101 +#define CEL_PHI0 102 +#define CEL_THETA0 103 +#define CEL_REF 104 +#define CEL_PRJ 105 + +#define CEL_EULER 200 +#define CEL_LATPRQ 201 +#define CEL_ISOLAT 202 +#define CEL_ERR 203 + +//---------------------------------------------------------------------------- + +int celput_(int *cel, const int *what, const void *value, const int *i) + +{ + // Cast pointers. + struct celprm *celp = (struct celprm *)cel; + const int *ivalp = (const int *)value; + const double *dvalp = (const double *)value; + + if (celp->flag == 1 || celp->flag < 0) { + // Preserve bypass mode. + celp->flag = 1; + } else { + celp->flag = 0; + } + + int *icelp; + switch (*what) { + case CEL_FLAG: + celp->flag = *ivalp; + break; + case CEL_OFFSET: + celp->offset = *ivalp; + break; + case CEL_PHI0: + celp->phi0 = *dvalp; + break; + case CEL_THETA0: + celp->theta0 = *dvalp; + break; + case CEL_REF: + celp->ref[*i-1] = *dvalp; + break; + case CEL_PRJ: + icelp = cel + ((int *)(&(celp->prj)) - (int *)celp); + for (size_t l = 0; l < PRJLEN; l++) { + *(icelp++) = *(ivalp++); + } + break; + default: + return 1; + } + + return 0; +} + +int celptc_(int *cel, const int *what, const char *value, const int *i) +{ + return celput_(cel, what, value, i); +} + +int celptd_(int *cel, const int *what, const double *value, const int *i) +{ + return celput_(cel, what, value, i); +} + +int celpti_(int *cel, const int *what, const int *value, const int *i) +{ + return celput_(cel, what, value, i); +} + +//---------------------------------------------------------------------------- + +int celget_(const int *cel, const int *what, void *value) + +{ + // Cast pointers. + const struct celprm *celp = (const struct celprm *)cel; + int *ivalp = (int *)value; + double *dvalp = (double *)value; + + const int *icelp; + switch (*what) { + case CEL_FLAG: + *ivalp = celp->flag; + break; + case CEL_OFFSET: + *ivalp = celp->offset; + break; + case CEL_PHI0: + *dvalp = celp->phi0; + break; + case CEL_THETA0: + *dvalp = celp->theta0; + break; + case CEL_REF: + for (int k = 0; k < 4; k++) { + *(dvalp++) = celp->ref[k]; + } + break; + case CEL_PRJ: + icelp = (int *)(&(celp->prj)); + for (size_t l = 0; l < PRJLEN; l++) { + *(ivalp++) = *(icelp++); + } + break; + case CEL_EULER: + for (int k = 0; k < 5; k++) { + *(dvalp++) = celp->euler[k]; + } + break; + case CEL_LATPRQ: + *ivalp = celp->latpreq; + break; + case CEL_ISOLAT: + *ivalp = celp->isolat; + break; + case CEL_ERR: + // Copy the contents of the wcserr struct. + if (celp->err) { + icelp = (int *)(celp->err); + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(icelp++); + } + } else { + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + default: + return 1; + } + + return 0; +} + +int celgtc_(const int *cel, const int *what, char *value) +{ + return celget_(cel, what, value); +} + +int celgtd_(const int *cel, const int *what, double *value) +{ + return celget_(cel, what, value); +} + +int celgti_(const int *cel, const int *what, int *value) +{ + return celget_(cel, what, value); +} + +//---------------------------------------------------------------------------- + +int celini_(int *cel) + +{ + return celini((struct celprm *)cel); +} + +//---------------------------------------------------------------------------- + +int celfree_(int *cel) + +{ + return celfree((struct celprm *)cel); +} + +//---------------------------------------------------------------------------- + +int celsize_(const int *cel, int sizes[2]) + +{ + return celsize((const struct celprm *)cel, sizes); +} + +//---------------------------------------------------------------------------- + +int celenq_(const int *cel, int *enquiry) + +{ + return celenq((const struct celprm *)cel, *enquiry); +} + +//---------------------------------------------------------------------------- + +int celprt_(const int *cel) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling CELPRT in the Fortran code. + fflush(NULL); + + return celprt((const struct celprm *)cel); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int celperr_(int *cel, const char prefix[72]) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. + // If not, try CALL FLUSH(6) before calling CELPERR in the Fortran code. + fflush(NULL); + + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + return celperr((struct celprm *)cel, prefix_); +} + +//---------------------------------------------------------------------------- + +int celset_(int *cel) + +{ + return celset((struct celprm *)cel); +} + +//---------------------------------------------------------------------------- + +int celx2s_( + int *cel, + const int *nx, + const int *ny, + const int *sxy, + const int *sll, + const double x[], + const double y[], + double phi[], + double theta[], + double lng[], + double lat[], + int stat[]) + +{ + return celx2s((struct celprm *)cel, *nx, *ny, *sxy, *sll, x, y, phi, theta, + lng, lat, stat); +} + +//---------------------------------------------------------------------------- + +int cels2x_( + int *cel, + const int *nlng, + const int *nlat, + const int *sll, + const int *sxy, + const double lng[], + const double lat[], + double phi[], + double theta[], + double x[], + double y[], + int stat[]) + +{ + return cels2x((struct celprm *)cel, *nlng, *nlat, *sll, *sxy, lng, lat, + phi, theta, x, y, stat); +} diff --git a/deps/wcslib/Fortran/dis.inc b/deps/wcslib/Fortran/dis.inc new file mode 100644 index 0000000..7acb09e --- /dev/null +++ b/deps/wcslib/Fortran/dis.inc @@ -0,0 +1,95 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: dis.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL DISALLOC, + : DISPUT, DISPTC, DISPTD, DISPTI, + : DISGET, DISGTC, DISGTD, DISGTI, + : DISNDP, DPFILL, DPKEYI, DPKEYD, + : DISINI, DISINIT, DISCPY, DISFREE, DISSIZE, DISENQ, + : DISPRT, DISPERR, DISHDO, + : DISSET, DISP2X, DISX2P, DISWARP + + INTEGER DISALLOC, + : DISPUT, DISPTC, DISPTD, DISPTI, + : DISGET, DISGTC, DISGTD, DISGTI, + : DISNDP, DPFILL, DPKEYI, DPKEYD, + : DISINI, DISINIT, DISCPY, DISFREE, DISSIZE, DISENQ, + : DISPRT, DISPERR, DISHDO, + : DISSET, DISP2X, DISX2P, DISWARP + +* Length of the DISPRM and DPKEY data structures (INTEGER arrays) +* on 64-bit machines. DISLEN only needs to be 26 on 32-bit +* machines. DPLEN does not differ. + INTEGER DISLEN, DPLEN + PARAMETER (DISLEN = 42) + PARAMETER (DPLEN = 22) + +* Codes for DIS data structure elements used by DISPUT and DISGET. + INTEGER DIS_FLAG, DIS_NAXIS, DIS_DTYPE, DIS_NDP, DIS_NDPMAX, + : DIS_DP, DIS_TOTDIS, DIS_MAXDIS + + PARAMETER (DIS_FLAG = 100) + PARAMETER (DIS_NAXIS = 101) + PARAMETER (DIS_DTYPE = 102) + PARAMETER (DIS_NDP = 103) + PARAMETER (DIS_NDPMAX = 104) + PARAMETER (DIS_DP = 105) + PARAMETER (DIS_TOTDIS = 106) + PARAMETER (DIS_MAXDIS = 107) + +* Codes for DIS data structure elements used by DISGET (only). + INTEGER DIS_DOCORR, DIS_NHAT, DIS_AXMAP, DIS_OFFSET, DIS_SCALE, + : DIS_IPARM, DIS_DPARM, DIS_INAXIS, DIS_NDIS, DIS_ERR + PARAMETER (DIS_DOCORR = 200) + PARAMETER (DIS_NHAT = 201) + PARAMETER (DIS_AXMAP = 202) + PARAMETER (DIS_OFFSET = 203) + PARAMETER (DIS_SCALE = 204) + PARAMETER (DIS_IPARM = 205) + PARAMETER (DIS_DPARM = 206) + PARAMETER (DIS_INAXIS = 207) + PARAMETER (DIS_NDIS = 208) + PARAMETER (DIS_ERR = 209) + +* Codes used by DISENQ. + INTEGER DISENQ_MEM, DISENQ_SET, DISENQ_BYP + + PARAMETER (DISENQ_MEM = 1) + PARAMETER (DISENQ_SET = 2) + PARAMETER (DISENQ_BYP = 4) + +* Error codes and messages. + INTEGER DISERR_SUCCESS, DISERR_NULL_POINTER, DISERR_MEMORY, + : DISERR_BAD_PARAM, DISERR_DISTORT, DISERR_DEDISTORT + + PARAMETER (DISERR_SUCCESS = 0) + PARAMETER (DISERR_NULL_POINTER = 1) + PARAMETER (DISERR_MEMORY = 2) + PARAMETER (DISERR_BAD_PARAM = 3) + PARAMETER (DISERR_DISTORT = 4) + PARAMETER (DISERR_DEDISTORT = 5) + + CHARACTER DIS_ERRMSG(0:5)*80 + COMMON /DIS_DATA/ DIS_ERRMSG diff --git a/deps/wcslib/Fortran/dis_bindc.f90 b/deps/wcslib/Fortran/dis_bindc.f90 new file mode 100644 index 0000000..b7782d5 --- /dev/null +++ b/deps/wcslib/Fortran/dis_bindc.f90 @@ -0,0 +1,96 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: dis_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION DISPTC (DEREF, DIS, WHAT, VALUE, I, K) + INTEGER :: DEREF, DIS(*), WHAT + CHARACTER :: VALUE(*) + INTEGER :: I, K + + INTERFACE + INTEGER(C_INT) FUNCTION DISPTC_C (DEREF, DIS, WHAT, VALUE, I, K) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: DEREF, DIS(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + INTEGER(C_INT) :: I, K + END FUNCTION DISPTC_C + END INTERFACE + + DISPTC = DISPTC_C (DEREF, DIS, WHAT, VALUE, I, K) +END FUNCTION DISPTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION DISGTC (DEREF, DIS, WHAT, VALUE) + INTEGER :: DEREF, DIS(*), WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION DISGTC_C (DEREF, DIS, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: DEREF, DIS(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION DISGTC_C + END INTERFACE + + DISGTC = DISGTC_C (DEREF, DIS, WHAT, VALUE) +END FUNCTION DISGTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION DPFILL (DP, KEYWORD, FIELD, J, TYPE, IVAL, FVAL) + INTEGER :: DP + CHARACTER :: KEYWORD(*), FIELD(*) + INTEGER :: J, TYPE, IVAL + DOUBLE PRECISION FVAL + + INTERFACE + INTEGER(C_INT) FUNCTION DPFILL_C (DP, KEYWORD, FIELD, J, TYPE, IVAL, & + FVAL) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: DP + CHARACTER(KIND=C_CHAR, LEN=1) :: KEYWORD(72), FIELD(72) + INTEGER(C_INT) :: J, TYPE, IVAL + REAL(C_DOUBLE) :: FVAL + END FUNCTION DPFILL_C + END INTERFACE + + DPFILL = DPFILL_C (DP, KEYWORD, FIELD, J, TYPE, IVAL, FVAL) +END FUNCTION DPFILL + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION DISPERR (DEREF, DIS, PREFIX) + INTEGER :: DEREF, DIS(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION DISPERR_C (DEREF, DIS, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: DEREF, DIS(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION DISPERR_C + END INTERFACE + + DISPERR = DISPERR_C (DEREF, DIS, PREFIX) +END FUNCTION DISPERR diff --git a/deps/wcslib/Fortran/dis_data.f b/deps/wcslib/Fortran/dis_data.f new file mode 100644 index 0000000..d80e385 --- /dev/null +++ b/deps/wcslib/Fortran/dis_data.f @@ -0,0 +1,39 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: dis_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA DIS_BLOCK_DATA + + CHARACTER DIS_ERRMSG(0:5)*80 + + COMMON /DIS_DATA/ DIS_ERRMSG + + DATA DIS_ERRMSG / + : 'Success', + : 'Null disprm pointer passed', + : 'Memory allocation failed', + : 'Invalid parameter value', + : 'Distort error', + : 'De-distort error'/ + + END diff --git a/deps/wcslib/Fortran/dis_f.c b/deps/wcslib/Fortran/dis_f.c new file mode 100644 index 0000000..08b965c --- /dev/null +++ b/deps/wcslib/Fortran/dis_f.c @@ -0,0 +1,605 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: dis_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*============================================================================= +* +* In these wrappers, if +* +* deref == 0, then dis is the address of a Fortran INTEGER array of length +* DISLEN containing a disprm struct. +* +* deref == 1, then dis is the address of a Fortran INTEGER(2) array holding +* the address of a disprm struct, such as is returned by +* disalloc_(), or linget() with LIN_DISPRE or LIN_DISSEQ. +* +*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include +#include +#include + +// Fortran name mangling. +#include +#define disalloc_ F77_FUNC(disalloc, DISALLOC) +#define disput_ F77_FUNC(disput, DISPUT) +#define disptc_ F77_FUNC(disptc, DISPTC) +#define disptd_ F77_FUNC(disptd, DISPTD) +#define dispti_ F77_FUNC(dispti, DISPTI) +#define disget_ F77_FUNC(disget, DISGET) +#define disgtc_ F77_FUNC(disgtc, DISGTC) +#define disgtd_ F77_FUNC(disgtd, DISGTD) +#define disgti_ F77_FUNC(disgti, DISGTI) + +#define disndp_ F77_FUNC(disndp, DISNDP) +#define dpfill_ F77_FUNC(dpfill, DPFILL) +#define dpkeyi_ F77_FUNC(dpkeyi, DPKEYI) +#define dpkeyd_ F77_FUNC(dpkeyd, DPKEYD) +#define disini_ F77_FUNC(disini, DISINI) +#define disinit_ F77_FUNC(disinit, DISINIT) +#define discpy_ F77_FUNC(discpy, DISCPY) +#define disfree_ F77_FUNC(disfree, DISFREE) +#define dissize_ F77_FUNC(dissize, DISSIZE) +#define disenq_ F77_FUNC(disenq, DISENQ) +#define disprt_ F77_FUNC(disprt, DISPRT) +#define disperr_ F77_FUNC(disperr, DISPERR) +#define dishdo_ F77_FUNC(dishdo, DISHDO) +#define disset_ F77_FUNC(disset, DISSET) +#define disp2x_ F77_FUNC(disp2x, DISP2X) +#define disx2p_ F77_FUNC(disx2p, DISX2P) +#define diswarp_ F77_FUNC(diswarp, DISWARP) + +#ifdef BINDC + #undef disptc_ + #define disptc_ disptc_c + + #undef disgtc_ + #define disgtc_ disgtc_c + + #undef dpfill_ + #define dpfill_ dpfill_c + + #undef disperr_ + #define disperr_ disperr_c +#endif + +// Must match the values set in dis.inc. +#define DIS_FLAG 100 +#define DIS_NAXIS 101 +#define DIS_DTYPE 102 +#define DIS_NDP 103 +#define DIS_NDPMAX 104 +#define DIS_DP 105 +#define DIS_TOTDIS 106 +#define DIS_MAXDIS 107 + +#define DIS_DOCORR 200 +#define DIS_NHAT 201 +#define DIS_AXMAP 202 +#define DIS_OFFSET 203 +#define DIS_SCALE 204 +#define DIS_IPARM 205 +#define DIS_DPARM 206 +#define DIS_INAXIS 207 +#define DIS_NDIS 208 +#define DIS_ERR 209 + +//---------------------------------------------------------------------------- + +// disp should be the address of an INTEGER(2) array. On return it holds +// the address of an allocated disprm struct. + +int disalloc_(int *disp) + +{ + if ((*(struct disprm **)disp = calloc(1, sizeof(struct disprm))) == 0x0) { + return DISERR_MEMORY; + } + + return 0; +} + +//---------------------------------------------------------------------------- + +int disput_( + const int *deref, + int *dis, + const int *what, + const void *value, + const int *j, + const int *dummy) + +{ + // Avert nuisance compiler warnings about unused parameters. + (void)dummy; + + // Cast pointers. + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + const char *cvalp = (const char *)value; + const int *ivalp = (const int *)value; + const double *dvalp = (const double *)value; + + // Convert 1-relative FITS (and Fortran) axis numbers and parameter + // indices to 0-relative C array indices. + int j0 = *j - 1; + + // Preserve bypass mode. + int flag = 0; + if (disp->flag == 1 || disp->flag < 0) flag = 1; + + switch (*what) { + case DIS_FLAG: + disp->flag = *ivalp; + break; + case DIS_NAXIS: + disp->naxis = *ivalp; + disp->flag = flag; + break; + case DIS_DTYPE: + wcsutil_strcvt(72, '\0', 0, cvalp, disp->dtype[j0]); + disp->flag = 0; + break; + case DIS_NDP: + case DIS_NDPMAX: + return 1; + break; + case DIS_DP: + // Use DPFILL to create the struct. + memcpy((char *)(disp->dp + disp->ndp), cvalp, DPLEN*sizeof(int)); + (disp->ndp)++; + disp->flag = flag; + break; + case DIS_TOTDIS: + disp->totdis = *dvalp; + break; + case DIS_MAXDIS: + disp->maxdis[j0] = *dvalp; + break; + default: + return 1; + } + + return 0; +} + +int disptc_(const int *deref, int *dis, const int *what, const char *value, + const int *j, const int *k) +{ + return disput_(deref, dis, what, value, j, k); +} + +int disptd_(const int *deref, int *dis, const int *what, const double *value, + const int *j, const int *k) +{ + return disput_(deref, dis, what, value, j, k); +} + +int dispti_(const int *deref, int *dis, const int *what, const int *value, + const int *j, const int *k) +{ + return disput_(deref, dis, what, value, j, k); +} + +//---------------------------------------------------------------------------- + +int disget_(const int *deref, const int *dis, const int *what, void *value) + +{ + // Cast pointers. + const struct disprm *disp; + if (*deref == 0) { + disp = (const struct disprm *)dis; + } else { + disp = *(const struct disprm **)dis; + } + + char *cvalp = (char *)value; + int *ivalp = (int *)value; + double *dvalp = (double *)value; + + int naxis = disp->naxis; + + switch (*what) { + case DIS_FLAG: + *ivalp = disp->flag; + break; + case DIS_NAXIS: + *ivalp = naxis; + break; + case DIS_DTYPE: + for (int j = 0; j < naxis; j++) { + wcsutil_strcvt(72, ' ', 0, disp->dtype[j], cvalp); + cvalp += 72; + } + break; + case DIS_NDP: + *ivalp = disp->ndp; + break; + case DIS_NDPMAX: + *ivalp = disp->ndpmax; + break; + case DIS_DP: + memcpy(cvalp, (char *)disp->dp, disp->ndp*DPLEN*sizeof(int)); + break; + case DIS_TOTDIS: + *dvalp = disp->totdis; + break; + case DIS_MAXDIS: + for (int j = 0; j < naxis; j++) { + *(dvalp++) = disp->maxdis[j]; + } + break; + case DIS_DOCORR: + for (int j = 0; j < naxis; j++) { + *(ivalp++) = disp->docorr[j]; + } + break; + case DIS_NHAT: + for (int j = 0; j < naxis; j++) { + *(ivalp++) = disp->Nhat[j]; + } + break; + case DIS_AXMAP: + for (int j = 0; j < naxis; j++) { + for (int k = 0; k < naxis; k++) { + *(ivalp++) = disp->axmap[j][k]; + } + } + break; + case DIS_OFFSET: + for (int j = 0; j < naxis; j++) { + for (int k = 0; k < naxis; k++) { + *(dvalp++) = disp->offset[j][k]; + } + } + break; + case DIS_SCALE: + for (int j = 0; j < naxis; j++) { + for (int k = 0; k < naxis; k++) { + *(dvalp++) = disp->scale[j][k]; + } + } + break; + case DIS_IPARM: + for (int j = 0; j < naxis; j++) { + for (int k = 0; k < disp->iparm[j][0]; k++) { + *(ivalp++) = disp->iparm[j][k]; + } + } + break; + case DIS_DPARM: + for (int j = 0; j < naxis; j++) { + for (int k = 0; k < disp->iparm[j][1]; k++) { + *(dvalp++) = disp->dparm[j][k]; + } + } + break; + case DIS_INAXIS: + *ivalp = disp->i_naxis; + break; + case DIS_NDIS: + *ivalp = disp->ndis; + break; + case DIS_ERR: + // Copy the contents of the wcserr struct. + if (disp->err) { + const int *idisp = (int *)(disp->err); + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(idisp++); + } + } else { + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + default: + return 1; + } + + return 0; +} + +int disgtc_(const int *deref, const int *dis, const int *what, char *value) +{ + return disget_(deref, dis, what, value); +} + +int disgtd_(const int *deref, const int *dis, const int *what, double *value) +{ + return disget_(deref, dis, what, value); +} + +int disgti_(const int *deref, const int *dis, const int *what, int *value) +{ + return disget_(deref, dis, what, value); +} + +//---------------------------------------------------------------------------- + +int disndp_(int *ndpmax) { return disndp(*ndpmax); } + +//---------------------------------------------------------------------------- + +// keyword and field should be null-terminated, or else of length 72 in which +// case trailing blanks are not significant. + +int dpfill_( + const int *dp, + const char *keyword, + const char *field, + int *j, + int *type, + int *ival, + double *fval) + +{ + char keyword_[73], field_[73]; + wcsutil_strcvt(72, '\0', 1, keyword, keyword_); + wcsutil_strcvt(72, '\0', 1, field, field_); + + return dpfill((struct dpkey *)dp, keyword_, field_, *j, *type, *ival, + *fval); +} + +//---------------------------------------------------------------------------- + +int dpkeyi_( + const int *dp) + +{ + return dpkeyi((struct dpkey *)dp); +} + +//---------------------------------------------------------------------------- + +double dpkeyd_( + const int *dp) + +{ + return dpkeyd((struct dpkey *)dp); +} + +//---------------------------------------------------------------------------- + +int disini_(const int *deref, const int *naxis, int *dis) + +{ + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + return disini(1, *naxis, disp); +} + +//---------------------------------------------------------------------------- + +int disinit_(const int *deref, const int *naxis, int *dis, int *ndpmax) + +{ + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + return disinit(1, *naxis, disp, *ndpmax); +} + +//---------------------------------------------------------------------------- + +int discpy_(const int *deref, const int *dissrc, int *disdst) + +{ + const struct disprm *dissrcp; + if ((*deref&1) == 0) { + dissrcp = (const struct disprm *)dissrc; + } else { + dissrcp = *(const struct disprm **)dissrc; + } + + struct disprm *disdstp; + if ((*deref&2) == 0) { + disdstp = (struct disprm *)disdst; + } else { + disdstp = *(struct disprm **)disdst; + } + + return discpy(1, dissrcp, disdstp); +} + +//---------------------------------------------------------------------------- + +int disfree_(const int *deref, int *dis) + +{ + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + return disfree(disp); +} + +//---------------------------------------------------------------------------- + +int dissize_(const int *dis, int sizes[2]) + +{ + return dissize((const struct disprm *)dis, sizes); +} + +//---------------------------------------------------------------------------- + +int disenq_(const int *dis, int *enquiry) + +{ + return disenq((const struct disprm *)dis, *enquiry); +} + +//---------------------------------------------------------------------------- + +int disprt_(const int *deref, const int *dis) + +{ + const struct disprm *disp; + if (*deref == 0) { + disp = (const struct disprm *)dis; + } else { + disp = *(const struct disprm **)dis; + } + + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling DISPRT in the Fortran code. + fflush(NULL); + + return disprt(disp); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int disperr_(const int *deref, int *dis, const char prefix[72]) + +{ + const struct disprm *disp; + if (*deref == 0) { + disp = (const struct disprm *)dis; + } else { + disp = *(const struct disprm **)dis; + } + + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + + // This may or may not force the Fortran I/O buffers to be flushed. + // If not, try CALL FLUSH(6) before calling DISPERR in the Fortran code. + fflush(NULL); + + return wcserr_prt(disp->err, prefix_); +} + +//---------------------------------------------------------------------------- + +int dishdo_(const int *deref, int *dis) + +{ + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + return dishdo(disp); +} + +//---------------------------------------------------------------------------- + +int disset_(const int *deref, int *dis) + +{ + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + return disset(disp); +} + +//---------------------------------------------------------------------------- + +int disp2x_( + const int *deref, + int *dis, + const double rawcrd[], + double discrd[]) + +{ + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + return disp2x(disp, rawcrd, discrd); +} + +//---------------------------------------------------------------------------- + +int disx2p_( + const int *deref, + int *dis, + const double discrd[], + double rawcrd[]) + +{ + struct disprm *disp; + if (*deref == 0) { + disp = (struct disprm *)dis; + } else { + disp = *(struct disprm **)dis; + } + + return disx2p(disp, discrd, rawcrd); +} + +//---------------------------------------------------------------------------- + +int diswarp_( + int *dis, + const double pixblc[], + const double pixtrc[], + const double pixsamp[], + int *nsamp, + double maxdis[], + double *maxtot, + double avgdis[], + double *avgtot, + double rmsdis[], + double *rmstot) + +{ + return diswarp((struct disprm *)dis, pixblc, pixtrc, pixsamp, nsamp, + maxdis, maxtot, avgdis, avgtot, rmsdis, rmstot); +} diff --git a/deps/wcslib/Fortran/fitshdr.inc b/deps/wcslib/Fortran/fitshdr.inc new file mode 100644 index 0000000..c9f4f98 --- /dev/null +++ b/deps/wcslib/Fortran/fitshdr.inc @@ -0,0 +1,72 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: fitshdr.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL KEYIDPUT, KEYIDPTC, + : KEYIDGET, KEYIDGTC, KEYIDGTI, + : KEYGET, KEYGTC, KEYGTD, KEYGTI, + : FREEKEYS, FITSHDR + + INTEGER KEYIDPUT, KEYIDPTC, + : KEYIDGET, KEYIDGTC, KEYIDGTI, + : KEYGET, KEYGTC, KEYGTD, KEYGTI, + : FREEKEYS, FITSHDR + +* Length of FITSKEY and FITSKEYID data structures (INTEGER arrays) +* on 64-bit machines. These are the same for 32-bit machines. + INTEGER KEYLEN, KEYIDLEN + PARAMETER (KEYLEN = 48) + PARAMETER (KEYIDLEN = 6) + +* Codes for KEYID data structure elements used by KEYIDPUT/GET. + INTEGER KEYID_NAME, KEYID_COUNT, KEYID_IDX + + PARAMETER (KEYID_NAME = 100) + PARAMETER (KEYID_COUNT = 101) + PARAMETER (KEYID_IDX = 102) + +* Codes for KEY data structure elements used by KEYGET. + INTEGER KEY_KEYNO, KEY_KEYID, KEY_STATUS, KEY_KEYWORD, KEY_TYPE, + : KEY_KEYVALUE, KEY_ULEN, KEY_COMMENT + + PARAMETER (KEY_KEYNO = 200) + PARAMETER (KEY_KEYID = 201) + PARAMETER (KEY_STATUS = 202) + PARAMETER (KEY_KEYWORD = 203) + PARAMETER (KEY_TYPE = 204) + PARAMETER (KEY_KEYVALUE = 205) + PARAMETER (KEY_ULEN = 206) + PARAMETER (KEY_COMMENT = 207) + +* Error codes and messages. + INTEGER FITSHDRERR_SUCCESS, FITSHDRERR_NULL_POINTER, + : FITSHDRERR_MEMORY, FITSHDRERR_FLEX_PARSER + + PARAMETER (FITSHDRERR_SUCCESS = 0) + PARAMETER (FITSHDRERR_NULL_POINTER = 1) + PARAMETER (FITSHDRERR_MEMORY = 2) + PARAMETER (FITSHDRERR_FLEX_PARSER = 3) + + CHARACTER FITSHDR_ERRMSG(0:3)*80 + COMMON /FITSHDR_DATA/ FITSHDR_ERRMSG diff --git a/deps/wcslib/Fortran/fitshdr_bindc.f90 b/deps/wcslib/Fortran/fitshdr_bindc.f90 new file mode 100644 index 0000000..1b729c0 --- /dev/null +++ b/deps/wcslib/Fortran/fitshdr_bindc.f90 @@ -0,0 +1,92 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: fitshdr_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION KEYIDPTC (KEYID, I, WHAT, VALUE) + INTEGER :: KEYID(*), I, WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION KEYIDPTC_C (KEYID, I, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: KEYID(*), I, WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION KEYIDPTC_C + END INTERFACE + + KEYIDPTC = KEYIDPTC_C (KEYID, I, WHAT, VALUE) +END FUNCTION KEYIDPTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION KEYIDGTC (KEYID, I, WHAT, VALUE) + INTEGER :: KEYID(*), I, WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION KEYIDGTC_C (KEYID, I, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: KEYID(*), I, WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION KEYIDGTC_C + END INTERFACE + + KEYIDGTC = KEYIDGTC_C (KEYID, I, WHAT, VALUE) +END FUNCTION KEYIDGTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION KEYGTC (KEYS, I, WHAT, VALUE, NC) + INTEGER :: KEYS(*), I, WHAT + CHARACTER :: VALUE(*) + INTEGER :: NC + + INTERFACE + INTEGER(C_INT) FUNCTION KEYGTC_C (KEYS, I, WHAT, VALUE, NC) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: KEYS(*), I, WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + INTEGER(C_INT) :: NC + END FUNCTION KEYGTC_C + END INTERFACE + + KEYGTC = KEYGTC_C (KEYS, I, WHAT, VALUE, NC) +END FUNCTION KEYGTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION FITSHDR (HEADER, NKEYREC, NKEYIDS, KEYIDS, NREJECT, KEYS) + CHARACTER :: HEADER(*) + INTEGER :: NKEYREC, NKEYIDS, KEYIDS, NREJECT, KEYS(*) + + INTERFACE + INTEGER(C_INT) FUNCTION FITSHDR_C (HEADER, NKEYREC, NKEYIDS, KEYIDS, & + NREJECT, KEYS) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: HEADER(*) + INTEGER(C_INT) :: NKEYREC, NKEYIDS, KEYIDS, NREJECT, KEYS(*) + END FUNCTION FITSHDR_C + END INTERFACE + + FITSHDR = FITSHDR_C (HEADER, NKEYREC, NKEYIDS, KEYIDS, NREJECT, KEYS) +END FUNCTION FITSHDR diff --git a/deps/wcslib/Fortran/fitshdr_data.f b/deps/wcslib/Fortran/fitshdr_data.f new file mode 100644 index 0000000..54dc7ae --- /dev/null +++ b/deps/wcslib/Fortran/fitshdr_data.f @@ -0,0 +1,37 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: fitshdr_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA FITSHDR_BLOCK_DATA + + CHARACTER FITSHDR_ERRMSG(0:3)*80 + + COMMON /FITSHDR_DATA/ FITSHDR_ERRMSG + + DATA FITSHDR_ERRMSG / + : 'Success', + : 'Null fitskey pointer-pointer passed', + : 'Memory allocation failed', + : 'Fatal error returned by Flex parser'/ + + END diff --git a/deps/wcslib/Fortran/fitshdr_f.c b/deps/wcslib/Fortran/fitshdr_f.c new file mode 100644 index 0000000..b2681ea --- /dev/null +++ b/deps/wcslib/Fortran/fitshdr_f.c @@ -0,0 +1,306 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: fitshdr_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include + +#include +#include + +// Fortran name mangling. +#include +#define keyidput_ F77_FUNC(keyidput, KEYIDPUT) +#define keyidptc_ F77_FUNC(keyidptc, KEYIDPTC) +#define keyidget_ F77_FUNC(keyidget, KEYIDGET) +#define keyidgtc_ F77_FUNC(keyidgtc, KEYIDGTC) +#define keyidgti_ F77_FUNC(keyidgti, KEYIDGTI) +#define keyget_ F77_FUNC(keyget, KEYGET) +#define keygtc_ F77_FUNC(keygtc, KEYGTC) +#define keygtd_ F77_FUNC(keygtd, KEYGTD) +#define keygti_ F77_FUNC(keygti, KEYGTI) +#define freekeys_ F77_FUNC(freekeys, FREEKEYS) + +#define fitshdr_ F77_FUNC(fitshdr, FITSHDR) + +#ifdef BINDC + #undef keyidptc_ + #define keyidptc_ keyidptc_c + + #undef keyidgtc_ + #define keyidgtc_ keyidgtc_c + + #undef keygtc_ + #define keygtc_ keygtc_c + + #undef fitshdr_ + #define fitshdr_ fitshdr_c +#endif + +// Must match the values set in fitshdr.inc. +#define KEYID_NAME 100 +#define KEYID_COUNT 101 +#define KEYID_IDX 102 + +#define KEY_KEYNO 200 +#define KEY_KEYID 201 +#define KEY_STATUS 202 +#define KEY_KEYWORD 203 +#define KEY_TYPE 204 +#define KEY_KEYVALUE 205 +#define KEY_ULEN 206 +#define KEY_COMMENT 207 + +//---------------------------------------------------------------------------- + +int keyidput_(int *keyid, const int *i, const int *what, const void *value) + +{ + const char *cvalp; + struct fitskeyid *kidp; + + // Cast pointers. + kidp = (struct fitskeyid *)keyid + *i; + cvalp = (const char *)value; + + switch (*what) { + case KEYID_NAME: + // Only eight characters need be given. + wcsutil_strcvt(8, ' ', 1, cvalp, kidp->name); + wcsutil_null_fill(12, kidp->name); + break; + default: + return 1; + } + + return 0; +} + +int keyidptc_(int *keyid, const int *i, const int *what, const char *value) +{ + return keyidput_(keyid, i, what, value); +} + +//---------------------------------------------------------------------------- + +int keyidget_(const int *keyid, const int *i, const int *what, void *value) + +{ + char *cvalp; + int *ivalp; + const struct fitskeyid *keyidp; + + // Cast pointers. + keyidp = (const struct fitskeyid *)keyid + *i; + cvalp = (char *)value; + ivalp = (int *)value; + + switch (*what) { + case KEYID_NAME: + wcsutil_strcvt(12, ' ', 0, keyidp->name, cvalp); + break; + case KEYID_COUNT: + *ivalp = keyidp->count; + break; + case KEYID_IDX: + *(ivalp++) = keyidp->idx[0]; + *(ivalp++) = keyidp->idx[1]; + break; + default: + return 1; + } + + return 0; +} + +int keyidgtc_(const int *keyid, const int *i, const int *what, char *value) +{ + return keyidget_(keyid, i, what, value); +} + +int keyidgti_(const int *keyid, const int *i, const int *what, int *value) +{ + return keyidget_(keyid, i, what, value); +} + +//---------------------------------------------------------------------------- + + +int keyget_( + const int *keys, + const int *i, + const int *what, + void *value, + int *nc) + +{ + char *cvalp, text[32]; + int *ivalp, j; + double *dvalp; + const struct fitskey *keyp; + + // Cast pointers. + keyp = *((const struct fitskey **)keys) + *i; + cvalp = (char *)value; + ivalp = (int *)value; + dvalp = (double *)value; + + *nc = 1; + switch (*what) { + case KEY_KEYNO: + *ivalp = keyp->keyno; + break; + case KEY_KEYID: + *ivalp = keyp->keyid; + break; + case KEY_STATUS: + *ivalp = keyp->status; + break; + case KEY_KEYWORD: + *nc = (int)(strlen(keyp->keyword)); + wcsutil_strcvt(12, ' ', 0, keyp->keyword, cvalp); + break; + case KEY_TYPE: + *ivalp = keyp->type; + break; + case KEY_KEYVALUE: + switch (abs(keyp->type)%10) { + case 1: + case 2: + // Logical and 32-bit integer. + *ivalp = keyp->keyvalue.i; + break; + case 3: + // 64-bit integer. + *nc = 3; +#ifdef WCSLIB_INT64 + sprintf(text, "%28.27lld", keyp->keyvalue.k); + sscanf(text+1, "%9d%9d%9d", ivalp+2, ivalp+1, ivalp); + if (*text == '-') { + ivalp[0] *= -1; + ivalp[1] *= -1; + ivalp[2] *= -1; + } +#else + *(ivalp++) = keyp->keyvalue.k[0]; + *(ivalp++) = keyp->keyvalue.k[1]; + *(ivalp++) = keyp->keyvalue.k[2]; +#endif + break; + case 4: + // Very long integer. + *nc = 8; + for (j = 0; j < 8; j++) { + *(ivalp++) = keyp->keyvalue.l[j]; + } + break; + case 5: + // Floating point. + *dvalp = keyp->keyvalue.f; + break; + case 6: + case 7: + // Integer complex and floating point complex. + *nc = 2; + *(dvalp++) = keyp->keyvalue.c[0]; + *(dvalp++) = keyp->keyvalue.c[1]; + break; + case 8: + // String or part of a continued string. + *nc = (int)(strlen(keyp->keyvalue.s)); + wcsutil_strcvt(72, ' ', 0, keyp->keyvalue.s, cvalp); + break; + default: + // No value. + break; + } + break; + case KEY_ULEN: + *ivalp = keyp->ulen; + break; + case KEY_COMMENT: + *nc = (int)(strlen(keyp->comment)); + wcsutil_strcvt(84, ' ', 0, keyp->comment, cvalp); + break; + default: + return 1; + } + + return 0; +} + +int keygtc_( + const int *keys, + const int *i, + const int *what, + char *value, + int *nc) +{ + return keyget_(keys, i, what, value, nc); +} + +int keygtd_( + const int *keys, + const int *i, + const int *what, + double *value, + int *nc) +{ + return keyget_(keys, i, what, value, nc); +} + +int keygti_( + const int *keys, + const int *i, + const int *what, + int *value, + int *nc) +{ + return keyget_(keys, i, what, value, nc); +} + +//---------------------------------------------------------------------------- + +int freekeys_(int *keys) + +{ + free(*((struct fitskey **)keys)); + *keys = 0; + return 0; +} + +//---------------------------------------------------------------------------- + +int fitshdr_( + const char header[], + const int *nkeyrec, + const int *nkeyids, + int *keyids, + int *nreject, + iptr keys) + +{ + return fitshdr(header, *nkeyrec, *nkeyids, (struct fitskeyid *)keyids, + nreject, (struct fitskey **)keys); +} diff --git a/deps/wcslib/Fortran/getwcstab.inc b/deps/wcslib/Fortran/getwcstab.inc new file mode 100644 index 0000000..87ccb59 --- /dev/null +++ b/deps/wcslib/Fortran/getwcstab.inc @@ -0,0 +1,27 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: getwcstab.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL FTWCST + INTEGER FTWCST diff --git a/deps/wcslib/Fortran/getwcstab_f.c b/deps/wcslib/Fortran/getwcstab_f.c new file mode 100644 index 0000000..985ae45 --- /dev/null +++ b/deps/wcslib/Fortran/getwcstab_f.c @@ -0,0 +1,48 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: getwcstab_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include + +// Fortran name mangling. +#include +#define ftwcst_ F77_FUNC(ftwcst, FTWCST) + +// CFITSIO global variable defined by/for the FITSIO wrappers that maps +// Fortran unit numbers to fitsfile *; see f77_wrap.h and f77_wrap1.c. +extern fitsfile *gFitsFiles[]; + +//---------------------------------------------------------------------------- + +int ftwcst_( + int *unit, + int *nwtb, + int *wtb, + int *status) + +{ + // *wtb is meant to hold a pointer to a wtbarr struct. On 64-bit machines + // sizeof(void *) = 2 * sizeof(int) = sizeof(long). + long wtbp = *((long *)wtb); + return fits_read_wcstab(gFitsFiles[*unit], *nwtb, (void *)wtbp, status); +} diff --git a/deps/wcslib/Fortran/lin.inc b/deps/wcslib/Fortran/lin.inc new file mode 100644 index 0000000..c196b82 --- /dev/null +++ b/deps/wcslib/Fortran/lin.inc @@ -0,0 +1,86 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: lin.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL LINPUT, LINPTD, LINPTI, LINGET, LINGTD, LINGTI, + : LININI, LININIT, LINDIS, LINDIST, LINCPY, LINFREE, + : LINSIZE, LINENQ, LINPRT, LINPERR, + : LINSET, LINP2X, LINX2P, LINWARP + + INTEGER LINPUT, LINPTD, LINPTI, LINGET, LINGTD, LINGTI, + : LININI, LININIT, LINDIS, LINDIST, LINCPY, LINFREE, + : LINSIZE, LINENQ, LINPRT, LINPERR, + : LINSET, LINP2X, LINX2P, LINWARP + +* Length of the LINPRM data structure (INTEGER array) on 64-bit +* machines. Only needs to be 22 on 32-bit machines. + INTEGER LINLEN + PARAMETER (LINLEN = 36) + +* Codes for LIN data structure elements used by LINPUT and LINGET. + INTEGER LIN_FLAG, LIN_NAXIS, LIN_CRPIX, LIN_PC, LIN_CDELT, + : LIN_DISPRE, LIN_DISSEQ + + PARAMETER (LIN_FLAG = 100) + PARAMETER (LIN_NAXIS = 101) + PARAMETER (LIN_CRPIX = 102) + PARAMETER (LIN_PC = 103) + PARAMETER (LIN_CDELT = 104) + PARAMETER (LIN_DISPRE = 105) + PARAMETER (LIN_DISSEQ = 106) + +* Codes for LIN data structure elements used by LINGET (only). + INTEGER LIN_PIXIMG, LIN_IMGPIX, LIN_INAXIS, LIN_UNITY, + : LIN_AFFINE, LIN_SIMPLE, LIN_ERR + + PARAMETER (LIN_PIXIMG = 200) + PARAMETER (LIN_IMGPIX = 201) + PARAMETER (LIN_INAXIS = 202) + PARAMETER (LIN_UNITY = 203) + PARAMETER (LIN_AFFINE = 204) + PARAMETER (LIN_SIMPLE = 205) + PARAMETER (LIN_ERR = 206) + +* Codes used by LINENQ. + INTEGER LINENQ_MEM, LINENQ_SET, LINENQ_BYP + + PARAMETER (LINENQ_MEM = 1) + PARAMETER (LINENQ_SET = 2) + PARAMETER (LINENQ_BYP = 4) + +* Error codes and messages. + INTEGER LINERR_SUCCESS, LINERR_NULL_POINTER, LINERR_MEMORY, + : LINERR_SINGULAR_MTX, LINERR_DISTORT_INIT, + : LINERR_DISTORT, LINERR_DEDISTORT + + PARAMETER (LINERR_SUCCESS = 0) + PARAMETER (LINERR_NULL_POINTER = 1) + PARAMETER (LINERR_MEMORY = 2) + PARAMETER (LINERR_SINGULAR_MTX = 3) + PARAMETER (LINERR_DISTORT_INIT = 4) + PARAMETER (LINERR_DISTORT = 5) + PARAMETER (LINERR_DEDISTORT = 6) + + CHARACTER LIN_ERRMSG(0:6)*80 + COMMON /LIN_DATA/ LIN_ERRMSG diff --git a/deps/wcslib/Fortran/lin_bindc.f90 b/deps/wcslib/Fortran/lin_bindc.f90 new file mode 100644 index 0000000..a4677cc --- /dev/null +++ b/deps/wcslib/Fortran/lin_bindc.f90 @@ -0,0 +1,38 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: lin_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION LINPERR (LIN, PREFIX) + INTEGER :: LIN(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION LINPERR_C (LIN, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: LIN(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION LINPERR_C + END INTERFACE + + LINPERR = LINPERR_C (LIN, PREFIX) +END FUNCTION LINPERR diff --git a/deps/wcslib/Fortran/lin_data.f b/deps/wcslib/Fortran/lin_data.f new file mode 100644 index 0000000..62038c7 --- /dev/null +++ b/deps/wcslib/Fortran/lin_data.f @@ -0,0 +1,40 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: lin_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA LIN_BLOCK_DATA + + CHARACTER LIN_ERRMSG(0:6)*80 + + COMMON /LIN_DATA/ LIN_ERRMSG + + DATA LIN_ERRMSG / + : 'Success', + : 'Null linprm pointer passed', + : 'Memory allocation failed', + : 'PCi_ja matrix is singular', + : 'Failed to initialize distortion functions', + : 'Distort error', + : 'De-distort error'/ + + END diff --git a/deps/wcslib/Fortran/lin_f.c b/deps/wcslib/Fortran/lin_f.c new file mode 100644 index 0000000..6846b84 --- /dev/null +++ b/deps/wcslib/Fortran/lin_f.c @@ -0,0 +1,409 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: lin_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include +#include +#include +#include + +// Fortran name mangling. +#include +#define linput_ F77_FUNC(linput, LINPUT) +#define linptd_ F77_FUNC(linptd, LINPTD) +#define linpti_ F77_FUNC(linpti, LINPTI) +#define linget_ F77_FUNC(linget, LINGET) +#define lingtd_ F77_FUNC(lingtd, LINGTD) +#define lingti_ F77_FUNC(lingti, LINGTI) + +#define linini_ F77_FUNC(linini, LININI) +#define lininit_ F77_FUNC(lininit, LININIT) +#define lindis_ F77_FUNC(lindis, LINDIS) +#define lindist_ F77_FUNC(lindist, LINDIST) +#define lincpy_ F77_FUNC(lincpy, LINCPY) +#define linfree_ F77_FUNC(linfree, LINFREE) +#define linsize_ F77_FUNC(linsize, LINSIZE) +#define linenq_ F77_FUNC(linenq, LINENQ) +#define linprt_ F77_FUNC(linprt, LINPRT) +#define linperr_ F77_FUNC(linperr, LINPERR) +#define linset_ F77_FUNC(linset, LINSET) +#define linp2x_ F77_FUNC(linp2x, LINP2X) +#define linx2p_ F77_FUNC(linx2p, LINX2P) +#define linwarp_ F77_FUNC(linwarp, LINWARP) + +#ifdef BINDC + #undef linperr_ + #define linperr_ linperr_c +#endif + +// Must match the values set in lin.inc. +#define LIN_FLAG 100 +#define LIN_NAXIS 101 +#define LIN_CRPIX 102 +#define LIN_PC 103 +#define LIN_CDELT 104 +#define LIN_DISPRE 105 +#define LIN_DISSEQ 106 + +#define LIN_PIXIMG 200 +#define LIN_IMGPIX 201 +#define LIN_INAXIS 202 +#define LIN_UNITY 203 +#define LIN_AFFINE 204 +#define LIN_SIMPLE 205 +#define LIN_ERR 206 + +//---------------------------------------------------------------------------- + +int linput_( + int *lin, + const int *what, + const void *value, + const int *i, + const int *j) + +{ + // Cast pointers. + struct linprm *linp = (struct linprm *)lin; + const int *ivalp = (const int *)value; + const double *dvalp = (const double *)value; + + // Convert 1-relative FITS axis numbers to 0-relative C array indices. + int i0 = *i - 1; + int j0 = *j - 1; + + // Preserve bypass mode. + int flag = 0; + if (linp->flag == 1 || linp->flag < 0) flag = 1; + + int k, status = 0; + switch (*what) { + case LIN_FLAG: + linp->flag = *ivalp; + break; + case LIN_NAXIS: + linp->naxis = *ivalp; + linp->flag = flag; + break; + case LIN_CRPIX: + linp->crpix[i0] = *dvalp; + break; + case LIN_PC: + k = (i0)*(linp->naxis) + (j0); + *(linp->pc+k) = *dvalp; + linp->flag = flag; + break; + case LIN_CDELT: + linp->cdelt[i0] = *dvalp; + linp->flag = flag; + break; + case LIN_DISPRE: + // N.B. value is the address of an allocated disprm struct. + status = lindis(1, linp, (struct disprm *)value); + linp->flag = flag; + break; + case LIN_DISSEQ: + // N.B. value is the address of an allocated disprm struct. + status = lindis(2, linp, (struct disprm *)value); + linp->flag = flag; + break; + default: + return 1; + } + + return status; +} + +int linptd_(int *lin, const int *what, const double *value, + const int *i, const int *j) +{ + return linput_(lin, what, value, i, j); +} + +int linpti_(int *lin, const int *what, const int *value, + const int *i, const int *j) +{ + return linput_(lin, what, value, i, j); +} + +//---------------------------------------------------------------------------- + +int linget_(const int *lin, const int *what, void *value) + +{ + // Cast pointers. + const struct linprm *linp = (const struct linprm *)lin; + int *ivalp = (int *)value; + double *dvalp = (double *)value; + struct disprm **disvalp = (struct disprm **)value; + + int naxis = linp->naxis; + + switch (*what) { + case LIN_FLAG: + *ivalp = linp->flag; + break; + case LIN_NAXIS: + *ivalp = naxis; + break; + case LIN_CRPIX: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = linp->crpix[i]; + } + break; + case LIN_PC: + // C row-major to FORTRAN column-major. + for (int j = 0; j < naxis; j++) { + const double *dlinp = linp->pc + j; + for (int i = 0; i < naxis; i++) { + *(dvalp++) = *dlinp; + dlinp += naxis; + } + } + break; + case LIN_CDELT: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = linp->cdelt[i]; + } + break; + case LIN_DISPRE: + // N.B. the value returned is the address of a disprm struct. + *disvalp = linp->dispre; + break; + case LIN_DISSEQ: + // N.B. the value returned is the address of a disprm struct. + *disvalp = linp->disseq; + break; + case LIN_PIXIMG: + // C row-major to FORTRAN column-major. + for (int j = 0; j < naxis; j++) { + const double *dlinp = linp->piximg + j; + for (int i = 0; i < naxis; i++) { + *(dvalp++) = *dlinp; + dlinp += naxis; + } + } + break; + case LIN_IMGPIX: + // C row-major to FORTRAN column-major. + for (int j = 0; j < naxis; j++) { + const double *dlinp = linp->imgpix + j; + for (int i = 0; i < naxis; i++) { + *(dvalp++) = *dlinp; + dlinp += naxis; + } + } + break; + case LIN_INAXIS: + *ivalp = linp->i_naxis; + break; + case LIN_UNITY: + *ivalp = linp->unity; + break; + case LIN_AFFINE: + *ivalp = linp->affine; + break; + case LIN_SIMPLE: + *ivalp = linp->simple; + break; + case LIN_ERR: + // Copy the contents of the wcserr struct. + if (linp->err) { + const int *ilinp = (int *)(linp->err); + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(ilinp++); + } + } else { + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + default: + return 1; + } + + return 0; +} + +int lingtd_(const int *lin, const int *what, double *value) +{ + return linget_(lin, what, value); +} + +int lingti_(const int *lin, const int *what, int *value) +{ + return linget_(lin, what, value); +} + +//---------------------------------------------------------------------------- + +int linini_(const int *naxis, int *lin) + +{ + return linini(1, *naxis, (struct linprm *)lin); +} + +//---------------------------------------------------------------------------- + +int lininit_(const int *naxis, int *lin, int *ndpmax) + +{ + return lininit(1, *naxis, (struct linprm *)lin, *ndpmax); +} + +//---------------------------------------------------------------------------- + +int lindis_(const int *sequence, int *lin, int *dis) + +{ + return lindis(*sequence, (struct linprm *)lin, (struct disprm *)dis); +} + +//---------------------------------------------------------------------------- + +int lindist_(const int *sequence, int *lin, int *dis, int *ndpmax) + +{ + return lindist(*sequence, (struct linprm *)lin, (struct disprm *)dis, + *ndpmax); +} + +//---------------------------------------------------------------------------- + +int lincpy_(const int *linsrc, int *lindst) + +{ + return lincpy(1, (const struct linprm *)linsrc, (struct linprm *)lindst); +} + +//---------------------------------------------------------------------------- + +int linfree_(int *lin) + +{ + return linfree((struct linprm *)lin); +} + +//---------------------------------------------------------------------------- + +int linsize_(const int *lin, int sizes[2]) + +{ + return linsize((const struct linprm *)lin, sizes); +} + +//---------------------------------------------------------------------------- + +int linenq_(const int *lin, int *enquiry) + +{ + return linenq((const struct linprm *)lin, *enquiry); +} + +//---------------------------------------------------------------------------- + +int linprt_(const int *lin) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling LINPRT in the Fortran code. + fflush(NULL); + + return linprt((const struct linprm *)lin); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int linperr_(int *lin, const char prefix[72]) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. + // If not, try CALL FLUSH(6) before calling LINPERR in the Fortran code. + fflush(NULL); + + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + return linperr((struct linprm *)lin, prefix_); +} + +//---------------------------------------------------------------------------- + +int linset_(int *lin) + +{ + return linset((struct linprm *)lin); +} + +//---------------------------------------------------------------------------- + +int linp2x_( + int *lin, + const int *ncoord, + const int *nelem, + const double pixcrd[], + double imgcrd[]) + +{ + return linp2x((struct linprm *)lin, *ncoord, *nelem, pixcrd, imgcrd); +} + +//---------------------------------------------------------------------------- + +int linx2p_( + int *lin, + const int *ncoord, + const int *nelem, + const double imgcrd[], + double pixcrd[]) + +{ + return linx2p((struct linprm *)lin, *ncoord, *nelem, imgcrd, pixcrd); +} + +//---------------------------------------------------------------------------- + +int linwarp_( + int *lin, + const double pixblc[], + const double pixtrc[], + const double pixsamp[], + int *nsamp, + double maxdis[], + double *maxtot, + double avgdis[], + double *avgtot, + double rmsdis[], + double *rmstot) + +{ + return linwarp((struct linprm *)lin, pixblc, pixtrc, pixsamp, nsamp, + maxdis, maxtot, avgdis, avgtot, rmsdis, rmstot); +} diff --git a/deps/wcslib/Fortran/log.inc b/deps/wcslib/Fortran/log.inc new file mode 100644 index 0000000..876df73 --- /dev/null +++ b/deps/wcslib/Fortran/log.inc @@ -0,0 +1,40 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: log.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL LOGS2X, LOGX2S + INTEGER LOGS2X, LOGX2S + +* Error codes and messages. + INTEGER LOGERR_SUCCESS, LOGERR_NULL_POINTER, + : LOGERR_BAD_LOG_REF_VAL, LOGERR_BAD_X, LOGERR_BAD_WORLD + + PARAMETER (LOGERR_SUCCESS = 0) + PARAMETER (LOGERR_NULL_POINTER = 1) + PARAMETER (LOGERR_BAD_LOG_REF_VAL = 2) + PARAMETER (LOGERR_BAD_X = 3) + PARAMETER (LOGERR_BAD_WORLD = 4) + + CHARACTER LOG_ERRMSG(0:4)*80 + COMMON /LOG_DATA/ LOG_ERRMSG diff --git a/deps/wcslib/Fortran/log_data.f b/deps/wcslib/Fortran/log_data.f new file mode 100644 index 0000000..7ac813d --- /dev/null +++ b/deps/wcslib/Fortran/log_data.f @@ -0,0 +1,38 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: log_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA LOG_BLOCK_DATA + + CHARACTER LOG_ERRMSG(0:4)*80 + + COMMON /LOG_DATA/ LOG_ERRMSG + + DATA LOG_ERRMSG / + : 'Success', + : ' ', + : 'Invalid log-coordinate reference value', + : 'One or more of the x coordinates were invalid', + : 'One or more of the world coordinates were invalid'/ + + END diff --git a/deps/wcslib/Fortran/log_f.c b/deps/wcslib/Fortran/log_f.c new file mode 100644 index 0000000..5f6bf4c --- /dev/null +++ b/deps/wcslib/Fortran/log_f.c @@ -0,0 +1,60 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: log_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include + +// Fortran name mangling. +#include +#define logx2s_ F77_FUNC(logx2s, LOGX2S) +#define logs2x_ F77_FUNC(logs2x, LOGS2X) + +//---------------------------------------------------------------------------- + +int logx2s_( + const double *crval, + const int *nx, + const int *sx, + const int *slogc, + const double x[], + double logc[], + int stat[]) + +{ + return logx2s(*crval, *nx, *sx, *slogc, x, logc, stat); +} + +//---------------------------------------------------------------------------- + +int logs2x_( + const double *crval, + const int *nlogc, + const int *slogc, + const int *sx, + const double logc[], + double x[], + int stat[]) + +{ + return logs2x(*crval, *nlogc, *slogc, *sx, logc, x, stat); +} diff --git a/deps/wcslib/Fortran/prj.inc b/deps/wcslib/Fortran/prj.inc new file mode 100644 index 0000000..2578903 --- /dev/null +++ b/deps/wcslib/Fortran/prj.inc @@ -0,0 +1,137 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: prj.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL PRJPUT, PRJPTC, PRJPTD, PRJPTI, + : PRJGET, PRJGTC, PRJGTD, PRJGTI, + : PRJINI, PRJFREE, PRJSIZE, PRJENQ, PRJPRT, PRJPERR, + : PRJBCHK, PRJSET, PRJX2S, PRJS2X + + INTEGER PRJPUT, PRJPTC, PRJPTD, PRJPTI, + : PRJGET, PRJGTC, PRJGTD, PRJGTI, + : PRJINI, PRJFREE, PRJSIZE, PRJENQ, PRJPRT, PRJPERR, + : PRJBCHK, PRJSET, PRJX2S, PRJS2X + + EXTERNAL AZPSET, AZPX2S, AZPS2X, PARSET, PARX2S, PARS2X, + : SZPSET, SZPX2S, SZPS2X, MOLSET, MOLX2S, MOLS2X, + : TANSET, TANX2S, TANS2X, AITSET, AITX2S, AITS2X, + : STGSET, STGX2S, STGS2X, COPSET, COPX2S, COPS2X, + : SINSET, SINX2S, SINS2X, COESET, COEX2S, COES2X, + : ARCSET, ARCX2S, ARCS2X, CODSET, CODX2S, CODS2X, + : ZPNSET, ZPNX2S, ZPNS2X, COOSET, COOX2S, COOS2X, + : ZEASET, ZEAX2S, ZEAS2X, BONSET, BONX2S, BONS2X, + : AIRSET, AIRX2S, AIRS2X, PCOSET, PCOX2S, PCOS2X, + : CYPSET, CYPX2S, CYPS2X, TSCSET, TSCX2S, TSCS2X, + : CEASET, CEAX2S, CEAS2X, CSCSET, CSCX2S, CSCS2X, + : CARSET, CARX2S, CARS2X, QSCSET, QSCX2S, QSCS2X, + : MERSET, MERX2S, MERS2X, HPXSET, HPXX2S, HPXS2X, + : SFLSET, SFLX2S, SFLS2X, XPHSET, XPHX2S, XPHS2X + + INTEGER AZPSET, AZPX2S, AZPS2X, PARSET, PARX2S, PARS2X, + : SZPSET, SZPX2S, SZPS2X, MOLSET, MOLX2S, MOLS2X, + : TANSET, TANX2S, TANS2X, AITSET, AITX2S, AITS2X, + : STGSET, STGX2S, STGS2X, COPSET, COPX2S, COPS2X, + : SINSET, SINX2S, SINS2X, COESET, COEX2S, COES2X, + : ARCSET, ARCX2S, ARCS2X, CODSET, CODX2S, CODS2X, + : ZPNSET, ZPNX2S, ZPNS2X, COOSET, COOX2S, COOS2X, + : ZEASET, ZEAX2S, ZEAS2X, BONSET, BONX2S, BONS2X, + : AIRSET, AIRX2S, AIRS2X, PCOSET, PCOX2S, PCOS2X, + : CYPSET, CYPX2S, CYPS2X, TSCSET, TSCX2S, TSCS2X, + : CEASET, CEAX2S, CEAS2X, CSCSET, CSCX2S, CSCS2X, + : CARSET, CARX2S, CARS2X, QSCSET, QSCX2S, QSCS2X, + : MERSET, MERX2S, MERS2X, HPXSET, HPXX2S, HPXS2X, + : SFLSET, SFLX2S, SFLS2X, XPHSET, XPHX2S, XPHS2X + +* Length of the PRJPRM data structure (INTEGER array) on 64-bit +* machines. Only needs to be 116 on 32-bit machines. + INTEGER PRJLEN + PARAMETER (PRJLEN = 120) + +* Number of projection parameters supported by WCSLIB, 0 to PVN-1. + INTEGER PRJ_PVN + PARAMETER (PRJ_PVN = 30) + +* Codes for PRJ data structure elements used by PRJPUT and PRJGET. + INTEGER PRJ_FLAG, PRJ_CODE, PRJ_R0, PRJ_PV, PRJ_PHI0, + : PRJ_THETA0, PRJ_BOUNDS + + PARAMETER (PRJ_FLAG = 100) + PARAMETER (PRJ_CODE = 101) + PARAMETER (PRJ_R0 = 102) + PARAMETER (PRJ_PV = 103) + PARAMETER (PRJ_PHI0 = 104) + PARAMETER (PRJ_THETA0 = 105) + PARAMETER (PRJ_BOUNDS = 106) + +* Codes for PRJ data structure elements used by PRJGET (only). + INTEGER PRJ_NAME, PRJ_CATEGORY, PRJ_PVRANGE, PRJ_SIMPLEZEN, + : PRJ_EQUIAREAL, PRJ_CONFORMAL, PRJ_GLOBAL, PRJ_DIVERGENT, + : PRJ_X0, PRJ_Y0, PRJ_ERR, PRJ_W, PRJ_N + + PARAMETER (PRJ_NAME = 200) + PARAMETER (PRJ_CATEGORY = 201) + PARAMETER (PRJ_PVRANGE = 202) + PARAMETER (PRJ_SIMPLEZEN = 203) + PARAMETER (PRJ_EQUIAREAL = 204) + PARAMETER (PRJ_CONFORMAL = 205) + PARAMETER (PRJ_GLOBAL = 206) + PARAMETER (PRJ_DIVERGENT = 207) + PARAMETER (PRJ_X0 = 208) + PARAMETER (PRJ_Y0 = 209) + PARAMETER (PRJ_ERR = 210) + PARAMETER (PRJ_W = 211) + PARAMETER (PRJ_N = 212) + +* Projection categories. + INTEGER PRJ_ZENITHAL, PRJ_CYLINDRICAL, PRJ_PSEUDOCYLINDRICAL, + : PRJ_CONVENTIONAL, PRJ_CONIC, PRJ_POLYCONIC, + : PRJ_QUADCUBE, PRJ_HEALPIX + + PARAMETER (PRJ_ZENITHAL = 1) + PARAMETER (PRJ_CYLINDRICAL = 2) + PARAMETER (PRJ_PSEUDOCYLINDRICAL = 3) + PARAMETER (PRJ_CONVENTIONAL = 4) + PARAMETER (PRJ_CONIC = 5) + PARAMETER (PRJ_POLYCONIC = 6) + PARAMETER (PRJ_QUADCUBE = 7) + PARAMETER (PRJ_HEALPIX = 8) + +* Codes used by PRJENQ. + INTEGER PRJENQ_SET, PRJENQ_BYP + + PARAMETER (PRJENQ_SET = 2) + PARAMETER (PRJENQ_BYP = 4) + +* Error codes and messages. + INTEGER PRJERR_SUCCESS, PRJERR_NULL_POINTER, PRJERR_BAD_PARAM, + : PRJERR_BAD_PIX, PRJERR_BAD_WORLD + + PARAMETER (PRJERR_SUCCESS = 0) + PARAMETER (PRJERR_NULL_POINTER = 1) + PARAMETER (PRJERR_BAD_PARAM = 2) + PARAMETER (PRJERR_BAD_PIX = 3) + PARAMETER (PRJERR_BAD_WORLD = 4) + + CHARACTER PRJ_ERRMSG(0:4)*80 + COMMON /PRJ_DATA/ PRJ_ERRMSG diff --git a/deps/wcslib/Fortran/prj_bindc.f90 b/deps/wcslib/Fortran/prj_bindc.f90 new file mode 100644 index 0000000..b968f30 --- /dev/null +++ b/deps/wcslib/Fortran/prj_bindc.f90 @@ -0,0 +1,74 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: prj_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION PRJPTC (PRJ, WHAT, VALUE, M) + INTEGER :: PRJ(*), WHAT + CHARACTER :: VALUE(*) + INTEGER :: M + + INTERFACE + INTEGER(C_INT) FUNCTION PRJPTC_C (PRJ, WHAT, VALUE, M) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: PRJ(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + INTEGER(C_INT) :: M + END FUNCTION PRJPTC_C + END INTERFACE + + PRJPTC = PRJPTC_C (PRJ, WHAT, VALUE, M) +END FUNCTION PRJPTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION PRJGTC (PRJ, WHAT, VALUE) + INTEGER :: PRJ(*), WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION PRJGTC_C (PRJ, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: PRJ(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION PRJGTC_C + END INTERFACE + + PRJGTC = PRJGTC_C (PRJ, WHAT, VALUE) +END FUNCTION PRJGTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION PRJPERR (PRJ, PREFIX) + INTEGER :: PRJ(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION PRJPERR_C (PRJ, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: PRJ(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION PRJPERR_C + END INTERFACE + + PRJPERR = PRJPERR_C (PRJ, PREFIX) +END FUNCTION PRJPERR diff --git a/deps/wcslib/Fortran/prj_data.f b/deps/wcslib/Fortran/prj_data.f new file mode 100644 index 0000000..31ccd3c --- /dev/null +++ b/deps/wcslib/Fortran/prj_data.f @@ -0,0 +1,38 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: prj_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA PRJ_BLOCK_DATA + + CHARACTER PRJ_ERRMSG(0:4)*80 + + COMMON /PRJ_DATA/ PRJ_ERRMSG + + DATA PRJ_ERRMSG / + : 'Success', + : 'Null prjprm pointer passed', + : 'Invalid projection parameters', + : 'One or more of the (x,y) coordinates were invalid', + : 'One or more of the (phi,theta) coordinates were invalid'/ + + END diff --git a/deps/wcslib/Fortran/prj_f.c b/deps/wcslib/Fortran/prj_f.c new file mode 100644 index 0000000..0cb3072 --- /dev/null +++ b/deps/wcslib/Fortran/prj_f.c @@ -0,0 +1,407 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: prj_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include +#include +#include + +// Fortran name mangling (see below for the remainder). +#include +#define prjput_ F77_FUNC(prjput, PRJPUT) +#define prjptc_ F77_FUNC(prjptc, PRJPTC) +#define prjptd_ F77_FUNC(prjptd, PRJPTD) +#define prjpti_ F77_FUNC(prjpti, PRJPTI) +#define prjget_ F77_FUNC(prjget, PRJGET) +#define prjgtc_ F77_FUNC(prjgtc, PRJGTC) +#define prjgtd_ F77_FUNC(prjgtd, PRJGTD) +#define prjgti_ F77_FUNC(prjgti, PRJGTI) + +#define prjini_ F77_FUNC(prjini, PRJINI) +#define prjfree_ F77_FUNC(prjfree, PRJFREE) +#define prjsize_ F77_FUNC(prjsize, PRJSIZE) +#define prjenq_ F77_FUNC(prjenq, PRJENQ) +#define prjprt_ F77_FUNC(prjprt, PRJPRT) +#define prjperr_ F77_FUNC(prjperr, PRJPERR) +#define prjbchk_ F77_FUNC(prjbchk, PRJBCHK) + +#ifdef BINDC + #undef prjptc_ + #define prjptc_ prjptc_c + + #undef prjgtc_ + #define prjgtc_ prjgtc_c + + #undef prjperr_ + #define prjperr_ prjperr_c +#endif + +// Must match the values set in prj.inc. +#define PRJ_FLAG 100 +#define PRJ_CODE 101 +#define PRJ_R0 102 +#define PRJ_PV 103 +#define PRJ_PHI0 104 +#define PRJ_THETA0 105 +#define PRJ_BOUNDS 106 + +#define PRJ_NAME 200 +#define PRJ_CATEGORY 201 +#define PRJ_PVRANGE 202 +#define PRJ_SIMPLEZEN 203 +#define PRJ_EQUIAREAL 204 +#define PRJ_CONFORMAL 205 +#define PRJ_GLOBAL 206 +#define PRJ_DIVERGENT 207 +#define PRJ_X0 208 +#define PRJ_Y0 209 +#define PRJ_ERR 210 +#define PRJ_W 211 +#define PRJ_N 212 + +//---------------------------------------------------------------------------- + +int prjput_(int *prj, const int *what, const void *value, const int *m) + +{ + // Cast pointers. + struct prjprm *prjp = (struct prjprm *)prj; + const char *cvalp = (const char *)value; + const int *ivalp = (const int *)value; + const double *dvalp = (const double *)value; + + // Preserve bypass mode. + int flag = 0; + if (prjp->flag == 1 || prjp->flag < 0) flag = 1; + + switch (*what) { + case PRJ_FLAG: + prjp->flag = *ivalp; + break; + case PRJ_CODE: + // Only three characters need be given. + wcsutil_strcvt(3, ' ', 1, cvalp, prjp->code); + wcsutil_null_fill(4, prjp->code); + prjp->flag = flag; + break; + case PRJ_R0: + prjp->r0 = *dvalp; + prjp->flag = flag; + break; + case PRJ_PV: + prjp->pv[*m] = *dvalp; + prjp->flag = flag; + break; + case PRJ_PHI0: + prjp->phi0 = *dvalp; + prjp->flag = flag; + break; + case PRJ_THETA0: + prjp->theta0 = *dvalp; + prjp->flag = flag; + break; + case PRJ_BOUNDS: + prjp->bounds = *ivalp; + break; + default: + return 1; + } + + return 0; +} + +int prjptc_(int *prj, const int *what, const char *value, const int *m) +{ + return prjput_(prj, what, value, m); +} + +int prjptd_(int *prj, const int *what, const double *value, const int *m) +{ + return prjput_(prj, what, value, m); +} + +int prjpti_(int *prj, const int *what, const int *value, const int *m) +{ + return prjput_(prj, what, value, m); +} + +//---------------------------------------------------------------------------- + +int prjget_(const int *prj, const int *what, void *value) + +{ + + // Cast pointers. + const struct prjprm *prjp = (const struct prjprm *)prj; + char *cvalp = (char *)value; + int *ivalp = (int *)value; + double *dvalp = (double *)value; + + switch (*what) { + case PRJ_FLAG: + *ivalp = prjp->flag; + break; + case PRJ_CODE: + wcsutil_strcvt(4, ' ', 0, prjp->code, cvalp); + break; + case PRJ_R0: + *dvalp = prjp->r0; + break; + case PRJ_PV: + for (int m = 0; m < PVN; m++) { + *(dvalp++) = prjp->pv[m]; + } + break; + case PRJ_PHI0: + *dvalp = prjp->phi0; + break; + case PRJ_THETA0: + *dvalp = prjp->theta0; + break; + case PRJ_BOUNDS: + *ivalp = prjp->bounds; + break; + case PRJ_NAME: + wcsutil_strcvt(40, ' ', 0, prjp->name, cvalp); + break; + case PRJ_CATEGORY: + *ivalp = prjp->category; + break; + case PRJ_PVRANGE: + *ivalp = prjp->pvrange; + break; + case PRJ_SIMPLEZEN: + *ivalp = prjp->simplezen; + break; + case PRJ_EQUIAREAL: + *ivalp = prjp->equiareal; + break; + case PRJ_CONFORMAL: + *ivalp = prjp->conformal; + break; + case PRJ_GLOBAL: + *ivalp = prjp->global; + break; + case PRJ_DIVERGENT: + *ivalp = prjp->divergent; + break; + case PRJ_X0: + *dvalp = prjp->x0; + break; + case PRJ_Y0: + *dvalp = prjp->y0; + break; + case PRJ_ERR: + // Copy the contents of the wcserr struct. + if (prjp->err) { + const int *iprjp = (int *)(prjp->err); + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(iprjp++); + } + } else { + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + case PRJ_W: + for (int m = 0; m < 10; m++) { + *(dvalp++) = prjp->w[m]; + } + break; + case PRJ_N: + *ivalp = prjp->n; + break; + default: + return 1; + } + + return 0; +} + +int prjgtc_(const int *prj, const int *what, char *value) +{ + return prjget_(prj, what, value); +} + +int prjgtd_(const int *prj, const int *what, double *value) +{ + return prjget_(prj, what, value); +} + +int prjgti_(const int *prj, const int *what, int *value) +{ + return prjget_(prj, what, value); +} + +//---------------------------------------------------------------------------- + +int prjini_(int *prj) + +{ + return prjini((struct prjprm *)prj); +} + +//---------------------------------------------------------------------------- + +int prjfree_(int *prj) + +{ + return prjfree((struct prjprm *)prj); +} + +//---------------------------------------------------------------------------- + +int prjsize_(const int *prj, int sizes[2]) + +{ + return prjsize((const struct prjprm *)prj, sizes); +} + +//---------------------------------------------------------------------------- + +int prjenq_(const int *prj, int *enquiry) + +{ + return prjenq((const struct prjprm *)prj, *enquiry); +} + +//---------------------------------------------------------------------------- + +int prjprt_(const int *prj) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling PRJPRT in the Fortran code. + fflush(NULL); + + return prjprt((const struct prjprm *)prj); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int prjperr_(int *prj, const char prefix[72]) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. + // If not, try CALL FLUSH(6) before calling PRJPERR in the Fortran code. + fflush(NULL); + + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + return wcserr_prt(((struct prjprm *)prj)->err, prefix_); +} + +//---------------------------------------------------------------------------- + +int prjbchk_( + const double *tol, + const int *nphi, + const int *ntheta, + const int *spt, + double phi[], + double theta[], + int stat[]) + +{ + return prjbchk(*tol, *nphi, *ntheta, *spt, phi, theta, stat); +} + +//---------------------------------------------------------------------------- + +#define PRJSET_FWRAP(pcode, PCODE) \ + int F77_FUNC(pcode##set, PCODE##SET)(int *prj) \ + {return prjset((struct prjprm *)prj);} + + +#define PRJS2X_FWRAP(pcode, PCODE) \ + int F77_FUNC(pcode##s2x, PCODE##S2X)( \ + int *prj, \ + const int *nphi, \ + const int *ntheta, \ + const int *spt, \ + const int *sxy, \ + const double phi[], \ + const double theta[], \ + double x[], \ + double y[], \ + int stat[]) \ + {return prj##s2x((struct prjprm *)prj, *nphi, *ntheta, *spt, *sxy, \ + phi, theta, x, y, stat);} + +#define PRJX2S_FWRAP(pcode, PCODE) \ + int F77_FUNC(pcode##x2s, PRJ##X2S)( \ + int *prj, \ + const int *nx, \ + const int *ny, \ + const int *sxy, \ + const int *spt, \ + const double x[], \ + const double y[], \ + double phi[], \ + double theta[], \ + int stat[]) \ + {return pcode##x2s((struct prjprm *)prj, *nx, *ny, *sxy, *spt, x, y, \ + phi, theta, stat);} + +#define PRJ_FWRAP(pcode, PCODE) \ + PRJSET_FWRAP(pcode, PCODE) \ + PRJS2X_FWRAP(pcode, PCODE) \ + PRJX2S_FWRAP(pcode, PCODE) + +PRJ_FWRAP(prj, PRJ) +PRJ_FWRAP(azp, AZP) +PRJ_FWRAP(szp, SZP) +PRJ_FWRAP(tan, TAN) +PRJ_FWRAP(stg, STG) +PRJ_FWRAP(sin, SIN) +PRJ_FWRAP(arc, ARC) +PRJ_FWRAP(zpn, ZPN) +PRJ_FWRAP(zea, ZEA) +PRJ_FWRAP(air, AIR) +PRJ_FWRAP(cyp, CYP) +PRJ_FWRAP(cea, CEA) +PRJ_FWRAP(car, CAR) +PRJ_FWRAP(mer, MER) +PRJ_FWRAP(sfl, SFL) +PRJ_FWRAP(par, PAR) +PRJ_FWRAP(mol, MOL) +PRJ_FWRAP(ait, AIT) +PRJ_FWRAP(cop, COP) +PRJ_FWRAP(coe, COE) +PRJ_FWRAP(cod, COD) +PRJ_FWRAP(coo, COO) +PRJ_FWRAP(bon, BON) +PRJ_FWRAP(pco, PCO) +PRJ_FWRAP(tsc, TSC) +PRJ_FWRAP(csc, CSC) +PRJ_FWRAP(qsc, QSC) +PRJ_FWRAP(hpx, HPX) +PRJ_FWRAP(xph, XPH) diff --git a/deps/wcslib/Fortran/spc.inc b/deps/wcslib/Fortran/spc.inc new file mode 100644 index 0000000..a5c947a --- /dev/null +++ b/deps/wcslib/Fortran/spc.inc @@ -0,0 +1,84 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: spc.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL SPCPUT, SPCPTC, SPCPTD, SPCPTI, + : SPCGET, SPCGTC, SPCGTD, SPCGTI, + : SPCINI, SPCFREE, SPCSIZE, SPCENQ, SPCPRT, SPCPERR, + : SPCSET, SPCX2S, SPCS2X, + : SPCTYPE, SPCSPXE, SPCXPSE, SPCTRNE, SPCAIPS + + INTEGER SPCPUT, SPCPTC, SPCPTD, SPCPTI, + : SPCGET, SPCGTC, SPCGTD, SPCGTI, + : SPCINI, SPCFREE, SPCSIZE, SPCENQ, SPCPRT, SPCPERR, + : SPCSET, SPCX2S, SPCS2X, + : SPCTYPE, SPCSPXE, SPCXPSE, SPCTRNE, SPCAIPS + +* Deprecated functions. + EXTERNAL SPCTYP, SPCSPX, SPCXPS, SPCTRN + INTEGER SPCTYP, SPCSPX, SPCXPS, SPCTRN + +* Length of the SPCPRM data structure (INTEGER array) on 64-bit +* machines. Only needs to be 44 on 32-bit machines. + INTEGER SPCLEN + PARAMETER (SPCLEN = 50) + +* Codes for SPC data structure elements used by SPCPUT and SPCGET. + INTEGER SPC_FLAG, SPC_TYPE, SPC_CODE, SPC_CRVAL, SPC_RESTFRQ, + : SPC_RESTWAV, SPC_PV + + PARAMETER (SPC_FLAG = 100) + PARAMETER (SPC_TYPE = 101) + PARAMETER (SPC_CODE = 102) + PARAMETER (SPC_CRVAL = 103) + PARAMETER (SPC_RESTFRQ = 104) + PARAMETER (SPC_RESTWAV = 105) + PARAMETER (SPC_PV = 106) + +* Codes for SPC data structure elements used by SPCGET (only). + INTEGER SPC_W, SPC_ISGRISM, SPC_ERR + + PARAMETER (SPC_W = 200) + PARAMETER (SPC_ISGRISM = 201) + PARAMETER (SPC_ERR = 202) + +* Codes used by SPCENQ. + INTEGER SPCENQ_SET, SPCENQ_BYP + + PARAMETER (SPCENQ_SET = 2) + PARAMETER (SPCENQ_BYP = 4) + +* Error codes and messages. + INTEGER SPCERR_NO_CHANGE, SPCERR_SUCCESS, SPCERR_NULL_POINTER, + : SPCERR_BAD_SPEC_PARAMS, SPCERR_BAD_X, SPCERR_BAD_SPEC + + PARAMETER (SPCERR_NO_CHANGE = -1) + PARAMETER (SPCERR_SUCCESS = 0) + PARAMETER (SPCERR_NULL_POINTER = 1) + PARAMETER (SPCERR_BAD_SPEC_PARAMS = 2) + PARAMETER (SPCERR_BAD_X = 3) + PARAMETER (SPCERR_BAD_SPEC = 4) + + CHARACTER SPC_ERRMSG(-1:4)*80 + COMMON /SPC_DATA/ SPC_ERRMSG diff --git a/deps/wcslib/Fortran/spc_bindc.f90 b/deps/wcslib/Fortran/spc_bindc.f90 new file mode 100644 index 0000000..598c7ee --- /dev/null +++ b/deps/wcslib/Fortran/spc_bindc.f90 @@ -0,0 +1,301 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: spc_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION SPCPTC (SPC, WHAT, VALUE, M) + INTEGER :: SPC(*), WHAT + CHARACTER :: VALUE(*) + INTEGER :: M + + INTERFACE + INTEGER(C_INT) FUNCTION SPCPTC_C (SPC, WHAT, VALUE, M) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: SPC(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + INTEGER(C_INT) :: M + END FUNCTION SPCPTC_C + END INTERFACE + + SPCPTC = SPCPTC_C (SPC, WHAT, VALUE, M) +END FUNCTION SPCPTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCGTC (SPC, WHAT, VALUE) + INTEGER :: SPC(*), WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION SPCGTC_C (SPC, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: SPC(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION SPCGTC_C + END INTERFACE + + SPCGTC = SPCGTC_C (SPC, WHAT, VALUE) +END FUNCTION SPCGTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCPERR (SPC, PREFIX) + INTEGER :: SPC(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION SPCPERR_C (SPC, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: SPC(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION SPCPERR_C + END INTERFACE + + SPCPERR = SPCPERR_C (SPC, PREFIX) +END FUNCTION SPCPERR + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCTYPE (CTYPEI, STYPE, SCODE, SNAME, UNITS, PTYPE, XTYPE, & + RESTREQ, ERR) + CHARACTER :: CTYPEI(8), STYPE(4), SCODE(3), SNAME(21), UNITS(7), PTYPE(1), & + XTYPE(1) + INTEGER :: RESTREQ, ERR(*) + + INTERFACE + INTEGER(C_INT) FUNCTION SPCTYPE_C (CTYPEI, STYPE, SCODE, SNAME, UNITS, & + PTYPE, XTYPE, RESTREQ, ERR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPEI(8), STYPE(4), SCODE(3), & + SNAME(21), UNITS(7), PTYPE(1), XTYPE(1) + INTEGER(C_INT) :: RESTREQ, ERR(*) + END FUNCTION SPCTYPE_C + END INTERFACE + + SPCTYPE = SPCTYPE_C (CTYPEI, STYPE, SCODE, SNAME, UNITS, PTYPE, XTYPE, & + RESTREQ, ERR) +END FUNCTION SPCTYPE + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCTYP (CTYPEI, STYPE, SCODE, SNAME, UNITS, PTYPE, XTYPE, & + RESTREQ) + CHARACTER :: CTYPEI(8), STYPE(4), SCODE(3), SNAME(21), UNITS(7), PTYPE(1), & + XTYPE(1) + INTEGER :: RESTREQ + + INTERFACE + INTEGER(C_INT) FUNCTION SPCTYP_C (CTYPEI, STYPE, SCODE, SNAME, UNITS, & + PTYPE, XTYPE, RESTREQ) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPEI(8), STYPE(4), SCODE(3), & + SNAME(21), UNITS(7), PTYPE(1), XTYPE(1) + INTEGER(C_INT) :: RESTREQ + END FUNCTION SPCTYP_C + END INTERFACE + + SPCTYP = SPCTYP_C (CTYPEI, STYPE, SCODE, SNAME, UNITS, PTYPE, XTYPE, & + RESTREQ) +END FUNCTION SPCTYP + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCSPXE (CTYPES, CRVALS, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALX, DXDS, ERR) + CHARACTER :: CTYPES(8) + DOUBLE PRECISION :: CRVALS, RESTFRQ, RESTWAV + CHARACTER :: PTYPE(1), XTYPE(1) + INTEGER :: RESTREQ + DOUBLE PRECISION :: CRVALX, DXDS + INTEGER :: ERR(*) + + INTERFACE + INTEGER(C_INT) FUNCTION SPCSPXE_C (CTYPES, CRVALS, RESTFRQ, RESTWAV, & + PTYPE, XTYPE, RESTREQ, CRVALX, DXDS, & + ERR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES(8) + REAL(C_DOUBLE) :: CRVALS, RESTFRQ, RESTWAV + CHARACTER(KIND=C_CHAR, LEN=1) :: PTYPE(1), XTYPE(1) + INTEGER(C_INT) :: RESTREQ + REAL(C_DOUBLE) :: CRVALX, DXDS + INTEGER(C_INT) :: ERR(*) + END FUNCTION SPCSPXE_C + END INTERFACE + + SPCSPXE = SPCSPXE_C (CTYPES, CRVALS, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALX, DXDS, ERR) +END FUNCTION SPCSPXE + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCSPX (CTYPES, CRVALS, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALX, DXDS) + CHARACTER :: CTYPES(8) + DOUBLE PRECISION :: CRVALS, RESTFRQ, RESTWAV + CHARACTER :: PTYPE(1), XTYPE(1) + INTEGER :: RESTREQ + DOUBLE PRECISION :: CRVALX, DXDS + + INTERFACE + INTEGER(C_INT) FUNCTION SPCSPX_C (CTYPES, CRVALS, RESTFRQ, RESTWAV, & + PTYPE, XTYPE, RESTREQ, CRVALX, DXDS) & + BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES(8) + REAL(C_DOUBLE) :: CRVALS, RESTFRQ, RESTWAV + CHARACTER(KIND=C_CHAR, LEN=1) :: PTYPE(1), XTYPE(1) + INTEGER(C_INT) :: RESTREQ + REAL(C_DOUBLE) :: CRVALX, DXDS + END FUNCTION SPCSPX_C + END INTERFACE + + SPCSPX = SPCSPX_C (CTYPES, CRVALS, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALX, DXDS) +END FUNCTION SPCSPX + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCXPSE (CTYPES, CRVALX, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALS, DSDX, ERR) + CHARACTER :: CTYPES(8) + DOUBLE PRECISION :: CRVALX, RESTFRQ, RESTWAV + CHARACTER :: PTYPE(1), XTYPE(1) + INTEGER :: RESTREQ + DOUBLE PRECISION :: CRVALS, DSDX + INTEGER :: ERR(*) + + INTERFACE + INTEGER(C_INT) FUNCTION SPCXPSE_C (CTYPES, CRVALX, RESTFRQ, RESTWAV, & + PTYPE, XTYPE, RESTREQ, CRVALS, DSDX, & + ERR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES(8) + REAL(C_DOUBLE) :: CRVALX, RESTFRQ, RESTWAV + CHARACTER(KIND=C_CHAR, LEN=1) :: PTYPE(1), XTYPE(1) + INTEGER(C_INT) :: RESTREQ + REAL(C_DOUBLE) :: CRVALS, DSDX + INTEGER(C_INT) :: ERR(*) + END FUNCTION SPCXPSE_C + END INTERFACE + + SPCXPSE = SPCXPSE_C (CTYPES, CRVALX, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALS, DSDX, ERR) +END FUNCTION SPCXPSE + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCXPS (CTYPES, CRVALX, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALS, DSDX) + CHARACTER :: CTYPES(8) + DOUBLE PRECISION :: CRVALX, RESTFRQ, RESTWAV + CHARACTER :: PTYPE(1), XTYPE(1) + INTEGER :: RESTREQ + DOUBLE PRECISION :: CRVALS, DSDX + + INTERFACE + INTEGER(C_INT) FUNCTION SPCXPS_C (CTYPES, CRVALX, RESTFRQ, RESTWAV, & + PTYPE, XTYPE, RESTREQ, CRVALS, DSDX) & + BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES(8) + REAL(C_DOUBLE) :: CRVALX, RESTFRQ, RESTWAV + CHARACTER(KIND=C_CHAR, LEN=1) :: PTYPE(1), XTYPE(1) + INTEGER(C_INT) :: RESTREQ + REAL(C_DOUBLE) :: CRVALS, DSDX + END FUNCTION SPCXPS_C + END INTERFACE + + SPCXPS = SPCXPS_C (CTYPES, CRVALX, RESTFRQ, RESTWAV, PTYPE, XTYPE, & + RESTREQ, CRVALS, DSDX) +END FUNCTION SPCXPS + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCTRNE (CTYPES1, CRVALS1, CDELTS1, RESTFRQ, RESTWAV, & + CTYPES2, CRVALS2, CDELTS2, ERR) + CHARACTER :: CTYPES1(8) + DOUBLE PRECISION :: CRVALS1, CDELTS1, RESTFRQ, RESTWAV + CHARACTER :: CTYPES2(8) + DOUBLE PRECISION :: CRVALS2, CDELTS2 + INTEGER :: ERR(*) + + INTERFACE + INTEGER(C_INT) FUNCTION SPCTRNE_C ( & + CTYPES1, CRVALS1, CDELTS1, RESTFRQ, RESTWAV, & + CTYPES2, CRVALS2, CDELTS2, ERR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES1(8) + REAL(C_DOUBLE) :: CRVALS1, CDELTS1, RESTFRQ, RESTWAV + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES2(8) + REAL(C_DOUBLE) :: CRVALS2, CDELTS2 + INTEGER(C_INT) :: ERR(*) + END FUNCTION SPCTRNE_C + END INTERFACE + + SPCTRNE = SPCTRNE_C (CTYPES1, CRVALS1, CDELTS1, RESTFRQ, RESTWAV, & + CTYPES2, CRVALS2, CDELTS2, ERR) +END FUNCTION SPCTRNE + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCTRN (CTYPES1, CRVALS1, CDELTS1, RESTFRQ, RESTWAV, & + CTYPES2, CRVALS2, CDELTS2) + CHARACTER :: CTYPES1(8) + DOUBLE PRECISION :: CRVALS1, CDELTS1, RESTFRQ, RESTWAV + CHARACTER :: CTYPES2(8) + DOUBLE PRECISION :: CRVALS2, CDELTS2 + + INTERFACE + INTEGER(C_INT) FUNCTION SPCTRN_C ( & + CTYPES1, CRVALS1, CDELTS1, RESTFRQ, RESTWAV, & + CTYPES2, CRVALS2, CDELTS2) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES1(8) + REAL(C_DOUBLE) :: CRVALS1, CDELTS1, RESTFRQ, RESTWAV + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPES2(8) + REAL(C_DOUBLE) :: CRVALS2, CDELTS2 + END FUNCTION SPCTRN_C + END INTERFACE + + SPCTRN = SPCTRN_C (CTYPES1, CRVALS1, CDELTS1, RESTFRQ, RESTWAV, & + CTYPES2, CRVALS2, CDELTS2) +END FUNCTION SPCTRN + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION SPCAIPS (CTYPEA, VELREF, CTYPE, SPECSYS) + CHARACTER :: CTYPEA(8) + INTEGER :: VELREF + CHARACTER :: CTYPE(8), SPECSYS(8) + + INTERFACE + INTEGER(C_INT) FUNCTION SPCAIPS_C (CTYPEA, VELREF, CTYPE, SPECSYS) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPEA(8) + INTEGER(C_INT) :: VELREF + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPE(8), SPECSYS(8) + END FUNCTION SPCAIPS_C + END INTERFACE + + SPCAIPS = SPCAIPS_C (CTYPEA, VELREF, CTYPE, SPECSYS) +END FUNCTION SPCAIPS diff --git a/deps/wcslib/Fortran/spc_data.f b/deps/wcslib/Fortran/spc_data.f new file mode 100644 index 0000000..819f4bd --- /dev/null +++ b/deps/wcslib/Fortran/spc_data.f @@ -0,0 +1,39 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: spc_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA SPC_BLOCK_DATA + + CHARACTER SPC_ERRMSG(-1:4)*80 + + COMMON /SPC_DATA/ SPC_ERRMSG + + DATA SPC_ERRMSG / + : 'No change (not an error)', + : 'Success', + : 'Null spcprm pointer passed', + : 'Invalid spectral parameters', + : 'One or more of x coordinates were invalid', + : 'One or more of the spec coordinates were invalid'/ + + END diff --git a/deps/wcslib/Fortran/spc_f.c b/deps/wcslib/Fortran/spc_f.c new file mode 100644 index 0000000..2554596 --- /dev/null +++ b/deps/wcslib/Fortran/spc_f.c @@ -0,0 +1,543 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: spc_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include +#include +#include + +// Fortran name mangling. +#include +#define spcput_ F77_FUNC(spcput, SPCPUT) +#define spcptc_ F77_FUNC(spcptc, SPCPTC) +#define spcptd_ F77_FUNC(spcptd, SPCPTD) +#define spcpti_ F77_FUNC(spcpti, SPCPTI) +#define spcget_ F77_FUNC(spcget, SPCGET) +#define spcgtc_ F77_FUNC(spcgtc, SPCGTC) +#define spcgtd_ F77_FUNC(spcgtd, SPCGTD) +#define spcgti_ F77_FUNC(spcgti, SPCGTI) + +#define spcini_ F77_FUNC(spcini, SPCINI) +#define spcfree_ F77_FUNC(spcfree, SPCFREE) +#define spcsize_ F77_FUNC(spcsize, SPCSIZE) +#define spcenq_ F77_FUNC(spcenq, SPCENQ) +#define spcprt_ F77_FUNC(spcprt, SPCPRT) +#define spcperr_ F77_FUNC(spcperr, SPCPERR) +#define spcset_ F77_FUNC(spcset, SPCSET) +#define spcx2s_ F77_FUNC(spcx2s, SPCX2S) +#define spcs2x_ F77_FUNC(spcs2x, SPCS2X) +#define spctype_ F77_FUNC(spctype, SPCTYPE) +#define spcspxe_ F77_FUNC(spcspxe, SPCSPXE) +#define spcxpse_ F77_FUNC(spcxpse, SPCXPSE) +#define spctrne_ F77_FUNC(spctrne, SPCTRNE) +#define spcaips_ F77_FUNC(spcaips, SPCAIPS) + +// Deprecated. +#define spctyp_ F77_FUNC(spctyp, SPCTYP) +#define spcspx_ F77_FUNC(spcspx, SPCSPX) +#define spcxps_ F77_FUNC(spcxps, SPCXPS) +#define spctrn_ F77_FUNC(spctrn, SPCTRN) + +#ifdef BINDC + #undef spcptc_ + #define spcptc_ spcptc_c + + #undef spcgtc_ + #define spcgtc_ spcgtc_c + + #undef spcperr_ + #define spcperr_ spcperr_c + + #undef spctype_ + #define spctype_ spctype_c + #undef spctyp_ + #define spctyp_ spctyp_c + + #undef spcspxe_ + #define spcspxe_ spcspxe_c + #undef spcspx_ + #define spcspx_ spcspx_c + + #undef spcxpse_ + #define spcxpse_ spcxpse_c + #undef spcxps_ + #define spcxps_ spcxps_c + + #undef spctrne_ + #define spctrne_ spctrne_c + #undef spctrn_ + #define spctrn_ spctrn_c + + #undef spcaips_ + #define spcaips_ spcaips_c +#endif + +// Must match the values set in spc.inc. +#define SPC_FLAG 100 +#define SPC_TYPE 101 +#define SPC_CODE 102 +#define SPC_CRVAL 103 +#define SPC_RESTFRQ 104 +#define SPC_RESTWAV 105 +#define SPC_PV 106 + +#define SPC_W 200 +#define SPC_ISGRISM 201 +#define SPC_ERR 202 + +//---------------------------------------------------------------------------- + +int spcput_(int *spc, const int *what, const void *value, const int *m) + +{ + // Cast pointers. + struct spcprm *spcp = (struct spcprm *)spc; + const char *cvalp = (const char *)value; + const int *ivalp = (const int *)value; + const double *dvalp = (const double *)value; + + if (spcp->flag == 1 || spcp->flag < 0) { + // Preserve bypass mode. + spcp->flag = 1; + } else { + spcp->flag = 0; + } + + switch (*what) { + case SPC_FLAG: + spcp->flag = *ivalp; + break; + case SPC_TYPE: + // Only four characters need be given. + wcsutil_strcvt(4, ' ', 1, cvalp, spcp->type); + wcsutil_null_fill(8, spcp->type); + break; + case SPC_CODE: + // Only three characters need be given. + wcsutil_strcvt(3, ' ', 1, cvalp, spcp->code); + wcsutil_null_fill(4, spcp->code); + break; + case SPC_CRVAL: + spcp->crval = *dvalp; + break; + case SPC_RESTFRQ: + spcp->restfrq = *dvalp; + break; + case SPC_RESTWAV: + spcp->restwav = *dvalp; + break; + case SPC_PV: + spcp->pv[*m] = *dvalp; + break; + default: + return 1; + } + + return 0; +} + +int spcptc_(int *spc, const int *what, const char *value, const int *m) +{ + return spcput_(spc, what, value, m); +} + +int spcptd_(int *spc, const int *what, const double *value, const int *m) +{ + return spcput_(spc, what, value, m); +} + +int spcpti_(int *spc, const int *what, const int *value, const int *m) +{ + return spcput_(spc, what, value, m); +} + +//---------------------------------------------------------------------------- + +int spcget_(const int *spc, const int *what, void *value) + +{ + // Cast pointers. + const struct spcprm *spcp = (const struct spcprm *)spc; + char *cvalp = (char *)value; + int *ivalp = (int *)value; + double *dvalp = (double *)value; + + switch (*what) { + case SPC_FLAG: + *ivalp = spcp->flag; + break; + case SPC_TYPE: + wcsutil_strcvt(8, ' ', 0, spcp->type, cvalp); + break; + case SPC_CODE: + wcsutil_strcvt(4, ' ', 0, spcp->code, cvalp); + break; + case SPC_CRVAL: + *dvalp = spcp->crval; + break; + case SPC_RESTFRQ: + *dvalp = spcp->restfrq; + break; + case SPC_RESTWAV: + *dvalp = spcp->restwav; + break; + case SPC_PV: + for (int m = 0; m < 7; m++) { + *(dvalp++) = spcp->pv[m]; + } + break; + case SPC_W: + for (int m = 0; m < 6; m++) { + *(dvalp++) = spcp->w[m]; + } + break; + case SPC_ISGRISM: + *ivalp = spcp->isGrism; + break; + case SPC_ERR: + // Copy the contents of the wcserr struct. + if (spcp->err) { + const int *ispcp = (int *)(spcp->err); + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(ispcp++); + } + } else { + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + default: + return 1; + } + + return 0; +} + +int spcgtc_(const int *spc, const int *what, char *value) +{ + return spcget_(spc, what, value); +} + +int spcgtd_(const int *spc, const int *what, double *value) +{ + return spcget_(spc, what, value); +} + +int spcgti_(const int *spc, const int *what, int *value) +{ + return spcget_(spc, what, value); +} + +//---------------------------------------------------------------------------- + +int spcini_(int *spc) + +{ + return spcini((struct spcprm *)spc); +} + +//---------------------------------------------------------------------------- + +int spcfree_(int *spc) + +{ + return spcfree((struct spcprm *)spc); +} + +//---------------------------------------------------------------------------- + +int spcsize_(const int *spc, int sizes[2]) + +{ + return spcsize((const struct spcprm *)spc, sizes); +} + +//---------------------------------------------------------------------------- + +int spcenq_(const int *spc, int *enquiry) + +{ + return spcenq((const struct spcprm *)spc, *enquiry); +} + +//---------------------------------------------------------------------------- + +int spcprt_(const int *spc) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling SPCPRT in the Fortran code. + fflush(NULL); + + return spcprt((const struct spcprm *)spc); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int spcperr_(int *spc, const char prefix[72]) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. + // If not, try CALL FLUSH(6) before calling SPCPERR in the Fortran code. + fflush(NULL); + + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + return wcserr_prt(((struct spcprm *)spc)->err, prefix_); +} + +//---------------------------------------------------------------------------- + +int spcset_(int *spc) + +{ + return spcset((struct spcprm *)spc); +} + +//---------------------------------------------------------------------------- + +int spcx2s_( + int *spc, + const int *nx, + const int *sspec, + const int *sx, + const double x[], + double spec[], + int stat[]) + +{ + return spcx2s((struct spcprm *)spc, *nx, *sx, *sspec, x, spec, stat); +} + +//---------------------------------------------------------------------------- + +int spcs2x_( + int *spc, + const int *nspec, + const int *sspec, + const int *sx, + const double spec[], + double x[], + int stat[]) + +{ + return spcs2x((struct spcprm *)spc, *nspec, *sspec, *sx, spec, x, stat); +} + +//---------------------------------------------------------------------------- + +int spctype_( + const char ctypei[8], + char stype[4], + char scode[3], + char sname[21], + char units[7], + char ptype[1], + char xtype[1], + int *restreq, + iptr err) + +{ + char ctypei_[9]; + wcsutil_strcvt(8, ' ', 1, ctypei, ctypei_); + + char stype_[5], scode_[4], sname_[22], units_[8]; + int status = spctype(ctypei_, stype_, scode_, sname_, units_, ptype, xtype, + restreq, (struct wcserr **)err); + + wcsutil_strcvt( 4, ' ', 0, stype_, stype); + wcsutil_strcvt( 3, ' ', 0, scode_, scode); + wcsutil_strcvt(21, ' ', 0, sname_, sname); + wcsutil_strcvt( 7, ' ', 0, units_, units); + + return status; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spctyp_( + const char ctypei[8], + char stype[4], + char scode[3], + char sname[21], + char units[7], + char ptype[1], + char xtype[1], + int *restreq) + +{ + return spctype_(ctypei, stype, scode, sname, units, ptype, xtype, restreq, + 0x0); +} + +//---------------------------------------------------------------------------- + +int spcspxe_( + const char ctypeS[8], + const double *crvalS, + const double *restfrq, + const double *restwav, + char ptype[1], + char xtype[1], + int *restreq, + double *crvalX, + double *dXdS, + iptr err) + +{ + char ctypeS_[9]; + wcsutil_strcvt(8, ' ', 1, ctypeS, ctypeS_); + + return spcspxe(ctypeS_, *crvalS, *restfrq, *restwav, ptype, xtype, restreq, + crvalX, dXdS, (struct wcserr **)err); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spcspx_( + const char ctypeS[8], + const double *crvalS, + const double *restfrq, + const double *restwav, + char ptype[1], + char xtype[1], + int *restreq, + double *crvalX, + double *dXdS) + +{ + return spcspxe_(ctypeS, crvalS, restfrq, restwav, ptype, xtype, restreq, + crvalX, dXdS, 0x0); +} + +//---------------------------------------------------------------------------- + +int spcxpse_( + const char ctypeS[8], + const double *crvalX, + const double *restfrq, + const double *restwav, + char ptype[1], + char xtype[1], + int *restreq, + double *crvalS, + double *dSdX, + iptr err) + +{ + char ctypeS_[9]; + wcsutil_strcvt(8, ' ', 1, ctypeS, ctypeS_); + + return spcxpse(ctypeS_, *crvalX, *restfrq, *restwav, ptype, xtype, restreq, + crvalS, dSdX, (struct wcserr **)err); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spcxps_( + const char ctypeS[8], + const double *crvalX, + const double *restfrq, + const double *restwav, + char ptype[1], + char xtype[1], + int *restreq, + double *crvalS, + double *dSdX) + +{ + return spcxpse_(ctypeS, crvalX, restfrq, restwav, ptype, xtype, restreq, + crvalS, dSdX, 0x0); +} + +//---------------------------------------------------------------------------- + +int spctrne_( + const char ctypeS1[8], + const double *crvalS1, + const double *cdeltS1, + const double *restfrq, + const double *restwav, + char ctypeS2[8], + double *crvalS2, + double *cdeltS2, + iptr err) + +{ + char ctypeS1_[9], ctypeS2_[9]; + wcsutil_strcvt(8, ' ', 1, ctypeS1, ctypeS1_); + wcsutil_strcvt(8, ' ', 1, ctypeS2, ctypeS2_); + + int status = spctrne(ctypeS1_, *crvalS1, *cdeltS1, *restfrq, *restwav, + ctypeS2_, crvalS2, cdeltS2, (struct wcserr **)err); + + wcsutil_strcvt(8, ' ', 0, ctypeS2_, ctypeS2); + + return status; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int spctrn_( + const char ctypeS1[8], + const double *crvalS1, + const double *cdeltS1, + const double *restfrq, + const double *restwav, + char ctypeS2[8], + double *crvalS2, + double *cdeltS2) + +{ + return spctrne_(ctypeS1, crvalS1, cdeltS1, restfrq, restwav, ctypeS2, + crvalS2, cdeltS2, 0x0); +} + +//---------------------------------------------------------------------------- + +int spcaips_( + const char ctypeA[8], + int *velref, + char ctype[8], + char specsys[8]) + +{ + char ctypeA_[9]; + wcsutil_strcvt(8, ' ', 1, ctypeA, ctypeA_); + + char ctype_[9], specsys_[9]; + int status = spcaips(ctypeA_, *velref, ctype_, specsys_); + + wcsutil_strcvt(8, ' ', 0, ctype_, ctype); + wcsutil_strcvt(8, ' ', 0, specsys_, specsys); + + return status; +} diff --git a/deps/wcslib/Fortran/sph.inc b/deps/wcslib/Fortran/sph.inc new file mode 100644 index 0000000..b2fc3c4 --- /dev/null +++ b/deps/wcslib/Fortran/sph.inc @@ -0,0 +1,27 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: sph.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL SPHX2S, SPHS2X, SPHDPA, SPHPAD + INTEGER SPHX2S, SPHS2X, SPHDPA, SPHPAD diff --git a/deps/wcslib/Fortran/sph_f.c b/deps/wcslib/Fortran/sph_f.c new file mode 100644 index 0000000..3fec2c6 --- /dev/null +++ b/deps/wcslib/Fortran/sph_f.c @@ -0,0 +1,96 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: sph_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include + +// Fortran name mangling. +#include +#define sphx2s_ F77_FUNC(sphx2s, SPHX2S) +#define sphs2x_ F77_FUNC(sphs2x, SPHS2X) +#define sphdpa_ F77_FUNC(sphdpa, SPHDPA) +#define sphpad_ F77_FUNC(sphpad, SPHPAD) + +//---------------------------------------------------------------------------- + +int sphx2s_( + const double eul[5], + const int *nphi, + const int *ntheta, + const int *spt, + const int *sll, + const double phi[], + const double theta[], + double lng[], + double lat[]) + +{ + return sphx2s(eul, *nphi, *ntheta, *spt, *sll, phi, theta, lng, lat); +} + +//---------------------------------------------------------------------------- + +int sphs2x_( + const double eul[5], + const int *nlng, + const int *nlat, + const int *sll, + const int *spt, + const double lng[], + const double lat[], + double phi[], + double theta[]) + +{ + return sphs2x(eul, *nlng, *nlat, *sll, *spt, lng, lat, phi, theta); +} + +//---------------------------------------------------------------------------- + +int sphdpa_( + const int *nfield, + const double *lng0, + const double *lat0, + const double lng[], + const double lat[], + double dist[], + double pa[]) + +{ + return sphdpa(*nfield, *lng0, *lat0, lng, lat, dist, pa); +} + +//---------------------------------------------------------------------------- + +int sphpad_( + const int *nfield, + const double *lng0, + const double *lat0, + const double dist[], + const double pa[], + double lng[], + double lat[]) + +{ + return sphpad(*nfield, *lng0, *lat0, dist, pa, lng, lat); +} diff --git a/deps/wcslib/Fortran/spx.inc b/deps/wcslib/Fortran/spx.inc new file mode 100644 index 0000000..f04e2b4 --- /dev/null +++ b/deps/wcslib/Fortran/spx.inc @@ -0,0 +1,130 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: spx.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL SPECX, SPXGET, SPXGTI, + : FREQAFRQ, AFRQFREQ, FREQENER, ENERFREQ, + : FREQWAVN, WAVNFREQ, FREQVRAD, VRADFREQ, + : FREQWAVE, WAVEFREQ, FREQAWAV, AWAVFREQ, + : FREQVELO, VELOFREQ, WAVEVOPT, VOPTWAVE, + : WAVEZOPT, ZOPTWAVE, WAVEAWAV, AWAVWAVE, + : WAVEVELO, VELOWAVE, AWAVVELO, VELOAWAV, + : VELOBETA, BETAVELO + INTEGER SPECX, SPXGET, SPXGTI, + : FREQAFRQ, AFRQFREQ, FREQENER, ENERFREQ, + : FREQWAVN, WAVNFREQ, FREQVRAD, VRADFREQ, + : FREQWAVE, WAVEFREQ, FREQAWAV, AWAVFREQ, + : FREQVELO, VELOFREQ, WAVEVOPT, VOPTWAVE, + : WAVEZOPT, ZOPTWAVE, WAVEAWAV, AWAVWAVE, + : WAVEVELO, VELOWAVE, AWAVVELO, VELOAWAV, + : VELOBETA, BETAVELO + +* Length of the SPXPRM data structure (INTEGER array) on 64-bit +* machines. Only needs to be 82 on 32-bit machines. + INTEGER SPXLEN + PARAMETER (SPXLEN = 84) + +* Spectral data structure. + INTEGER SPX_WAVETYPE, SPX_VELOTYPE + DOUBLE PRECISION + : SPX_RESTFRQ, SPX_RESTWAV, SPX_TYPES, + : SPX_FREQ, SPX_AFRQ, SPX_ENER, SPX_WAVN, + : SPX_VRAD, SPX_WAVE, SPX_VOPT, SPX_ZOPT, + : SPX_AWAV, SPX_VELO, SPX_BETA, + : SPX_DFREQAFRQ, SPX_DAFRQFREQ, SPX_DFREQENER, + : SPX_DENERFREQ, SPX_DFREQWAVN, SPX_DWAVNFREQ, + : SPX_DFREQVRAD, SPX_DVRADFREQ, SPX_DFREQWAVE, + : SPX_DWAVEFREQ, SPX_DFREQAWAV, SPX_DAWAVFREQ, + : SPX_DFREQVELO, SPX_DVELOFREQ, SPX_DWAVEVOPT, + : SPX_DVOPTWAVE, SPX_DWAVEZOPT, SPX_DZOPTWAVE, + : SPX_DWAVEAWAV, SPX_DAWAVWAVE, SPX_DWAVEVELO, + : SPX_DVELOWAVE, SPX_DAWAVVELO, SPX_DVELOAWAV, + : SPX_DVELOBETA, SPX_DBETAVELO + +* Direct equivalences into the data structure (not indexing codes). + DOUBLE PRECISION SPX(41) + EQUIVALENCE (SPX( 1), SPX_RESTFRQ) + EQUIVALENCE (SPX( 2), SPX_RESTWAV) + EQUIVALENCE (SPX( 3), SPX_TYPES) + EQUIVALENCE (SPX( 4), SPX_FREQ) + EQUIVALENCE (SPX( 5), SPX_AFRQ) + EQUIVALENCE (SPX( 6), SPX_ENER) + EQUIVALENCE (SPX( 7), SPX_WAVN) + EQUIVALENCE (SPX( 8), SPX_VRAD) + EQUIVALENCE (SPX( 9), SPX_WAVE) + EQUIVALENCE (SPX(10), SPX_VOPT) + EQUIVALENCE (SPX(11), SPX_ZOPT) + EQUIVALENCE (SPX(12), SPX_AWAV) + EQUIVALENCE (SPX(13), SPX_VELO) + EQUIVALENCE (SPX(14), SPX_BETA) + EQUIVALENCE (SPX(15), SPX_DFREQAFRQ) + EQUIVALENCE (SPX(16), SPX_DAFRQFREQ) + EQUIVALENCE (SPX(17), SPX_DFREQENER) + EQUIVALENCE (SPX(18), SPX_DENERFREQ) + EQUIVALENCE (SPX(19), SPX_DFREQWAVN) + EQUIVALENCE (SPX(20), SPX_DWAVNFREQ) + EQUIVALENCE (SPX(21), SPX_DFREQVRAD) + EQUIVALENCE (SPX(22), SPX_DVRADFREQ) + EQUIVALENCE (SPX(23), SPX_DFREQWAVE) + EQUIVALENCE (SPX(24), SPX_DWAVEFREQ) + EQUIVALENCE (SPX(25), SPX_DFREQAWAV) + EQUIVALENCE (SPX(26), SPX_DAWAVFREQ) + EQUIVALENCE (SPX(27), SPX_DFREQVELO) + EQUIVALENCE (SPX(28), SPX_DVELOFREQ) + EQUIVALENCE (SPX(29), SPX_DWAVEVOPT) + EQUIVALENCE (SPX(30), SPX_DVOPTWAVE) + EQUIVALENCE (SPX(31), SPX_DWAVEZOPT) + EQUIVALENCE (SPX(32), SPX_DZOPTWAVE) + EQUIVALENCE (SPX(33), SPX_DWAVEAWAV) + EQUIVALENCE (SPX(34), SPX_DAWAVWAVE) + EQUIVALENCE (SPX(35), SPX_DWAVEVELO) + EQUIVALENCE (SPX(36), SPX_DVELOWAVE) + EQUIVALENCE (SPX(37), SPX_DAWAVVELO) + EQUIVALENCE (SPX(38), SPX_DVELOAWAV) + EQUIVALENCE (SPX(39), SPX_DVELOBETA) + EQUIVALENCE (SPX(40), SPX_DBETAVELO) + + INTEGER SPXI(2) + EQUIVALENCE (SPXI, SPX_TYPES) + EQUIVALENCE (SPXI(1), SPX_WAVETYPE) + EQUIVALENCE (SPXI(2), SPX_VELOTYPE) + +* Codes for SPX data structure elements used by SPXGET (only). + INTEGER SPX_ERR + + PARAMETER (SPX_ERR = 200) + +* Error codes and messages. + INTEGER SPXERR_SUCCESS, SPXERR_NULL_POINTER, + : SPXERR_BAD_SPEC_PARAMS, SPXERR_BAD_SPEC_VAR, + : SPXERR_BAD_INSPEC_COORD + + PARAMETER (SPXERR_SUCCESS = 0) + PARAMETER (SPXERR_NULL_POINTER = 1) + PARAMETER (SPXERR_BAD_SPEC_PARAMS = 2) + PARAMETER (SPXERR_BAD_SPEC_VAR = 3) + PARAMETER (SPXERR_BAD_INSPEC_COORD = 4) + + CHARACTER SPX_ERRMSG(0:4)*80 + COMMON /SPX_DATA/ SPX_ERRMSG diff --git a/deps/wcslib/Fortran/spx_bindc.f90 b/deps/wcslib/Fortran/spx_bindc.f90 new file mode 100644 index 0000000..efc8b2a --- /dev/null +++ b/deps/wcslib/Fortran/spx_bindc.f90 @@ -0,0 +1,39 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: spx_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION SPECX (TYPE, SPEC, RESTFRQ, RESTWAV, SPECS) + CHARACTER :: TYPE(4) + DOUBLE PRECISION :: SPEC, RESTFRQ, RESTWAV, SPECS + + INTERFACE + INTEGER(C_INT) FUNCTION SPECX_C (TYPE, SPEC, RESTFRQ, RESTWAV, SPECS) & + BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: TYPE(4) + REAL(C_DOUBLE) :: SPEC, RESTFRQ, RESTWAV, SPECS + END FUNCTION SPECX_C + END INTERFACE + + SPECX = SPECX_C (TYPE, SPEC, RESTFRQ, RESTWAV, SPECS) +END FUNCTION SPECX diff --git a/deps/wcslib/Fortran/spx_data.f b/deps/wcslib/Fortran/spx_data.f new file mode 100644 index 0000000..21729af --- /dev/null +++ b/deps/wcslib/Fortran/spx_data.f @@ -0,0 +1,38 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: spx_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA SPX_BLOCK_DATA + + CHARACTER SPX_ERRMSG(0:4)*80 + + COMMON /SPX_DATA/ SPX_ERRMSG + + DATA SPX_ERRMSG / + : 'Success', + : 'Null spxprm pointer passed', + : 'Invalid spectral parameters', + : 'Invalid spectral variable', + : 'One or more of the inspec coordinates were invalid'/ + + END diff --git a/deps/wcslib/Fortran/spx_f.c b/deps/wcslib/Fortran/spx_f.c new file mode 100644 index 0000000..cb161ff --- /dev/null +++ b/deps/wcslib/Fortran/spx_f.c @@ -0,0 +1,150 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: spx_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include + +#include +#include +#include + +// Fortran name mangling. +#include +#define spxget_ F77_FUNC(spxget, SPXGET) +#define specx_ F77_FUNC(specx, SPECX) + +#ifdef BINDC + #undef specx_ + #define specx_ specx_c +#endif + +// Must match the value set in spx.inc. +#define SPX_ERR 200 + +//---------------------------------------------------------------------------- + +int spxget_(const int *spx, const int *what, void *value) + +{ + unsigned int l; + int *ivalp; + const int *ispxp; + const struct spxprm *spxp; + + // Cast pointers. + spxp = (const struct spxprm *)spx; + ivalp = (int *)value; + + switch (*what) { + case SPX_ERR: + // Copy the contents of the wcserr struct. + if (spxp->err) { + ispxp = (int *)(spxp->err); + for (l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(ispxp++); + } + } else { + for (l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + default: + return 1; + } + + return 0; +} + +int spxgti_(const int *spx, const int *what, int *value) +{ + return spxget_(spx, what, value); +} + +//---------------------------------------------------------------------------- + +int specx_( + const char type[4], + const double *spec, + const double *restfrq, + const double *restwav, + double *specs) + +{ + char type_[5]; + wcsutil_strcvt(4, '\0', 1, type, type_); + + return specx(type_, *spec, *restfrq, *restwav, (struct spxprm *)specs); +} + +//---------------------------------------------------------------------------- + +#define SPX_FWRAP(scode, SCODE) \ + int F77_FUNC(scode, SCODE)( \ + const double *rest, \ + const int *n1, \ + const int *s1, \ + const int *s2, \ + const double spec1[], \ + double spec2[], \ + int stat[]) \ + {return scode(*rest, *n1, *s1, *s2, spec1, spec2, stat);} + +SPX_FWRAP(freqafrq, FREQAFRQ) +SPX_FWRAP(afrqfreq, AFRQFREQ) + +SPX_FWRAP(freqener, FREQENER) +SPX_FWRAP(enerfreq, ENERFREQ) + +SPX_FWRAP(freqwavn, FREQWAVN) +SPX_FWRAP(wavnfreq, WAVNFREQ) + +SPX_FWRAP(freqvrad, FREQVRAD) +SPX_FWRAP(vradfreq, VRADFREQ) + +SPX_FWRAP(freqwave, FREQWAVE) +SPX_FWRAP(wavefreq, WAVEFREQ) + +SPX_FWRAP(freqawav, FREQAWAV) +SPX_FWRAP(awavfreq, AWAVFREQ) + +SPX_FWRAP(freqvelo, FREQVELO) +SPX_FWRAP(velofreq, VELOFREQ) + +SPX_FWRAP(wavevopt, WAVEVOPT) +SPX_FWRAP(voptwave, VOPTWAVE) + +SPX_FWRAP(wavezopt, WAVEZOPT) +SPX_FWRAP(zoptwave, ZOPTWAVE) + +SPX_FWRAP(waveawav, WAVEAWAV) +SPX_FWRAP(awavwave, AWAVWAVE) + +SPX_FWRAP(wavevelo, WAVEVELO) +SPX_FWRAP(velowave, VELOWAVE) + +SPX_FWRAP(awavvelo, AWAVVELO) +SPX_FWRAP(veloawav, VELOAWAV) + +SPX_FWRAP(velobeta, VELOBETA) +SPX_FWRAP(betavelo, BETAVELO) diff --git a/deps/wcslib/Fortran/tab.inc b/deps/wcslib/Fortran/tab.inc new file mode 100644 index 0000000..9410928 --- /dev/null +++ b/deps/wcslib/Fortran/tab.inc @@ -0,0 +1,81 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tab.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL TABPUT, TABPTD, TABPTI, TABGET, TABGTD, TABGTI, + : TABINI, TABMEM, TABCPY, TABCMP, TABFREE, TABSIZE, + : TABENQ, TABPRT, TABPERR, TABSET, TABX2S, TABS2X + + INTEGER TABPUT, TABPTD, TABPTI, TABGET, TABGTD, TABGTI, + : TABINI, TABMEM, TABCPY, TABCMP, TABFREE, TABSIZE, + : TABENQ, TABPRT, TABPERR, TABSET, TABX2S, TABS2X + +* Length of the TABPRM data structure (INTEGER array) on 64-bit +* machines. Only needs to be 24 on 32-bit machines. + INTEGER TABLEN + PARAMETER (TABLEN = 40) + +* Codes for TAB data structure elements used by TABPUT and TABGET. + INTEGER TAB_FLAG, TAB_M, TAB_K, TAB_MAP, TAB_CRVAL, TAB_INDEX, + : TAB_COORD + + PARAMETER (TAB_FLAG = 100) + PARAMETER (TAB_M = 101) + PARAMETER (TAB_K = 102) + PARAMETER (TAB_MAP = 103) + PARAMETER (TAB_CRVAL = 104) + PARAMETER (TAB_INDEX = 105) + PARAMETER (TAB_COORD = 106) + +* Codes for TAB data structure elements used by TABGET (only). + INTEGER TAB_NC, TAB_SENSE, TAB_P0, TAB_DELTA, TAB_EXTREMA, + : TAB_ERR + + PARAMETER (TAB_NC = 200) + PARAMETER (TAB_SENSE = 201) + PARAMETER (TAB_P0 = 202) + PARAMETER (TAB_DELTA = 203) + PARAMETER (TAB_EXTREMA = 204) + PARAMETER (TAB_ERR = 205) + +* Codes used by TABENQ. + INTEGER TABENQ_MEM, TABENQ_SET, TABENQ_BYP + + PARAMETER (TABENQ_MEM = 1) + PARAMETER (TABENQ_SET = 2) + PARAMETER (TABENQ_BYP = 4) + +* Error codes and messages. + INTEGER TABERR_SUCCESS, TABERR_NULL_POINTER, TABERR_MEMORY, + : TABERR_BAD_PARAMS, TABERR_BAD_X, TABERR_BAD_WORLD + + PARAMETER (TABERR_SUCCESS = 0) + PARAMETER (TABERR_NULL_POINTER = 1) + PARAMETER (TABERR_MEMORY = 2) + PARAMETER (TABERR_BAD_PARAMS = 3) + PARAMETER (TABERR_BAD_X = 4) + PARAMETER (TABERR_BAD_WORLD = 5) + + CHARACTER TAB_ERRMSG(0:5)*80 + COMMON /TAB_DATA/ TAB_ERRMSG diff --git a/deps/wcslib/Fortran/tab_bindc.f90 b/deps/wcslib/Fortran/tab_bindc.f90 new file mode 100644 index 0000000..32eb8d5 --- /dev/null +++ b/deps/wcslib/Fortran/tab_bindc.f90 @@ -0,0 +1,38 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: tab_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION TABPERR (TAB, PREFIX) + INTEGER :: TAB(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION TABPERR_C (TAB, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: TAB(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION TABPERR_C + END INTERFACE + + TABPERR = TABPERR_C (TAB, PREFIX) +END FUNCTION TABPERR diff --git a/deps/wcslib/Fortran/tab_data.f b/deps/wcslib/Fortran/tab_data.f new file mode 100644 index 0000000..3398ab3 --- /dev/null +++ b/deps/wcslib/Fortran/tab_data.f @@ -0,0 +1,39 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tab_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA TAB_BLOCK_DATA + + CHARACTER TAB_ERRMSG(0:5)*80 + + COMMON /TAB_DATA/ TAB_ERRMSG + + DATA TAB_ERRMSG / + : 'Success', + : 'Null tabprm pointer passed', + : 'Memory allocation failed', + : 'Invalid tabular parameters', + : 'One or more of the x coordinates were invalid', + : 'One or more of the world coordinates were invalid'/ + + END diff --git a/deps/wcslib/Fortran/tab_f.c b/deps/wcslib/Fortran/tab_f.c new file mode 100644 index 0000000..005c6e8 --- /dev/null +++ b/deps/wcslib/Fortran/tab_f.c @@ -0,0 +1,377 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: tab_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include +#include +#include + +// Fortran name mangling. +#include +#define tabput_ F77_FUNC(tabput, TABPUT) +#define tabptd_ F77_FUNC(tabptd, TABPTD) +#define tabpti_ F77_FUNC(tabpti, TABPTI) +#define tabget_ F77_FUNC(tabget, TABGET) +#define tabgtd_ F77_FUNC(tabgtd, TABGTD) +#define tabgti_ F77_FUNC(tabgti, TABGTI) + +#define tabini_ F77_FUNC(tabini, TABINI) +#define tabmem_ F77_FUNC(tabmem, TABMEM) +#define tabcpy_ F77_FUNC(tabcpy, TABCPY) +#define tabcmp_ F77_FUNC(tabcmp, TABCMP) +#define tabfree_ F77_FUNC(tabfree, TABFREE) +#define tabsize_ F77_FUNC(tabsize, TABSIZE) +#define tabenq_ F77_FUNC(tabenq, TABENQ) +#define tabprt_ F77_FUNC(tabprt, TABPRT) +#define tabperr_ F77_FUNC(tabperr, TABPERR) +#define tabset_ F77_FUNC(tabset, TABSET) +#define tabx2s_ F77_FUNC(tabx2s, TABX2S) +#define tabs2x_ F77_FUNC(tabs2x, TABS2X) + +#ifdef BINDC + #undef tabperr_ + #define tabperr_ tabperr_c +#endif + +// Must match the value set in tab.inc. +#define TAB_FLAG 100 +#define TAB_M 101 +#define TAB_K 102 +#define TAB_MAP 103 +#define TAB_CRVAL 104 +#define TAB_INDEX 105 +#define TAB_COORD 106 + +#define TAB_NC 200 +#define TAB_SENSE 201 +#define TAB_P0 202 +#define TAB_DELTA 203 +#define TAB_EXTREMA 204 +#define TAB_ERR 205 + +//---------------------------------------------------------------------------- + +int tabput_( + int *tab, + const int *what, + const void *value, + const int *m, + const int *k) + +{ + // Cast pointers. + struct tabprm *tabp = (struct tabprm *)tab; + const int *ivalp = (const int *)value; + const double *dvalp = (const double *)value; + + // Convert 1-relative FITS axis numbers to 0-relative C array indices. + int m0 = *m - 1; + int k0 = *k - 1; + + if (tabp->flag == 1 || tabp->flag < 0) { + // Preserve bypass mode. + tabp->flag = 1; + } else { + tabp->flag = 0; + } + + switch (*what) { + case TAB_FLAG: + tabp->flag = *ivalp; + break; + case TAB_M: + tabp->M = *ivalp; + break; + case TAB_K: + tabp->K[m0] = *ivalp; + break; + case TAB_MAP: + tabp->map[m0] = *ivalp; + break; + case TAB_CRVAL: + tabp->crval[m0] = *dvalp; + break; + case TAB_INDEX: + tabp->index[m0][k0] = *dvalp; + break; + case TAB_COORD: + tabp->coord[m0] = *dvalp; + break; + default: + return 1; + } + + return 0; +} + +int tabptd_(int *tab, const int *what, const double *value, const int *m, + const int *k) +{ + return tabput_(tab, what, value, m, k); +} + +int tabpti_(int *tab, const int *what, const int *value, const int *m, + const int *k) +{ + return tabput_(tab, what, value, m, k); +} + +//---------------------------------------------------------------------------- + +int tabget_(const int *tab, const int *what, void *value) + +{ + // Cast pointers. + const struct tabprm *tabp = (const struct tabprm *)tab; + int *ivalp = (int *)value; + double *dvalp = (double *)value; + + int n; + switch (*what) { + case TAB_FLAG: + *ivalp = tabp->flag; + break; + case TAB_M: + *ivalp = tabp->M; + break; + case TAB_K: + for (int m = 0; m < tabp->M; m++) { + *(ivalp++) = tabp->K[m]; + } + break; + case TAB_MAP: + for (int m = 0; m < tabp->M; m++) { + *(ivalp++) = tabp->map[m]; + } + break; + case TAB_CRVAL: + for (int m = 0; m < tabp->M; m++) { + *(dvalp++) = tabp->crval[m]; + } + break; + case TAB_INDEX: + for (int m = 0; m < tabp->M; m++) { + for (int k = 0; k < tabp->K[m]; k++) { + *(dvalp++) = tabp->index[m][k]; + } + } + break; + case TAB_COORD: + // Don't rely on tabprm.nc being set. + n = tabp->M; + for (int m = 0; m < tabp->M; m++) { + n *= tabp->K[m]; + } + + for (int i = 0; i < n; i++) { + *(dvalp++) = tabp->coord[i]; + } + break; + case TAB_NC: + *ivalp = tabp->nc; + break; + case TAB_SENSE: + for (int m = 0; m < tabp->M; m++) { + *(ivalp++) = tabp->sense[m]; + } + break; + case TAB_P0: + for (int m = 0; m < tabp->M; m++) { + *(ivalp++) = tabp->p0[m]; + } + break; + case TAB_DELTA: + for (int m = 0; m < tabp->M; m++) { + *(dvalp++) = tabp->delta[m]; + } + break; + case TAB_EXTREMA: + n = 2 * tabp->M; + for (int m = 1; m < tabp->M; m++) { + n *= tabp->K[m]; + } + + for (int i = 0; i < n; i++) { + *(dvalp++) = tabp->extrema[i]; + } + break; + case TAB_ERR: + // Copy the contents of the wcserr struct. + if (tabp->err) { + const int *itabp = (int *)(tabp->err); + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(itabp++); + } + } else { + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + default: + return 1; + } + + return 0; +} + +int tabgtd_(const int *tab, const int *what, double *value) +{ + return tabget_(tab, what, value); +} + +int tabgti_(const int *tab, const int *what, int *value) +{ + return tabget_(tab, what, value); +} + +//---------------------------------------------------------------------------- + +int tabini_(const int *M, const int *K, int *tab) + +{ + return tabini(1, *M, K, (struct tabprm *)tab); +} + +//---------------------------------------------------------------------------- + +int tabmem_(int *tab) + +{ + return tabmem((struct tabprm *)tab); +} + +//---------------------------------------------------------------------------- + +int tabcpy_(const int *tabsrc, int *tabdst) + +{ + return tabcpy(1, (const struct tabprm *)tabsrc, (struct tabprm *)tabdst); +} + +//---------------------------------------------------------------------------- + +int tabcmp_( + const int *cmp, + const double *tol, + const int *tab1, + const int *tab2, + int *equal) + +{ + return tabcmp(*cmp, *tol, (const struct tabprm *)tab1, + (const struct tabprm *)tab2, equal); +} + +//---------------------------------------------------------------------------- + +int tabfree_(int *tab) + +{ + return tabfree((struct tabprm *)tab); +} + +//---------------------------------------------------------------------------- + +int tabsize_(const int *tab, int sizes[2]) + +{ + return tabsize((const struct tabprm *)tab, sizes); +} + +//---------------------------------------------------------------------------- + +int tabenq_(const int *tab, int *enquiry) + +{ + return tabenq((const struct tabprm *)tab, *enquiry); +} + +//---------------------------------------------------------------------------- + +int tabprt_(const int *tab) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling TABPRT in the Fortran code. + fflush(NULL); + + return tabprt((const struct tabprm *)tab); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int tabperr_(int *tab, const char prefix[72]) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. + // If not, try CALL FLUSH(6) before calling TABPERR in the Fortran code. + fflush(NULL); + + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + return wcserr_prt(((struct tabprm *)tab)->err, prefix_); +} + +//---------------------------------------------------------------------------- + +int tabset_(int *tab) + +{ + return tabset((struct tabprm *)tab); +} + +//---------------------------------------------------------------------------- + +int tabx2s_( + int *tab, + const int *ncoord, + const int *nelem, + const double x[], + double world[], + int stat[]) + +{ + return tabx2s((struct tabprm *)tab, *ncoord, *nelem, x, world, stat); +} + +//---------------------------------------------------------------------------- + +int tabs2x_( + struct tabprm* tab, + const int *ncoord, + const int *nelem, + const double world[], + double x[], + int stat[]) + +{ + return tabs2x((struct tabprm *)tab, *ncoord, *nelem, world, x, stat); +} diff --git a/deps/wcslib/Fortran/test/tcel1.f b/deps/wcslib/Fortran/test/tcel1.f new file mode 100644 index 0000000..1d7362c --- /dev/null +++ b/deps/wcslib/Fortran/test/tcel1.f @@ -0,0 +1,350 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tcel1.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TCEL1 +*----------------------------------------------------------------------- +* +* tcel1 tests the spherical projection driver routines supplied with +* WCSLIB by drawing native and celestial coordinate graticules for +* Bonne's projection. +* +*----------------------------------------------------------------------- + INTEGER CI, CRVAL1, CRVAL2, ILAT, ILNG, J, K, LATPOL, LNGPOL, + : STAT(361), STATUS + REAL XR(512), YR(512) + DOUBLE PRECISION LAT(181), LNG(361), PHI(361), REF(4), THETA(361), + : X(361), Y(361) + CHARACTER TEXT*72 + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary, done here using a equivalences. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'cel.inc' + INCLUDE 'prj.inc' + INTEGER CEL(CELLEN) + INTEGER NTV(CELLEN) + INTEGER PRJ(PRJLEN) + DOUBLE PRECISION DUMMY1, DUMMY2, DUMMY3 + EQUIVALENCE (CEL,DUMMY1), (NTV,DUMMY2), (PRJ,DUMMY3) +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing WCSLIB celestial coordinate transformation ', + : 'routines (tcel1.f)',/, + : '---------------------------------------------------', + : '------------------') + +* Initialize. + STATUS = CELINI (NTV) + +* Reference angles for the native graticule (in fact, the defaults). + STATUS = CELPTD (NTV, CEL_REF, 0D0, 1) + STATUS = CELPTD (NTV, CEL_REF, 0D0, 2) + +* Set up Bonne's projection with conformal latitude at +35. + STATUS = CELGTI (NTV, CEL_PRJ, PRJ) + STATUS = PRJPTC (PRJ, PRJ_CODE, 'BON', 0) + STATUS = PRJPTD (PRJ, PRJ_PV, 35D0, 1) + STATUS = CELPTI (NTV, CEL_PRJ, PRJ(1), 0) + + +* Celestial graticule. + STATUS = CELINI (CEL) + STATUS = CELPTI (CEL, CEL_PRJ, PRJ, 0) + + +* PGPLOT initialization. + CALL PGBEG (0, '/xwindow', 1, 1) + +* Define pen colours. + CALL PGSCR (0, 0.00, 0.00, 0.00) + CALL PGSCR (1, 1.00, 1.00, 0.00) + CALL PGSCR (2, 1.00, 1.00, 1.00) + CALL PGSCR (3, 0.50, 0.50, 0.80) + CALL PGSCR (4, 0.80, 0.50, 0.50) + CALL PGSCR (5, 0.80, 0.80, 0.80) + CALL PGSCR (6, 0.50, 0.50, 0.80) + CALL PGSCR (7, 0.80, 0.50, 0.50) + CALL PGSCR (8, 0.30, 0.50, 0.30) + +* Define PGPLOT viewport. + CALL PGENV (-180.0, 180.0, -90.0, 140.0, 1, -2) + +* Loop over CRVAL2, LONPOLE, and LATPOLE with CRVAL1 incrementing by +* 15 degrees each time (it has an uninteresting effect). + CRVAL1 = -180 + DO 190 CRVAL2 = -90, 90, 30 + DO 180 LNGPOL = -180, 180, 30 + DO 170 LATPOL = -1, 1, 2 +* For the celestial graticule, set the celestial +* coordinates of the reference point of the projection +* (which for Bonne's projection is at the intersection of +* the native equator and prime meridian), the native +* longitude of the celestial pole, and extra information +* needed to determine the celestial latitude of the native +* pole. These correspond to FITS keywords CRVAL1, CRVAL2, +* LONPOLE, and LATPOLE. + STATUS = CELPTI (CEL, CEL_FLAG, 0, 0) + STATUS = CELPTD (CEL, CEL_REF, DBLE(CRVAL1), 1) + STATUS = CELPTD (CEL, CEL_REF, DBLE(CRVAL2), 2) + STATUS = CELPTD (CEL, CEL_REF, DBLE(LNGPOL), 3) + STATUS = CELPTD (CEL, CEL_REF, DBLE(LATPOL), 4) + +* Skip invalid values of LONPOLE. + STATUS = CELSET (CEL) + IF (STATUS.NE.0) GO TO 170 + +* Skip redundant values of LATPOLE. + STATUS = CELGTD (CEL, CEL_REF, REF) + IF (LATPOL.EQ.1 .AND. ABS(REF(4)).LT.0.1D0) GO TO 170 + +* Buffer PGPLOT output. + CALL PGBBUF () + CALL PGERAS () + +* Write a descriptive title. + TEXT = 'Bonne''s projection (BON) - 15 degree graticule' + WRITE (*, '(/,A)') TEXT + CALL PGTEXT (-180.0, -100.0, TEXT) + + WRITE (TEXT, 20) REF(1), REF(2) + 20 FORMAT ('centred on celestial coordinates (',F7.2,',',F6.2, + : ')') + WRITE (*, '(A)') TEXT + CALL PGTEXT (-180.0, -110.0, TEXT) + + WRITE (TEXT, 30) REF(3), REF(4) + 30 FORMAT ('with north celestial pole at native coordinates (', + : F7.2,',',F7.2,')') + WRITE (*, '(A)') TEXT + CALL PGTEXT (-180.0, -120.0, TEXT) + + +* Draw the native graticule faintly in the background. + CALL PGSCI (8) + +* Draw native meridians of longitude. + J = 1 + DO 40 ILAT = -90, 90 + LAT(J) = DBLE(ILAT) + J = J + 1 + 40 CONTINUE + + DO 60 ILNG = -180, 180, 15 + LNG(1) = DBLE(ILNG) + IF (ILNG.EQ.-180) LNG(1) = -179.99D0 + IF (ILNG.EQ.+180) LNG(1) = +179.99D0 + +* Dash the longitude of the celestial pole. + IF (MOD(ILNG-LNGPOL,360).EQ.0) THEN + CALL PGSLS (2) + CALL PGSLW (5) + END IF + + STATUS = CELS2X (NTV, 1, 181, 1, 1, LNG, LAT, PHI, THETA, + : X, Y, STAT) + + K = 0 + DO 50 J = 1, 181 + IF (STAT(J).NE.0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + GO TO 50 + END IF + + K = K + 1 + XR(K) = -REAL(X(J)) + YR(K) = REAL(Y(J)) + 50 CONTINUE + + CALL PGLINE (K, XR, YR) + CALL PGSLS (1) + CALL PGSLW (1) + 60 CONTINUE + +* Draw native parallels of latitude. + LNG(1) = -179.99D0 + LNG(361) = +179.99D0 + J = 2 + ILNG = -179 + DO 70 ILNG = -179, 180 + LNG(J) = DBLE(ILNG) + J = J + 1 + 70 CONTINUE + + DO 90 ILAT = -90, 90, 15 + LAT(1) = DBLE(ILAT) + + STATUS = CELS2X (NTV, 361, 1, 1, 1, LNG, LAT, PHI, THETA, + : X, Y, STAT) + + K = 0 + DO 80 J = 1, 361 + IF (STAT(J).NE.0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + GO TO 80 + END IF + + K = K + 1 + XR(K) = -REAL(X(J)) + YR(K) = REAL(Y(J)) + 80 CONTINUE + + CALL PGLINE (K, XR, YR) + 90 CONTINUE + + +* Draw a colour-coded celestial coordinate graticule. + CI = 1 + +* Draw celestial meridians of longitude. + J = 1 + DO 100 ILAT = -90, 90 + LAT(J) = DBLE(ILAT) + J = J + 1 + 100 CONTINUE + + DO 120 ILNG = -180, 180, 15 + LNG(1) = DBLE(ILNG) + + CI = CI + 1 + IF (CI.GT.7) CI = 2 + IF (ILNG.EQ.0) THEN + CALL PGSCI (1) + ELSE + CALL PGSCI (CI) + END IF + +* Dash the reference longitude. + IF (MOD(ILNG-CRVAL1,360).EQ.0) THEN + CALL PGSLS (2) + CALL PGSLW (5) + END IF + + STATUS = CELS2X (CEL, 1, 181, 1, 1, LNG, LAT, PHI, THETA, + : X, Y, STAT) + + K = 0 + DO 110 J = 1, 181 + IF (STAT(J).NE.0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + GO TO 110 + END IF + +* Test for discontinuities. + IF (J.GT.1) THEN + IF (ABS(X(J) - X(J-1)).GT.4D0 .OR. + : ABS(Y(J) - Y(J-1)).GT.4D0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + END IF + END IF + + K = K + 1 + XR(K) = -REAL(X(J)) + YR(K) = REAL(Y(J)) + 110 CONTINUE + + CALL PGLINE (K, XR, YR) + CALL PGSLS (1) + CALL PGSLW (1) + 120 CONTINUE + +* Draw celestial parallels of latitude. + J = 1 + DO 130 ILNG = -180, 180 + LNG(J) = DBLE(ILNG) + J = J + 1 + 130 CONTINUE + + CI = 1 + DO 150 ILAT = -90, 90, 15 + LAT(1) = DBLE(ILAT) + + CI = CI + 1 + IF (CI.GT.7) CI = 2 + IF (ILAT.EQ.0) THEN + CALL PGSCI (1) + ELSE + CALL PGSCI (CI) + END IF + +* Dash the reference latitude. + IF (ILAT.EQ.CRVAL2) THEN + CALL PGSLS (2) + CALL PGSLW (5) + END IF + + STATUS = CELS2X (CEL, 361, 1, 1, 1, LNG, LAT, PHI, THETA, + : X, Y, STAT) + + K = 0 + DO 140 J = 1, 361 + IF (STAT(J).NE.0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + GO TO 140 + END IF + +* Test for discontinuities. + IF (J.GT.1) THEN + IF (ABS(X(J) - X(J-1)).GT.4D0 .OR. + : ABS(Y(J) - Y(J-1)).GT.4D0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + END IF + END IF + + K = K + 1 + XR(K) = -REAL(X(J)) + YR(K) = REAL(Y(J)) + 140 CONTINUE + + CALL PGLINE (K, XR, YR) + CALL PGSLS (1) + CALL PGSLW (1) + 150 CONTINUE + +* Flush PGPLOT buffer. + CALL PGEBUF () + WRITE (*, '(A,$)') ' Type for next page: ' + READ (*, *, END=160) + +* Cycle through celestial longitudes. + 160 CRVAL1 = CRVAL1 + 15 + IF (CRVAL1.GT.180) CRVAL1 = -180 + +* Skip boring celestial latitudes. + IF (CRVAL2.EQ.0) GO TO 190 + 170 CONTINUE + 180 CONTINUE + 190 CONTINUE + + CALL PGASK (0) + CALL PGEND + + + END diff --git a/deps/wcslib/Fortran/test/tdis1.f b/deps/wcslib/Fortran/test/tdis1.f new file mode 100644 index 0000000..4593a2e --- /dev/null +++ b/deps/wcslib/Fortran/test/tdis1.f @@ -0,0 +1,269 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tdis1.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TDIS1 +*----------------------------------------------------------------------- +* +* TDIS1 tests the WCSLIB distortion functions for closure. Input comes +* from TPV7.fits. The test is done via LINP2X and LINX2P. +* +* WCSP, which is meant to hold an address, is declared as an INTEGER +* array of length 2 to accomodate 64-bit machines for which +* sizeof(void *) = 2*sizeof(int). +*----------------------------------------------------------------------- + INTEGER AXMAX, NMAX + PARAMETER (AXMAX = 4) + PARAMETER (NMAX = 4096) + + DOUBLE PRECISION ATOL, FTOL + PARAMETER (ATOL = 1E-9) + PARAMETER (FTOL = 1E-10) + + LOGICAL GOTEND + INTEGER IBLOCK, IKEYRC, ILAT, ILNG, INC, J, K, N, NAXIS(AXMAX), + : NAXIS1, NAXIS2, NCLOS, NFAIL, NKEYRC, NREJECT, NTEST, + : NWCS, P1, P2, STATUS, WCSP(2) + DOUBLE PRECISION ABSMAX, CRPIX(AXMAX), DP1, DP2, IMG(2,NMAX), PX, + : PX0(2,NMAX), PX1(2,NMAX), RELMAX, RESID + CHARACTER KEYREC*80, HEADER*28801, INFILE*9 + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcserr.inc' + INCLUDE 'wcshdr.inc' + INCLUDE 'wcs.inc' + INCLUDE 'lin.inc' + INTEGER WCS(WCSLEN), LIN(LINLEN), ILIN + EQUIVALENCE (LIN, ILIN) + DOUBLE PRECISION DUMMY1, DUMMY2 + EQUIVALENCE (WCS, DUMMY1) + EQUIVALENCE (LIN, DUMMY2) + + DATA INFILE /'TPV7.fits'/ +*----------------------------------------------------------------------- + STATUS = WCSERR_ENABLE (1) + + WRITE (*, 10) + 10 FORMAT ( + : 'Testing closure of WCSLIB distortion routines (tdis1.f)',/, + : '-------------------------------------------------------') + +* Open the FITS WCS test header for formatted, direct I/O. + OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', + : RECL=80, IOSTAT=STATUS) + IF (STATUS.NE.0) THEN + WRITE (*, 20) STATUS, INFILE + 20 FORMAT ('ERROR',I3,' opening ',A) + GO TO 999 + END IF + +* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + K = 1 + NKEYRC = 0 + GOTEND = .FALSE. + DO 50 IBLOCK = 0, 100 + DO 40 IKEYRC = 1, 36 + READ (1, '(A80)', REC=36*IBLOCK+IKEYRC, IOSTAT=STATUS) KEYREC + IF (STATUS.NE.0) THEN + WRITE (*, 30) STATUS + 30 FORMAT ('ERROR',I3,' reading header.') + GO TO 999 + END IF + + IF (KEYREC(:8).EQ.' ') GO TO 40 + IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 + IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 + + IF (KEYREC(:5).EQ.'NAXIS') THEN + IF (KEYREC(6:6).NE.' ') THEN + READ (KEYREC(6:6), '(I1)') J + READ (KEYREC(11:), *) NAXIS(J) + GO TO 40 + END IF + END IF + + HEADER(K:) = KEYREC + K = K + 80 + NKEYRC = NKEYRC + 1 + + IF (KEYREC(:10).EQ.'END ') THEN +* An END keyrecord was read, but read the rest of the block. + GOTEND = .TRUE. + END IF + 40 CONTINUE + + IF (GOTEND) GO TO 60 + 50 CONTINUE + + 60 CLOSE (UNIT=1) + + +* Parse the header. + CALL FLUSH (6) + STATUS = WCSPIH (HEADER, NKEYRC, WCSHDR_none, 2, NREJECT, NWCS, + : WCSP) + IF (STATUS.NE.0) GO TO 999 + +* Copy into our WCSPRM struct. + STATUS = WCSVCOPY (WCSP, 0, WCS) + IF (STATUS.NE.0) GO TO 999 + +* Translate the TPV "projection" into a sequent distortion. + STATUS = WCSSET (WCS) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS, CHAR(0)) + GO TO 999 + END IF + +* Henceforth, we will work with linprm. Make a shallow copy. + STATUS = WCSGTI (WCS, WCS_LIN, ILIN) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS, CHAR(0)) + GO TO 999 + END IF + + +* The image size determines the test domain. + STATUS = WCSGTI (WCS, WCS_LNG, ILNG) + STATUS = WCSGTI (WCS, WCS_LAT, ILAT) + NAXIS1 = NAXIS(ILNG) + NAXIS2 = NAXIS(ILAT) + IF (NAXIS1.EQ.0 .OR. NAXIS2.EQ.0) THEN + STATUS = WCSGTD (WCS, WCS_CRPIX, CRPIX) + IF (NAXIS1.EQ.0) NAXIS1 = 2*INT(CRPIX(ILNG)) + 1 + IF (NAXIS2.EQ.0) NAXIS2 = 2*INT(CRPIX(ILAT)) + 1 + END IF + +* Limit the number of tests. + INC = 1 + DO 100 WHILE ((NAXIS1/INC)*(NAXIS2/INC).GT.800000) + INC = 2 * INC + 100 CONTINUE + + N = NAXIS1 / INC + IF (2*N.GT.NMAX) N = NMAX / 2 + + NTEST = 0 + NFAIL = 0 + NCLOS = 0 + ABSMAX = 0D0 + RELMAX = 0D0 + + DO 200 P2 = 1, NAXIS2, INC + K = 0 + DO 110 P1 = 1, NAXIS1, INC + K = K + 1 + PX0(1,K) = DBLE(P1) + PX0(2,K) = DBLE(P2) + 110 CONTINUE + + STATUS = LINP2X(LIN, N, 2, PX0, IMG) + IF (STATUS.NE.0) THEN + STATUS = LINPERR(LIN, CHAR(0)) + NFAIL = 1 + GO TO 210 + END IF + + STATUS = LINX2P(LIN, N, 2, IMG, PX1) + IF (STATUS.NE.0) THEN + STATUS = LINPERR(LIN, CHAR(0)) + NFAIL = 1 + GO TO 210 + END IF + +* Check closure. + DO 140 K = 1, N + DP1 = ABS(PX1(1,K) - PX0(1,K)) + DP2 = ABS(PX1(2,K) - PX0(2,K)) + + RESID = MAX(DP1, DP2) + IF (RESID.GT.ABSMAX) ABSMAX = RESID + + IF (RESID.GT.ATOL) THEN + NCLOS = NCLOS + 1 + WRITE (*, 120) PX0(1,K), PX0(2,K), IMG(1,K), IMG(2,K), + : PX1(1,K), PX1(2,K) + 120 FORMAT (' Absolute closure error:',/, + : ' pix: ',F18.12,1X,F18.12,/, + : ' -> img: ',F18.12,1X,F18.12,/, + : ' -> pix: ',F18.12,1X,F18.12,/) + GO TO 140 + END IF + + RESID = 0D0 + PX = ABS(PX0(1,K)) + IF (PX.GT.1D0) RESID = DP1/PX + PX = ABS(PX0(2,K)) + IF (PX.GT.1D0) RESID = MAX(RESID, DP2/PX) + IF (RESID.GT.RELMAX) RELMAX = RESID + + IF (RESID.GT.FTOL) THEN + NCLOS = NCLOS + 1 + WRITE (*, 130) PX0(1,K), PX0(2,K), IMG(1,K), IMG(2,K), + : PX1(1,K), PX1(2,K) + 130 FORMAT (' Relative closure error:',/, + : ' pix: ',F18.12,1X,F18.12,/, + : ' -> img: ',F18.12,1X,F18.12,/, + : ' -> pix: ',F18.12,1X,F18.12,/) + END IF + 140 CONTINUE + + NTEST = NTEST + N + 200 CONTINUE + + 210 IF (NFAIL.NE.0) THEN + WRITE (*, 220) + 220 FORMAT (/,'FAIL: The test failed to complete.') + + ELSE + WRITE (*, 230) NTEST, ABSMAX, RELMAX + 230 FORMAT ( + : 'LINP2X/LINX2P with distortions:',/, + : ' Completed',I7,' closure tests.',/, + : ' Maximum absolute closure residual =',1P,E8.1,' pixel.',/, + : ' Maximum relative closure residual =',1P,E8.1,'.',/) + + IF (NCLOS.NE.0) THEN + WRITE (*, 240) NCLOS + 240 FORMAT ('FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + + ELSE + WRITE (*, 250) + 250 FORMAT ('PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + END IF + + +* Free the memory allocated by WCSPIH. + 999 STATUS = WCSVFREE (NWCS, WCSP) + +* Free memory, allocated via the call to WCSSET, in the copy we made. +* Also frees allocated memory in the shallow copy we made of linprm. + STATUS = WCSFREE (WCS) + + END diff --git a/deps/wcslib/Fortran/test/tdis2.f b/deps/wcslib/Fortran/test/tdis2.f new file mode 100644 index 0000000..eba51ba --- /dev/null +++ b/deps/wcslib/Fortran/test/tdis2.f @@ -0,0 +1,255 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tdis2.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TDIS2 +*----------------------------------------------------------------------- +* +* TDIS2 tests the WCSLIB Fortran routines for manipulating the contents +* of a disprm struct. Two disprm structs are used. One, residing in a +* linprm struct, is referenced by "address" (DISP), and the other (DISL) +* resides locally in an INTEGER array. +* +* DISP and WCSP, which are meant to hold addresses, are declared as +* INTEGER arrays of length 2 to accomodate 64-bit machines for which +* sizeof(void *) = 2*sizeof(int). +* +* Test input comes from TPV7.fits. +*----------------------------------------------------------------------- + INTEGER DPMAX + PARAMETER (DPMAX = 256) + + LOGICAL GOTEND + INTEGER DISP(2), IBLOCK, IKEYRC, J, JK, JN, K, NAXIS, NDP, + : NKEYRC, NREJECT, NWCS, STATL, STATP, STATUS, WCSP(2) + DOUBLE PRECISION MAXDIS(2), TOTDIS + CHARACTER DTYPE(2)*72, KEYREC*80, HEADER*28801, INFILE*9 + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcserr.inc' + INCLUDE 'wcshdr.inc' + INCLUDE 'wcs.inc' + INCLUDE 'lin.inc' + INCLUDE 'dis.inc' + INTEGER DP(DPMAX*DPLEN), WCS(WCSLEN), LIN(LINLEN), DISL(DISLEN) + DOUBLE PRECISION DUMMY1, DUMMY2, DUMMY3, DUMMY4 + EQUIVALENCE (DUMMY1, DP) + EQUIVALENCE (DUMMY2, WCS) + EQUIVALENCE (DUMMY3, LIN) + EQUIVALENCE (DUMMY4, DISL) + + DATA INFILE /'TPV7.fits'/ +*----------------------------------------------------------------------- + STATUS = WCSERR_ENABLE (1) + + WRITE (*, 10) + 10 FORMAT ( + : 'Testing WCSLIB Fortran disprm access routines (tdis2.f)',/, + : '-------------------------------------------------------') + +* Open the FITS WCS test header for formatted, direct I/O. + OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', + : RECL=80, IOSTAT=STATUS) + IF (STATUS.NE.0) THEN + WRITE (*, 20) STATUS, INFILE + 20 FORMAT ('ERROR',I3,' opening ',A) + GO TO 999 + END IF + +* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + K = 1 + NKEYRC = 0 + GOTEND = .FALSE. + DO 50 IBLOCK = 0, 100 + DO 40 IKEYRC = 1, 36 + READ (1, '(A80)', REC=36*IBLOCK+IKEYRC, IOSTAT=STATUS) KEYREC + IF (STATUS.NE.0) THEN + WRITE (*, 30) STATUS + 30 FORMAT ('ERROR',I5,' reading header.') + GO TO 999 + END IF + + IF (KEYREC(:8).EQ.' ') GO TO 40 + IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 + IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 + + HEADER(K:) = KEYREC + K = K + 80 + NKEYRC = NKEYRC + 1 + + IF (KEYREC(:10).EQ.'END ') THEN +* An END keyrecord was read, but read the rest of the block. + GOTEND = .TRUE. + END IF + 40 CONTINUE + + IF (GOTEND) GO TO 60 + 50 CONTINUE + + 60 CLOSE (UNIT=1) + + +* Parse the header. + CALL FLUSH(6) + STATUS = WCSPIH (HEADER, NKEYRC, WCSHDR_none, 2, NREJECT, NWCS, + : WCSP) + IF (STATUS.NE.0) GO TO 999 + +* Copy into our WCSPRM struct. + STATUS = WCSVCOPY (WCSP, 0, WCS) + IF (STATUS.NE.0) GO TO 999 + +* WCSSET translates the TPV "projection" into a sequent distortion. + STATUS = WCSSET (WCS) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS, CHAR(0)) + GO TO 999 + END IF + +* Make a shallow copy of the linprm struct. + STATUS = WCSGTI (WCS, WCS_LIN, LIN) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS, CHAR(0)) + GO TO 999 + END IF + +* Extract a "pointer" to the disprm struct. + STATUS = LINGTI (LIN, LIN_DISSEQ, DISP) + IF (STATUS.NE.0) THEN + STATUS = LINPERR (LIN, CHAR(0)) + GO TO 999 + END IF + +* Add a little texture. The first argument of DISPTD (and DISPRT, +* DISGET, etc.) is unity to indicate that DISP is a "pointer". + STATP = DISPTD (1, DISP, DIS_TOTDIS, 3.0000D0, 0, 0) + IF (STATP.NE.0) GO TO 998 + STATP = DISPTD (1, DISP, DIS_MAXDIS, 2.0010D0, 1, 0) + IF (STATP.NE.0) GO TO 998 + STATP = DISPTD (1, DISP, DIS_MAXDIS, 2.0020D0, 2, 0) + IF (STATP.NE.0) GO TO 998 + +* Print its contents. + CALL FLUSH(6) + STATP = DISPRT (1, DISP) + IF (STATP.NE.0) GO TO 998 + + WRITE (*, 70) + 70 FORMAT (/,'------------------------------------', + : '------------------------------------') + + +* Copy it the long way first to test the various PUT and GET routines. +* Start by reading everything from the first. + STATP = DISGTI (1, DISP, DIS_NAXIS, NAXIS) + IF (STATP.NE.0) GO TO 998 + STATP = DISGTC (1, DISP, DIS_DTYPE, DTYPE) + IF (STATP.NE.0) GO TO 998 + STATP = DISGTI (1, DISP, DIS_NDP, NDP) + IF (STATP.NE.0) GO TO 998 + STATP = DISGTI (1, DISP, DIS_DP, DP(1)) + IF (STATP.NE.0) GO TO 998 + STATP = DISGTD (1, DISP, DIS_TOTDIS, TOTDIS) + IF (STATP.NE.0) GO TO 998 + STATP = DISGTD (1, DISP, DIS_MAXDIS, MAXDIS(1)) + IF (STATP.NE.0) GO TO 998 + +* Initialize the destination. The first argument of DISPUT (and +* DISINI, etc.) is zero to indicate that DISL is an array (struct). + STATL = DISPTI (0, DISL, DIS_FLAG, -1, 0, 0) + IF (STATL.NE.0) GO TO 997 + STATL = DISINI (0, NAXIS, DISL) + IF (STATL.NE.0) GO TO 997 + +* Copy to the destination. + JK = 0 + JN = 0 + DO 110 J = 1, NAXIS + STATL = DISPTC (0, DISL, DIS_DTYPE, DTYPE, J, 0) + IF (STATL.NE.0) GO TO 997 + 110 CONTINUE + + DO 120 K = 1, NDP*DPLEN, DPLEN + STATL = DISPTI (0, DISL, DIS_DP, DP(K), 0, 0) + 120 CONTINUE + + STATL = DISPTD (0, DISL, DIS_TOTDIS, TOTDIS, J, 0) + IF (STATL.NE.0) GO TO 997 + + DO 130 J = 1, NAXIS + STATL = DISPTD (0, DISL, DIS_MAXDIS, MAXDIS(J), J, 0) + IF (STATL.NE.0) GO TO 997 + 130 CONTINUE + + STATL = DISSET (0, DISL) + IF (STATL.NE.0) GO TO 997 + +* Print the second. + CALL FLUSH(6) + STATL = DISPRT (0, DISL) + IF (STATL.NE.0) GO TO 997 + + WRITE (*, 70) + + +* Now copy it the fast way. +* DISCPY's first argument indicates that the source, DISP, is a +* "pointer", and the destination, DISL, a local array. DISCPY +* will invoke DISINI on the destination, reusing memory allocated +* previously by DISINI and DISSET. + STATL = DISCPY (1, DISP, DISL) + IF (STATL.NE.0) GO TO 997 + +* A reset is required before printing. + STATL = DISSET (0, DISL) + IF (STATL.NE.0) GO TO 997 + +* Print the copy. + CALL FLUSH(6) + STATL = DISPRT (0, DISL) + IF (STATL.NE.0) GO TO 997 + + +* Cleanup. + 997 IF (STATL.NE.0) THEN + STATUS = DISPERR (0, DISL, CHAR(0)) + END IF + +* Free memory allocated in the disprm struct. + STATUS = DISFREE (0, DISL) + + 998 IF (STATP.NE.0) THEN + STATUS = DISPERR (1, DISP, CHAR(0)) + END IF + +* Free memory allocated by WCSPIH, WCSINI, etc. + 999 STATUS = WCSVFREE (NWCS, WCSP) + +* Free memory, allocated via the call to WCSSET, in the copy we made. +* Also frees allocated memory in the shallow copy we made of linprm. + STATUS = WCSFREE (WCS) + + END diff --git a/deps/wcslib/Fortran/test/tdis2.out b/deps/wcslib/Fortran/test/tdis2.out new file mode 100644 index 0000000..27397b4 --- /dev/null +++ b/deps/wcslib/Fortran/test/tdis2.out @@ -0,0 +1,336 @@ +Testing WCSLIB Fortran disprm access routines (tdis2.f) +------------------------------------------------------- + flag: 137 + naxis: 2 + dtype: 0x
+ "TPV" + "TPV" + ndp: 46 + ndpmax: 46 + dp: 0x
+ 1 0 2 DQ1.NAXES + 1 0 1 DQ1.AXIS.1 + 1 0 2 DQ1.AXIS.2 + 1 1 0.30939 DQ1.TPV.0 + 1 1 0.98842 DQ1.TPV.1 + 1 1 -0.0021924 DQ1.TPV.3 + 1 1 2.8381e-06 DQ1.TPV.4 + 1 1 3.6848e-06 DQ1.TPV.6 + 1 1 9.6423e-10 DQ1.TPV.7 + 1 1 6.0581e-10 DQ1.TPV.9 + 1 1 -4.0302e-09 DQ1.TPV.11 + 1 1 1.7927e-12 DQ1.TPV.12 + 1 1 3.5995e-12 DQ1.TPV.14 + 1 1 1.7547e-12 DQ1.TPV.16 + 1 1 -2.0310e-17 DQ1.TPV.17 + 1 1 -2.2639e-17 DQ1.TPV.19 + 1 1 3.6913e-18 DQ1.TPV.21 + 1 1 -3.7771e-16 DQ1.TPV.23 + 1 1 4.0081e-20 DQ1.TPV.24 + 1 1 1.1800e-19 DQ1.TPV.26 + 1 1 1.1810e-19 DQ1.TPV.28 + 1 1 4.0114e-20 DQ1.TPV.30 + 1 1 3.0321e-25 DQ1.TPV.31 + 1 1 6.3743e-25 DQ1.TPV.33 + 1 1 2.0538e-25 DQ1.TPV.35 + 1 1 -1.9849e-25 DQ1.TPV.37 + 1 1 -1.6393e-24 DQ1.TPV.39 + 2 0 2 DQ2.NAXES + 2 0 2 DQ2.AXIS.1 + 2 0 1 DQ2.AXIS.2 + 2 1 0.99349 DQ2.TPV.1 + 2 1 -1.8104e-06 DQ2.TPV.5 + 2 1 4.7932e-11 DQ2.TPV.7 + 2 1 6.1848e-10 DQ2.TPV.9 + 2 1 1.4059e-13 DQ2.TPV.13 + 2 1 8.7740e-14 DQ2.TPV.15 + 2 1 2.8940e-17 DQ2.TPV.17 + 2 1 1.5914e-18 DQ2.TPV.19 + 2 1 -1.0280e-17 DQ2.TPV.21 + 2 1 -2.8008e-21 DQ2.TPV.25 + 2 1 -3.2402e-21 DQ2.TPV.27 + 2 1 -7.9356e-22 DQ2.TPV.29 + 2 1 -6.7738e-25 DQ2.TPV.31 + 2 1 -3.0173e-25 DQ2.TPV.33 + 2 1 2.8026e-25 DQ2.TPV.35 + 2 1 1.4550e-25 DQ2.TPV.37 + totdis: 3.0000 + maxdis: 0x
+ 2.0010 2.0020 + docorr: 0x
+ 0 0 + Nhat: 0x
+ 2 2 + axmap: 0x
+ axmap[0][]: 0 1 + axmap[1][]: 1 0 + offset: 0x
+offset[0][]: 0.0000 0.0000 +offset[1][]: 0.0000 0.0000 + scale: 0x
+ scale[0][]: 1.0000 1.0000 + scale[1][]: 1.0000 1.0000 + iparm: 0x
+ iparm[0] : 0x
+ iparm[0][]: 1 7 40 40 0 + 0 1 + iparm[1] : 0x
+ iparm[1][]: 1 7 40 40 0 + 0 0 + dparm: 0x
+ dparm[0] : 0x
+ dparm[0][]: 0.30939 0.98842 0.0000 -0.0021924 2.8381e-06 + 0.0000 3.6848e-06 9.6423e-10 0.0000 6.0581e-10 + 0.0000 -4.0302e-09 1.7927e-12 0.0000 3.5995e-12 + 0.0000 1.7547e-12 -2.0310e-17 0.0000 -2.2639e-17 + 0.0000 3.6913e-18 0.0000 -3.7771e-16 4.0081e-20 + 0.0000 1.1800e-19 0.0000 1.1810e-19 0.0000 + 4.0114e-20 3.0321e-25 0.0000 6.3743e-25 0.0000 + 2.0538e-25 0.0000 -1.9849e-25 0.0000 -1.6393e-24 + dparm[1] : 0x
+ dparm[1][]: 0.0000 0.99349 0.0000 0.0000 0.0000 + -1.8104e-06 0.0000 4.7932e-11 0.0000 6.1848e-10 + 0.0000 0.0000 0.0000 1.4059e-13 0.0000 + 8.7740e-14 0.0000 2.8940e-17 0.0000 1.5914e-18 + 0.0000 -1.0280e-17 0.0000 0.0000 0.0000 + -2.8008e-21 0.0000 -3.2402e-21 0.0000 -7.9356e-22 + 0.0000 -6.7738e-25 0.0000 -3.0173e-25 0.0000 + 2.8026e-25 0.0000 1.4550e-25 0.0000 0.0000 + i_naxis: 2 + ndis: 2 + err: 0x0 + disp2x: 0x
+ disp2x[0]: 0x
(= tpd7) + disp2x[1]: 0x
(= tpd7) + disx2p: 0x
+ disx2p[0]: 0x0 + disx2p[1]: 0x0 + m_flag: 137 + m_naxis: 2 + m_dtype: 0x
(= dtype) + m_dp: 0x
(= dp) + m_maxdis: 0x
(= maxdis) + +------------------------------------------------------------------------ + flag: 137 + naxis: 2 + dtype: 0x
+ "TPV" + "TPV" + ndp: 46 + ndpmax: 256 + dp: 0x
+ 1 0 2 DQ1.NAXES + 1 0 1 DQ1.AXIS.1 + 1 0 2 DQ1.AXIS.2 + 1 1 0.30939 DQ1.TPV.0 + 1 1 0.98842 DQ1.TPV.1 + 1 1 -0.0021924 DQ1.TPV.3 + 1 1 2.8381e-06 DQ1.TPV.4 + 1 1 3.6848e-06 DQ1.TPV.6 + 1 1 9.6423e-10 DQ1.TPV.7 + 1 1 6.0581e-10 DQ1.TPV.9 + 1 1 -4.0302e-09 DQ1.TPV.11 + 1 1 1.7927e-12 DQ1.TPV.12 + 1 1 3.5995e-12 DQ1.TPV.14 + 1 1 1.7547e-12 DQ1.TPV.16 + 1 1 -2.0310e-17 DQ1.TPV.17 + 1 1 -2.2639e-17 DQ1.TPV.19 + 1 1 3.6913e-18 DQ1.TPV.21 + 1 1 -3.7771e-16 DQ1.TPV.23 + 1 1 4.0081e-20 DQ1.TPV.24 + 1 1 1.1800e-19 DQ1.TPV.26 + 1 1 1.1810e-19 DQ1.TPV.28 + 1 1 4.0114e-20 DQ1.TPV.30 + 1 1 3.0321e-25 DQ1.TPV.31 + 1 1 6.3743e-25 DQ1.TPV.33 + 1 1 2.0538e-25 DQ1.TPV.35 + 1 1 -1.9849e-25 DQ1.TPV.37 + 1 1 -1.6393e-24 DQ1.TPV.39 + 2 0 2 DQ2.NAXES + 2 0 2 DQ2.AXIS.1 + 2 0 1 DQ2.AXIS.2 + 2 1 0.99349 DQ2.TPV.1 + 2 1 -1.8104e-06 DQ2.TPV.5 + 2 1 4.7932e-11 DQ2.TPV.7 + 2 1 6.1848e-10 DQ2.TPV.9 + 2 1 1.4059e-13 DQ2.TPV.13 + 2 1 8.7740e-14 DQ2.TPV.15 + 2 1 2.8940e-17 DQ2.TPV.17 + 2 1 1.5914e-18 DQ2.TPV.19 + 2 1 -1.0280e-17 DQ2.TPV.21 + 2 1 -2.8008e-21 DQ2.TPV.25 + 2 1 -3.2402e-21 DQ2.TPV.27 + 2 1 -7.9356e-22 DQ2.TPV.29 + 2 1 -6.7738e-25 DQ2.TPV.31 + 2 1 -3.0173e-25 DQ2.TPV.33 + 2 1 2.8026e-25 DQ2.TPV.35 + 2 1 1.4550e-25 DQ2.TPV.37 + totdis: 3.0000 + maxdis: 0x
+ 2.0010 2.0020 + docorr: 0x
+ 0 0 + Nhat: 0x
+ 2 2 + axmap: 0x
+ axmap[0][]: 0 1 + axmap[1][]: 1 0 + offset: 0x
+offset[0][]: 0.0000 0.0000 +offset[1][]: 0.0000 0.0000 + scale: 0x
+ scale[0][]: 1.0000 1.0000 + scale[1][]: 1.0000 1.0000 + iparm: 0x
+ iparm[0] : 0x
+ iparm[0][]: 1 7 40 40 0 + 0 1 + iparm[1] : 0x
+ iparm[1][]: 1 7 40 40 0 + 0 0 + dparm: 0x
+ dparm[0] : 0x
+ dparm[0][]: 0.30939 0.98842 0.0000 -0.0021924 2.8381e-06 + 0.0000 3.6848e-06 9.6423e-10 0.0000 6.0581e-10 + 0.0000 -4.0302e-09 1.7927e-12 0.0000 3.5995e-12 + 0.0000 1.7547e-12 -2.0310e-17 0.0000 -2.2639e-17 + 0.0000 3.6913e-18 0.0000 -3.7771e-16 4.0081e-20 + 0.0000 1.1800e-19 0.0000 1.1810e-19 0.0000 + 4.0114e-20 3.0321e-25 0.0000 6.3743e-25 0.0000 + 2.0538e-25 0.0000 -1.9849e-25 0.0000 -1.6393e-24 + dparm[1] : 0x
+ dparm[1][]: 0.0000 0.99349 0.0000 0.0000 0.0000 + -1.8104e-06 0.0000 4.7932e-11 0.0000 6.1848e-10 + 0.0000 0.0000 0.0000 1.4059e-13 0.0000 + 8.7740e-14 0.0000 2.8940e-17 0.0000 1.5914e-18 + 0.0000 -1.0280e-17 0.0000 0.0000 0.0000 + -2.8008e-21 0.0000 -3.2402e-21 0.0000 -7.9356e-22 + 0.0000 -6.7738e-25 0.0000 -3.0173e-25 0.0000 + 2.8026e-25 0.0000 1.4550e-25 0.0000 0.0000 + i_naxis: 2 + ndis: 2 + err: 0x0 + disp2x: 0x
+ disp2x[0]: 0x
(= tpd7) + disp2x[1]: 0x
(= tpd7) + disx2p: 0x
+ disx2p[0]: 0x0 + disx2p[1]: 0x0 + m_flag: 137 + m_naxis: 2 + m_dtype: 0x
(= dtype) + m_dp: 0x
(= dp) + m_maxdis: 0x
(= maxdis) + +------------------------------------------------------------------------ + flag: 137 + naxis: 2 + dtype: 0x
+ "TPV" + "TPV" + ndp: 46 + ndpmax: 256 + dp: 0x
+ 1 0 2 DQ1.NAXES + 1 0 1 DQ1.AXIS.1 + 1 0 2 DQ1.AXIS.2 + 1 1 0.30939 DQ1.TPV.0 + 1 1 0.98842 DQ1.TPV.1 + 1 1 -0.0021924 DQ1.TPV.3 + 1 1 2.8381e-06 DQ1.TPV.4 + 1 1 3.6848e-06 DQ1.TPV.6 + 1 1 9.6423e-10 DQ1.TPV.7 + 1 1 6.0581e-10 DQ1.TPV.9 + 1 1 -4.0302e-09 DQ1.TPV.11 + 1 1 1.7927e-12 DQ1.TPV.12 + 1 1 3.5995e-12 DQ1.TPV.14 + 1 1 1.7547e-12 DQ1.TPV.16 + 1 1 -2.0310e-17 DQ1.TPV.17 + 1 1 -2.2639e-17 DQ1.TPV.19 + 1 1 3.6913e-18 DQ1.TPV.21 + 1 1 -3.7771e-16 DQ1.TPV.23 + 1 1 4.0081e-20 DQ1.TPV.24 + 1 1 1.1800e-19 DQ1.TPV.26 + 1 1 1.1810e-19 DQ1.TPV.28 + 1 1 4.0114e-20 DQ1.TPV.30 + 1 1 3.0321e-25 DQ1.TPV.31 + 1 1 6.3743e-25 DQ1.TPV.33 + 1 1 2.0538e-25 DQ1.TPV.35 + 1 1 -1.9849e-25 DQ1.TPV.37 + 1 1 -1.6393e-24 DQ1.TPV.39 + 2 0 2 DQ2.NAXES + 2 0 2 DQ2.AXIS.1 + 2 0 1 DQ2.AXIS.2 + 2 1 0.99349 DQ2.TPV.1 + 2 1 -1.8104e-06 DQ2.TPV.5 + 2 1 4.7932e-11 DQ2.TPV.7 + 2 1 6.1848e-10 DQ2.TPV.9 + 2 1 1.4059e-13 DQ2.TPV.13 + 2 1 8.7740e-14 DQ2.TPV.15 + 2 1 2.8940e-17 DQ2.TPV.17 + 2 1 1.5914e-18 DQ2.TPV.19 + 2 1 -1.0280e-17 DQ2.TPV.21 + 2 1 -2.8008e-21 DQ2.TPV.25 + 2 1 -3.2402e-21 DQ2.TPV.27 + 2 1 -7.9356e-22 DQ2.TPV.29 + 2 1 -6.7738e-25 DQ2.TPV.31 + 2 1 -3.0173e-25 DQ2.TPV.33 + 2 1 2.8026e-25 DQ2.TPV.35 + 2 1 1.4550e-25 DQ2.TPV.37 + totdis: 3.0000 + maxdis: 0x
+ 2.0010 2.0020 + docorr: 0x
+ 0 0 + Nhat: 0x
+ 2 2 + axmap: 0x
+ axmap[0][]: 0 1 + axmap[1][]: 1 0 + offset: 0x
+offset[0][]: 0.0000 0.0000 +offset[1][]: 0.0000 0.0000 + scale: 0x
+ scale[0][]: 1.0000 1.0000 + scale[1][]: 1.0000 1.0000 + iparm: 0x
+ iparm[0] : 0x
+ iparm[0][]: 1 7 40 40 0 + 0 1 + iparm[1] : 0x
+ iparm[1][]: 1 7 40 40 0 + 0 0 + dparm: 0x
+ dparm[0] : 0x
+ dparm[0][]: 0.30939 0.98842 0.0000 -0.0021924 2.8381e-06 + 0.0000 3.6848e-06 9.6423e-10 0.0000 6.0581e-10 + 0.0000 -4.0302e-09 1.7927e-12 0.0000 3.5995e-12 + 0.0000 1.7547e-12 -2.0310e-17 0.0000 -2.2639e-17 + 0.0000 3.6913e-18 0.0000 -3.7771e-16 4.0081e-20 + 0.0000 1.1800e-19 0.0000 1.1810e-19 0.0000 + 4.0114e-20 3.0321e-25 0.0000 6.3743e-25 0.0000 + 2.0538e-25 0.0000 -1.9849e-25 0.0000 -1.6393e-24 + dparm[1] : 0x
+ dparm[1][]: 0.0000 0.99349 0.0000 0.0000 0.0000 + -1.8104e-06 0.0000 4.7932e-11 0.0000 6.1848e-10 + 0.0000 0.0000 0.0000 1.4059e-13 0.0000 + 8.7740e-14 0.0000 2.8940e-17 0.0000 1.5914e-18 + 0.0000 -1.0280e-17 0.0000 0.0000 0.0000 + -2.8008e-21 0.0000 -3.2402e-21 0.0000 -7.9356e-22 + 0.0000 -6.7738e-25 0.0000 -3.0173e-25 0.0000 + 2.8026e-25 0.0000 1.4550e-25 0.0000 0.0000 + i_naxis: 2 + ndis: 2 + err: 0x0 + disp2x: 0x
+ disp2x[0]: 0x
(= tpd7) + disp2x[1]: 0x
(= tpd7) + disx2p: 0x
+ disx2p[0]: 0x0 + disx2p[1]: 0x0 + m_flag: 137 + m_naxis: 2 + m_dtype: 0x
(= dtype) + m_dp: 0x
(= dp) + m_maxdis: 0x
(= maxdis) diff --git a/deps/wcslib/Fortran/test/tfitshdr.f b/deps/wcslib/Fortran/test/tfitshdr.f new file mode 100644 index 0000000..6186739 --- /dev/null +++ b/deps/wcslib/Fortran/test/tfitshdr.f @@ -0,0 +1,303 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tfitshdr.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TFITSHDR +*----------------------------------------------------------------------- +* +* TFITSHDR tests FITSHDR, the FITS parser for image headers, by reading +* a test header and printing the resulting fitskey structs. +* +* Input comes from file 'fitshdr.fits'. +* +* WCSHDR is called first to extract all WCS-related keyrecords from the +* input header before passing it on to FITSHDR. +* +* KEYS and WCSP, which are meant to hold pointers, are declared as +* integer arrays of length 2 to accomodate 64-bit machines for which +* sizeof(void *) = 2*sizeof(int). +*----------------------------------------------------------------------- + LOGICAL GOTEND + INTEGER CTRL, I, IERR, IVAL(8), J, K, KEYNO, KEYS(2), KEYTYP, + : KTYP, NC, NKEYRC, NKEYID, NREJECT, NWCS, RELAX, STATUS, + : ULEN, WCSP(2) + DOUBLE PRECISION FVAL(2) + CHARACTER KEYREC*80, CVAL*72, HEADER*28801, KEYWRD*12, INFILE*12, + : TEXT*84 + + INCLUDE 'wcshdr.inc' + INCLUDE 'fitshdr.inc' + INTEGER KEYIDS(KEYIDLEN,8) + + DATA INFILE /'fitshdr.fits'/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing FITS image header parser (tfitshdr.f)',/, + : '---------------------------------------------',/) + +* Open the FITS WCS test header for formatted, direct I/O. + OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', + : RECL=80, IOSTAT=IERR) + IF (IERR.NE.0) THEN + WRITE (*, 20) IERR, INFILE + 20 FORMAT ('ERROR',I3,' opening ',A) + GO TO 999 + END IF + +* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + K = 1 + NKEYRC = 0 + GOTEND = .FALSE. + DO 50 J = 0, 100 + DO 40 I = 1, 36 + READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC + IF (IERR.NE.0) THEN + WRITE (*, 30) IERR + 30 FORMAT ('ERROR',I3,' reading header.') + GO TO 999 + END IF + + HEADER(K:) = KEYREC + K = K + 80 + NKEYRC = NKEYRC + 1 + + IF (KEYREC(:10).EQ.'END ') THEN +* An END keyrecord was read, read the rest of the block. + GOTEND = .TRUE. + END IF + 40 CONTINUE + + IF (GOTEND) GO TO 60 + 50 CONTINUE + + 60 CLOSE (UNIT=1) + + HEADER(K:K) = CHAR (0) + WRITE (*, 70) NKEYRC + 70 FORMAT ('Found',I4,' header keyrecords.') + + +* Cull all recognised, syntactically valid WCS keyrecords from the +* header. + RELAX = WCSHDR_all + CTRL = -1 +* WCSPIH will allocate memory for NWCS initialised WCSPRM structs. + IERR = WCSPIH (HEADER, NKEYRC, RELAX, CTRL, NREJECT, NWCS, WCSP) + IF (IERR.NE.0) THEN + WRITE (*, 80) IERR + 80 FORMAT ('WCSPIH ERROR',I2,'.') + GO TO 999 + END IF + +* Free the WCSPRM structs and the memory allocated for them. + STATUS = WCSVFREE (NWCS, WCSP) + +* Number of keyrecords remaining. + DO 90 I = 1, 288001, 80 + IF (HEADER(I:I).EQ.CHAR(0)) GO TO 100 + 90 CONTINUE + + 100 NKEYRC = I / 80 + + +* Specific keywords to be located or culled. + IERR = KEYIDPTC (KEYIDS, 0, KEYID_NAME, 'SIMPLE ') + IERR = KEYIDPTC (KEYIDS, 1, KEYID_NAME, 'BITPIX ') + IERR = KEYIDPTC (KEYIDS, 2, KEYID_NAME, 'NAXIS ') + IERR = KEYIDPTC (KEYIDS, 3, KEYID_NAME, 'COMMENT ') + IERR = KEYIDPTC (KEYIDS, 4, KEYID_NAME, 'HISTORY ') + IERR = KEYIDPTC (KEYIDS, 5, KEYID_NAME, ' ') + IERR = KEYIDPTC (KEYIDS, 6, KEYID_NAME, 'END ') + NKEYID = 7 + + IF (NKEYID.GT.0) THEN + WRITE (*, '(/,A)') + : 'The following keyrecords will not be listed:' + DO 120 I = 0, NKEYID-1 + IERR = KEYIDGTC (KEYIDS, I, KEYID_NAME, TEXT) + WRITE (*, 110) TEXT + 110 FORMAT (' "',A8,'"') + 120 CONTINUE + END IF + + +* Parse the header. + IERR = FITSHDR (HEADER, NKEYRC, NKEYID, KEYIDS, NREJECT, KEYS) + IF (IERR.NE.0) THEN + WRITE (*, 130) IERR + 130 FORMAT ('FITSKEY ERROR',I2) + END IF + +* Report the results. + WRITE (*, 140) NKEYRC, NREJECT + 140 FORMAT(/,I3,' header keyrecords parsed by FITSHDR,',I3, + : ' rejected:',/) + DO 200 I = 0, NKEYRC-1 +* Skip syntactically valid keyrecords that were indexed. + IERR = KEYGTI (KEYS, I, KEY_KEYNO, KEYNO, NC) + IERR = KEYGTI (KEYS, I, KEY_STATUS, STATUS, NC) + IF (KEYNO.LT.0 .AND. STATUS.EQ.0) GO TO 200 + +* Basic keyrecord info. + IERR = KEYGTC (KEYS, I, KEY_KEYWORD, KEYWRD, NC) + IERR = KEYGTI (KEYS, I, KEY_TYPE, KEYTYP, NC) + WRITE (*, '(I4,I5,2X,A,I3,$)') KEYNO, STATUS, KEYWRD(:8), + : KEYTYP + +* Format the keyvalue for output. + KTYP = MOD(ABS(KEYTYP), 10) + IF (KTYP.EQ.1) THEN +* Logical. + IERR = KEYGTI (KEYS, I, KEY_KEYVALUE, IVAL(1), NC) + IF (IVAL(1).EQ.0) THEN + TEXT = 'F' + ELSE + TEXT = 'T' + END IF + + ELSE IF (KTYP.EQ.2) THEN +* 32-bit signed integer. + IERR = KEYGTI (KEYS, I, KEY_KEYVALUE, IVAL(1), NC) + WRITE (TEXT, '(I11)') IVAL(1) + + ELSE IF (KTYP.EQ.3) THEN +* 64-bit signed integer. + IERR = KEYGTI (KEYS, I, KEY_KEYVALUE, IVAL(1), NC) + IF (IVAL(3).NE.0) THEN + WRITE (TEXT, '(SP,I11,SS,2I9.9)') IVAL(3), ABS(IVAL(2)), + : ABS(IVAL(1)) + ELSE + WRITE (TEXT, '(SP,I11,SS,I9.9)') IVAL(2), ABS(IVAL(1)) + END IF + + ELSE IF (KTYP.EQ.4) THEN +* Very long integer. + IERR = KEYGTI (KEYS, I, KEY_KEYVALUE, IVAL(1), NC) + K = 0 + DO 150 J = 8, 2, -1 + IF (IVAL(J).NE.0) THEN + K = J + GO TO 160 + END IF + 150 CONTINUE + + 160 WRITE (TEXT, '(SP,I11)') IVAL(K) + NC = 12 + DO 170 J = K-1, 1, -1 + WRITE (TEXT(NC:), '(I9.9)') ABS(IVAL(J)) + NC = NC + 9 + 170 CONTINUE + + ELSE IF (KTYP.EQ.5) THEN +* Float. + IERR = KEYGTD (KEYS, I, KEY_KEYVALUE, FVAL, NC) + WRITE (TEXT, '(SP,1PE13.6)') FVAL(1) + + ELSE IF (KTYP.EQ.6) THEN +* Int complex. + IERR = KEYGTD (KEYS, I, KEY_KEYVALUE, FVAL, NC) + WRITE (TEXT, '(2I11)') NINT(FVAL(1)), NINT(FVAL(2)) + + ELSE IF (KTYP.EQ.7) THEN +* Float complex. + IERR = KEYGTD (KEYS, I, KEY_KEYVALUE, FVAL, NC) + WRITE (TEXT, '(SP,1P,E13.6,2X,E13.6)') FVAL + + ELSE IF (KTYP.EQ.8) THEN +* String. + IERR = KEYGTC (KEYS, I, KEY_KEYVALUE, CVAL, NC) + TEXT = '"' // CVAL(:NC) // '"' + + ELSE +* No value. + TEXT = '' + END IF + +* Account for Fortran's abysmal formatting control. + IF (ABS(KEYTYP).EQ.2 .OR. + : ABS(KEYTYP).EQ.3 .OR. + : ABS(KEYTYP).EQ.4 .OR. + : ABS(KEYTYP).EQ.6) THEN +* Squeeze out leading blanks. + DO 180 J = 1, 84 + IF (TEXT(J:J).NE.' ') THEN + TEXT = TEXT(J:) + GO TO 190 + END IF + 180 CONTINUE + END IF + + 190 NC = LNBLNK(TEXT) + IF (KEYTYP.GT.0) THEN +* Keyvalue successfully extracted. + WRITE (*, '(2X,A,$)') TEXT(:NC) + ELSE IF (KEYTYP.LT.0) THEN +* Syntax error of some type while extracting the keyvalue. + WRITE (*, '(2X,A,$)') '(' // TEXT(:NC) // ')' + END IF + +* Units? + IERR = KEYGTI (KEYS, I, KEY_ULEN, ULEN, NC) + IERR = KEYGTC (KEYS, I, KEY_COMMENT, TEXT, NC) + IF (ULEN.GT.0) THEN + WRITE (*, '(X,A,$)') TEXT(2:ULEN-2) + END IF + +* Comment text or reject keyrecord. + WRITE (*, '(/,A)') TEXT(:NC) + 200 CONTINUE + + +* Print indexes. + WRITE (*, '(//,A)') 'Indexes of selected keywords:' + DO 210 I = 0, NKEYID-1 + IERR = KEYIDGTC (KEYIDS, I, KEYID_NAME, TEXT) + IERR = KEYIDGTI (KEYIDS, I, KEYID_COUNT, NC) + IERR = KEYIDGTI (KEYIDS, I, KEYID_IDX, IVAL(1)) + WRITE (*, '(A8,3I5,$)') TEXT, NC, IVAL(1), IVAL(2) + +* Print logical (SIMPLE) and integer (BITPIX, NAXIS) values. + IF (NC.GT.0) THEN + IERR = KEYGTI (KEYS, IVAL(1), KEY_TYPE, KEYTYP, NC) + WRITE (*, '(I4,$)') KEYTYP + + IF (KEYTYP.EQ.1) THEN + IERR = KEYGTI (KEYS, I, KEY_KEYVALUE, IVAL(1), NC) + IF (IVAL(1).EQ.0) THEN + WRITE (*, '(4X,A,$)') 'F' + ELSE + WRITE (*, '(4X,A,$)') 'T' + END IF + ELSE IF (KEYTYP.EQ.2) THEN + IERR = KEYGTI (KEYS, I, KEY_KEYVALUE, IVAL(1), NC) + WRITE (*, '(I5,$)') IVAL(1) + END IF + END IF + WRITE (*, '()') + 210 CONTINUE + + IERR = FREEKEYS(KEYS) + + 999 CONTINUE + END diff --git a/deps/wcslib/Fortran/test/tfitshdr.out b/deps/wcslib/Fortran/test/tfitshdr.out new file mode 100644 index 0000000..976a615 --- /dev/null +++ b/deps/wcslib/Fortran/test/tfitshdr.out @@ -0,0 +1,144 @@ +Testing FITS image header parser (tfitshdr.f) +--------------------------------------------- + +Found 144 header keyrecords. + +The following keyrecords will not be listed: + "SIMPLE " + "BITPIX " + "NAXIS " + "COMMENT " + "HISTORY " + " " + "END " + + 74 header keyrecords parsed by FITSHDR, 21 rejected: + + 9 0 UNDEF 0 +Undefined keyvalue + 10 0 TRUE 1 T +Logical + 11 0 FALSE 1 F +Logical + 12 0 INT32 2 12345 +Not a 64-bit integer + 13 0 INT32 2 -123456789 +Not a 64-bit integer + 14 0 INT32 2 -2147483648 +Not a 64-bit integer (INT_MIN) + 15 0 INT32 2 2147483647 +Not a 64-bit integer (INT_MAX) + 16 0 INT32 2 12345 +Not a very long integer + 17 0 INT32 2 -123456789 +Not a very long integer + 18 0 INT64 3 -2147483649 +64-bit integer (INT_MIN - 1) + 19 0 INT64 3 +2147483648 +64-bit integer (INT_MAX + 1) + 20 0 INT64 3 +100000000000000000 +64-bit integer + 21 0 INT64 3 -876543210987654321 +64-bit integer + 22 0 INT64 3 -9223372036854775808 +Not a very long integer (LONG_MIN) + 23 0 INT64 3 +9223372036854775807 +Not a very long integer (LONG_MAX) + 24 0 INT64 3 -876543210987654321 +64-bit integer + 25 0 INTVL 4 -9223372036854775809 +Very long integer (LONG_MIN - 1) + 26 0 INTVL 4 +9223372036854775808 +Very long integer (LONG_MAX + 1) + 27 0 INTVL 4 -100000000000000000000000000000876543210987654321 +Very-long integer + 28 0 INTVL 4 +123456789012345678901234567890123456789012345678901234567890123456789 + + 29 0 INTVL 4 +1234567890123456789012345678901234567890123456789012345678901234567890 + + 30 0 FLOAT 5 +3.141593E+00 +Floating point + 31 0 FLOAT 5 +1.602177E-19 +Floating point, lower-case exp allowed + 32 0 FLOAT 5 +2.997925E+08 +Floating point + 33 0 FLOAT 5 +6.626070E+00 +Floating point, lower-case exp allowed + 34 0 FLOAT 5 +6.022141E+00 +Floating point + 35 0 COMPLEX 6 137 -1 +An integer complex keyvalue + 36 0 COMPLEX 7 +1.000000E+06 -1.000000E-01 +A floating point complex keyvalue + 37 0 GOODSTR 8 ""G'DAY"" +A valid string keyvalue + 38 0 BLANKS 8 " " +An all-blank string equals a single blank + 39 0 LONGSTR 8 "The loooooongest possible non-continued string value, 68 characters." + + 40 0 CONTSTR 18 "The quick brown " +Continued string, with & (will be stripped off) + 41 4 CONTINUE 28 "fox jumps over the" +CONTINUE 'fox jumps over the' Relaxed handling of invalid keycomment + 42 0 CONTINUE 38 " lazy dog" + + 43 0 PI 5 +3.141593E+00 +[!?] is not a valid units specification + 44 0 CONTINUE 0 + 'Not a valid string continuation' + 50 1 BADREC = 0 + 1 / Illegal, "= " not in columns 9-10 + 51 0 BADREC 0 + = 1 / Illegal, "= " not in columns 9-10 + 52 0 BADREC 0 +=1 / Illegal, "= " not in columns 9-10 + 53 0 BADREC 0 + 1 / Illegal, "= " not in columns 9-10 + 54 1 BadKey 2 111 +Example of a syntax error, invalid keyword + 55 1 BADKEY! 2 222 +Example of a syntax error, invalid keyword + 56 1 BAD KEY 2 333 +Example of a syntax error, invalid keyword + 57 2 BADVAL 0 +BADVAL = BAD / Example of a syntax error, invalid keyvalue + 58 2 BADVAL 0 +BADVAL = "BAD" / Example of a syntax error, invalid keyvalue + 59 4 BADVAL -8 ("BAD") +BADVAL = 'BAD' 'STR' / Example of a syntax error, invalid keyvalue + 60 4 BADVAL -2 (49) +BADVAL = 49 + 94 / Example of a syntax error, invalid keyvalue + 61 4 BADVAL 0 +BADVAL = 1934-638 / Example of a syntax error, invalid keyvalue + 62 4 BADVAL 0 +BADVAL = 1.2.3 / Example of a syntax error, invalid keyvalue + 63 4 BADVAL 0 +BADVAL = 12h34m56s / Example of a syntax error, invalid keyvalue + 64 4 BADVAL 0 +BADVAL = 0xFF / Example of a syntax error, invalid keyvalue + 65 4 BADVAL -2 (58) +BADVAL = 58 - 21 / Example of a syntax error, invalid keyvalue + 66 2 BADVAL 0 +BADVAL = J2000 / Example of a syntax error, invalid keyvalue + 67 2 BADVAL 0 +BADVAL = B1950.0 / Example of a syntax error, invalid keyvalue + 68 4 BADVAL 0 +BADVAL = 180:00:00 / Example of a syntax error, invalid keyvalue + 69 2 BADVAL 0 +BADVAL = $9.99 / Example of a syntax error, invalid keyvalue + 70 4 BADCOMM -2 (1) +BADCOMM = 1 Example of a syntax error, invalid keycomment + 71 4 BADCOMM -2 (1) +BADCOMM = 1 1/8 = 0.125 + -73 8 END 8 "ILLEGAL" +Illegal END keyrecord + + +Indexes of selected keywords: +SIMPLE 1 0 -1 1 F +BITPIX 1 1 -1 2 -32 +NAXIS 1 2 -1 2 0 +COMMENT 3 45 47 0 +HISTORY 0 -1 -1 + 8 3 71 0 +END 2 72 73 8 diff --git a/deps/wcslib/Fortran/test/tlin.f b/deps/wcslib/Fortran/test/tlin.f new file mode 100644 index 0000000..359ddca --- /dev/null +++ b/deps/wcslib/Fortran/test/tlin.f @@ -0,0 +1,143 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tlin.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TLIN +*----------------------------------------------------------------------- +* +* TLIN tests the linear transformation routines supplied with WCSLIB. +* +*----------------------------------------------------------------------- + DOUBLE PRECISION TOL + PARAMETER (TOL = 1D-13) + + INTEGER NAXIS, NCOORD, NELEM + PARAMETER (NAXIS = 5, NCOORD = 2, NELEM = 9) + + INTEGER I, J, K, NFAIL, STATUS + DOUBLE PRECISION CDELT(NAXIS), CRPIX(NAXIS), IMG(NELEM,2), + : PC(NAXIS,NAXIS), PIX0(NELEM,2), PIX(NELEM,2), RESID, + : RESIDMAX + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'lin.inc' + INTEGER LIN(LINLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (LIN,DUMMY) + + DATA (CRPIX(I), I=1,NAXIS) + : /256D0, 256D0, 64D0, 128D0, 1D0/ + DATA ((PC(I,J),J=1,NAXIS),I=1,NAXIS) + : / 1.0D0, 0.5D0, 0D0, 0D0, 0D0, + : 0.5D0, 1.0D0, 0D0, 0D0, 0D0, + : 0.0D0, 0.0D0, 1D0, 0D0, 0D0, + : 0.0D0, 0.0D0, 0D0, 1D0, 0D0, + : 0.0D0, 0.0D0, 0D0, 0D0, 1D0/ + DATA (CDELT(I), I=1,NAXIS) + : / 1.2D0, 2.3D0, 3.4D0, 4.5D0, 5.6D0/ + DATA ((PIX0(I,J), I=1,NAXIS), J=1,2) + : /303.0D0, 265.0D0, 112.4D0, 144.5D0, 28.2D0, + : 19.0D0, 57.0D0, 2.0D0, 15.0D0, 42.0D0/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ( + : 'Testing WCSLIB linear transformation routines (tlin.f)',/, + : '------------------------------------------------------') + + STATUS = LINPTI (LIN, LIN_FLAG, -1, 0, 0) + STATUS = LININI (NAXIS, LIN) + + DO 30 I = 1, NAXIS + STATUS = LINPTD (LIN, LIN_CRPIX, CRPIX(I), I, 0) + + DO 20 J = 1, NAXIS + STATUS = LINPTD (LIN, LIN_PC, PC(I,J), I, J) + 20 CONTINUE + + STATUS = LINPTD (LIN, LIN_CDELT, CDELT(I), I, 0) + 30 CONTINUE + + WRITE (*, *) + DO 50 K = 1, NCOORD + WRITE (*, 40) K, (PIX0(J,K), J=1,NAXIS) + 40 FORMAT ('PIX',I2,':',10F14.8) + 50 CONTINUE + + STATUS = LINP2X (LIN, NCOORD, NELEM, PIX0, IMG) + IF (STATUS.NE.0) THEN + WRITE (*, 60) STATUS + 60 FORMAT ('LINP2X ERROR',I3) + GO TO 999 + END IF + + WRITE (*, *) + DO 80 K = 1, NCOORD + WRITE (*, 70) K, (IMG(J,K), J=1,NAXIS) + 70 FORMAT ('IMG',I2,':',10F14.8) + 80 CONTINUE + + STATUS = LINX2P (LIN, NCOORD, NELEM, IMG, PIX) + IF (STATUS.NE.0) THEN + WRITE (*, 90) STATUS + 90 FORMAT ('LINX2P ERROR',I3) + GO TO 999 + END IF + + WRITE (*, *) + DO 100 K = 1, NCOORD + WRITE (*, 40) K, (PIX(J,K), J=1,NAXIS) + 100 CONTINUE + +* Check closure. + NFAIL = 0 + RESIDMAX = 0D0 + + DO 120 K = 1, NCOORD + DO 110 J = 1, NAXIS + RESID = ABS(PIX(j,k) - PIX0(j,k)) + IF (RESIDMAX.LT.RESID) RESIDMAX = RESID + IF (RESID.GT.TOL) NFAIL = NFAIL + 1 + 110 CONTINUE + 120 CONTINUE + + WRITE (*, 130) RESIDMAX + 130 FORMAT (/,'LINP2X/LINX2P: Maximum closure residual =',1PE8.1, + : ' pixel.') + + + IF (NFAIL.NE.0) THEN + WRITE (*, 140) NFAIL + 140 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + ELSE + WRITE (*, 150) + 150 FORMAT (/,'PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + + 999 STATUS = LINFREE(LIN) + + END diff --git a/deps/wcslib/Fortran/test/tlog.f b/deps/wcslib/Fortran/test/tlog.f new file mode 100644 index 0000000..a44307c --- /dev/null +++ b/deps/wcslib/Fortran/test/tlog.f @@ -0,0 +1,130 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tlog.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TLOG +*----------------------------------------------------------------------- +* +* TLOG tests the logarithmic coordinate transformation routines for +* closure. +* +*----------------------------------------------------------------------- + DOUBLE PRECISION TOL + PARAMETER (TOL = 2D-13) + + INTEGER NCRD + PARAMETER (NCRD = 8000) + + INTEGER J, K, NFAIL, STAT1(NCRD), STAT2(NCRD), STATUS + DOUBLE PRECISION CRVAL, LOGC(NCRD), RESID, RESMAX, STEP, + : X0(NCRD), X1(NCRD) + + DATA CRVAL /3.3D0/ + + INCLUDE 'log.inc' +*----------------------------------------------------------------------- + + WRITE (*, 10) + 10 FORMAT ('Testing closure of WCSLIB logarithmic coordinate ', + : 'routines (tlog.f)',/, + : '-------------------------------------------------', + : '-----------------') + + +* Construct a logarithmic axis and test closure. + STEP = (40D0/NCRD) / 2D0 + K = -NCRD + DO 20 J = 1, NCRD + X0(J) = K*STEP + K = K + 2 + 20 CONTINUE + + WRITE (*, 30) X0(1), X0(NCRD), X0(2) - X0(1) + 30 FORMAT (/,'Logarithmic range:',F6.1,' to',F5.1,', step:',F7.4) + +* Convert the first to the second. + STATUS = LOGX2S(CRVAL, NCRD, 1, 1, X0, LOGC, STAT1) + IF (STATUS.NE.0) THEN + WRITE (*, 40) STATUS + 40 FORMAT ('LOGX2S ERROR',I2,'.') + END IF + +* Convert the second back to the first. + STATUS = LOGS2X(CRVAL, NCRD, 1, 1, LOGC, X1, STAT2) + IF (STATUS.NE.0) THEN + WRITE (*, 50) STATUS + 50 FORMAT ('LOGS2X ERROR',I2,'.') + END IF + + +* Test closure. + NFAIL = 0 + RESMAX = 0D0 + DO 90 J = 1, NCRD + IF (STAT1(J).NE.0) THEN + WRITE (*, 60) X0(J), STAT1(J) + 60 FORMAT ('LOGX2S: X =',1PE20.12,' -> log = ???, stat =',I2,'.') + GO TO 90 + END IF + + IF (STAT2(J).NE.0) THEN + WRITE (*, 70) X0(J), LOGC(J), STAT2(J) + 70 FORMAT ('LOGS2X: x =',1PE20.12,' -> log =',1PE20.12, + : ' -> x = ???, stat =',I2) + GO TO 90 + END IF + + IF (X0(J).EQ.0D0) THEN + RESID = ABS(X1(J) - X0(J)) + ELSE + RESID = ABS((X1(J) - X0(J)) / X0(J)) + IF (RESID.GT.RESMAX) RESMAX = RESID + END IF + + IF (RESID.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 80) X0(J), LOGC(J), X1(J), RESID + 80 FORMAT ('LOGX2S: x =',1PE20.12,' -> log =',1PE20.12,' ->',/, + : ' x =',1PE20.12,', resid =',1PE20.12) + END IF + 90 CONTINUE + + IF (RESMAX.GT.TOL) THEN + WRITE (*, *) + END IF + WRITE (*, 100) RESMAX + 100 FORMAT ('LOGX2S/LOGS2X: Maximum closure residual =',1PE8.1) + + + IF (NFAIL.NE.0) THEN + WRITE (*, 110) NFAIL + 110 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + ELSE + WRITE (*, 120) + 120 FORMAT (/,'PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + + END diff --git a/deps/wcslib/Fortran/test/tpih1.f b/deps/wcslib/Fortran/test/tpih1.f new file mode 100644 index 0000000..647ca67 --- /dev/null +++ b/deps/wcslib/Fortran/test/tpih1.f @@ -0,0 +1,183 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tpih1.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TPIH1 +*----------------------------------------------------------------------- +* +* TPIH1 tests WCSPIH, the WCS FITS parser for image headers, and WCSFIX, +* which translates non-standard constructs. It reads a test header and +* uses WCSPRT to print the resulting WCSPRM structs. +* +* Input comes from file 'pih.fits'. +* +* WCSP, which is meant to hold an address, is declared as an INTEGER +* array of length 2 to accomodate 64-bit machines for which +* sizeof(void *) = 2*sizeof(int). +*----------------------------------------------------------------------- + LOGICAL GOTEND + INTEGER ALTS(0:26), CTRL, I, IERR, J, K, NKEYRC, NREJECT, NWCS, + : RELAX, WCSP(2) + CHARACTER CALTS(0:26)*2, KEYREC*80, HEADER*28801, INFILE*9 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcshdr.inc' + INCLUDE 'wcs.inc' + INCLUDE 'wcsfix.inc' + INTEGER WCS(WCSLEN), STAT(WCSFIX_NWCS) + DOUBLE PRECISION DUMMY + EQUIVALENCE (WCS,DUMMY) + + DATA INFILE /'pih.fits'/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ( + : 'Testing WCSLIB parser for FITS image headers (tpih1.f)',/, + : '------------------------------------------------------',/) + +* Open the FITS WCS test header for formatted, direct I/O. + OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', + : RECL=80, IOSTAT=IERR) + IF (IERR.NE.0) THEN + WRITE (*, 20) IERR, INFILE + 20 FORMAT ('ERROR',I3,' opening ',A) + GO TO 999 + END IF + +* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + K = 1 + NKEYRC = 0 + GOTEND = .FALSE. + DO 50 J = 0, 100 + DO 40 I = 1, 36 + READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC + IF (IERR.NE.0) THEN + WRITE (*, 30) IERR + 30 FORMAT ('ERROR',I5,' reading header.') + GO TO 999 + END IF + + IF (KEYREC(:8).EQ.' ') GO TO 40 + IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 + IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 + + HEADER(K:) = KEYREC + K = K + 80 + NKEYRC = NKEYRC + 1 + + IF (KEYREC(:8).EQ.'END ') THEN +* An END keyrecord was read, read the rest of the block. + GOTEND = .TRUE. + END IF + 40 CONTINUE + + IF (GOTEND) GO TO 60 + 50 CONTINUE + + 60 CLOSE (UNIT=1) + + HEADER(K:K) = CHAR (0) + WRITE (*, 70) NKEYRC + 70 FORMAT ('Found',I4,' non-comment header keyrecords.',/) + + +* Cull all WCS keyrecords from the header but report illegal ones. + WRITE (*, 80) + 80 FORMAT (/,'Illegal or extraneous WCS header keyrecords ', + : 'rejected by WCSPIH:') + RELAX = WCSHDR_all + CTRL = -2 + +* WCSPIH will allocate memory for NWCS intialized WCSPRM structs. + CALL FLUSH(6) + IERR = WCSPIH (HEADER, NKEYRC, RELAX, CTRL, NREJECT, NWCS, WCSP) + IF (IERR.NE.0) THEN + WRITE (*, 90) IERR + 90 FORMAT ('WCSPIH ERROR',I2,'.') + GO TO 999 + END IF + +* List keyrecords that were not consumed by WCSPIH. + WRITE (*, 100) + 100 FORMAT (//,'Non-WCS header keyrecords ignored by WCSPIH:') + DO 110 I = 1, 288001, 80 + IF (HEADER(I:I).EQ.CHAR(0)) GO TO 120 + WRITE (*, '(A)') HEADER(I:I+79) + 110 CONTINUE + + 120 IERR = WCSIDX (NWCS, WCSP, ALTS) + WRITE (*, 130) NWCS + 130 FORMAT (//,'Found',I2,' alternate coordinate descriptions with ', + : 'indices:',/, + : ' 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') + DO 140 I = 0, 26 + IF (ALTS(I).LT.0) THEN + CALTS(I) = ' -' + ELSE + WRITE (CALTS(I), '(I2)') ALTS(I) + END IF + 140 CONTINUE + WRITE (*, '(27A)') CALTS + + DO 190 I = 0, NWCS-1 + WRITE (*, 150) + 150 FORMAT (/,'------------------------------------', + : '------------------------------------') + +* Copy into our WCSPRM struct. + IERR = WCSVCOPY (WCSP, I, WCS) + +* Fix non-standard WCS keyvalues. + IERR = WCSFIX (7, 0, WCS, STAT) + IF (IERR.NE.0) THEN + WRITE (*, 160) (STAT(J), J=1,WCSFIX_NWCS) + 160 FORMAT ('WCSFIX ERROR, status returns: (',(I2,:,','),')',/) + END IF + + IERR = WCSSET (WCS) + IF (IERR.NE.0) THEN + WRITE (*, 170) IERR + 170 FORMAT ('WCSSET ERROR',I2,'.') + GO TO 190 + END IF + + CALL FLUSH(6) + IERR = WCSPRT (WCS) + IF (IERR.NE.0) THEN + WRITE (*, 180) IERR + 180 FORMAT ('WCSPRT ERROR',I2,'.') + GO TO 190 + END IF + +* Free memory (doesn't free memory allocated by WCSPIH). + IERR = WCSFREE (WCS) + 190 CONTINUE + +* Free the memory allocated by WCSPIH. + IERR = WCSVFREE (NWCS, WCSP) + + 999 CONTINUE + END diff --git a/deps/wcslib/Fortran/test/tpih1.out b/deps/wcslib/Fortran/test/tpih1.out new file mode 100644 index 0000000..e722f48 --- /dev/null +++ b/deps/wcslib/Fortran/test/tpih1.out @@ -0,0 +1,798 @@ +Testing WCSLIB parser for FITS image headers (tpih1.f) +------------------------------------------------------ + +Found 203 non-comment header keyrecords. + + +Illegal or extraneous WCS header keyrecords rejected by WCSPIH: +LONPOLEX= 180.0 / [deg] Native longitude of the celestial pole + Rejected (1), syntactically valid WCS keyrecord has no effect. +LATPOLEX= -999.0 / [deg] Native latitude of the celestial pole + Rejected (2), syntactically valid WCS keyrecord has no effect. +RESTFRQX= 1667.3590E6 / [Hz] OH maser line rest frequency + Rejected (3), syntactically valid WCS keyrecord has no effect. +RESTWAVX= 0.17980079 / [m] OH maser line rest wavelength + Rejected (4), syntactically valid WCS keyrecord has no effect. +WCSNAMEX= 'eXtraneous' / Name of this coordinate system + Rejected (5), syntactically valid WCS keyrecord has no effect. +RADESYSX= 'ICRS' / Mean equatorial coordinates, IAU 1984 system + Rejected (6), syntactically valid WCS keyrecord has no effect. +EQUINOXX= 1950.0 / [yr] Equinox of equatorial coordinates + Rejected (7), syntactically valid WCS keyrecord has no effect. +SPECSYSX= 'HELIOCEN' / Reference frame of spectral coordinates + Rejected (8), syntactically valid WCS keyrecord has no effect. +SSYSOBSX= 'GEOCENTR' / Reference frame of observation + Rejected (9), syntactically valid WCS keyrecord has no effect. +VELOSYSX= 30000.0 / [m/s] Bary-topo velocity towards the source + Rejected (10), syntactically valid WCS keyrecord has no effect. +ZSOURCEX= 0.0456 / Redshift of the source + Rejected (11), syntactically valid WCS keyrecord has no effect. +SSYSSRCX= 'LSRK' / Reference frame of source redshift + Rejected (12), syntactically valid WCS keyrecord has no effect. +VELANGLX= 35.25 / Velocity orientation angle + Rejected (13), syntactically valid WCS keyrecord has no effect. + + +Non-WCS header keyrecords ignored by WCSPIH: +SIMPLE = F / Conforms to FITS standard? NO! +BITPIX = -32 / IEEE single precision floating point +NAXIS = 0 / No image data +ALTRPIX = 0.0 / Alternate reference pixel (not handled) +ALTRVAL = 0.0 / Alternate reference value (not handled) +END + + +Found 3 alternate coordinate descriptions with indices: + 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 + 0 1 - - - - - - - 2 - - - - - - - - - - - - - - - - - + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + crval: 0x
+ 150.00 -30.000 1.3945e+09 1.0000 + cunit: 0x
+ "deg" + "deg" + "Hz" + "" + ctype: 0x
+ "RA---TAN" + "DEC--TAN" + "FREQ" + "STOKES" + lonpole: 180.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 3 + npvmax: 3 + pv: 0x
+ 2 0 0.0000 + 2 1 0.0000 + 2 2 0.0000 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 15.000 0.0000 0.0000 + altlin: 4 + velref: 258 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "AIPS convention: TAN projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 1100 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_crval: 0x0 + m_cunit: 0x0 + m_ctype: 0x0 + m_pv: 0x0 + m_ps: 0x0 (= ps) + m_cd: 0x0 + m_crota: 0x0 + + m_colax: 0x0 + m_cname: 0x0 + m_crder: 0x0 + m_csyer: 0x0 + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.96593 0.25882 0.0000 0.0000 + pc[1][]: -0.25882 0.96593 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 62500. 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.096593 -0.025882 -0.0000 -0.0000 +piximg[1][]: -0.025882 0.096593 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 62500. 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -9.6593 -2.5882 -0.0000 -0.0000 +imgpix[1][]: -2.5882 9.6593 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.6000e-05 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 180.00 -30.000 + prj: (see below) + euler: 150.00 120.00 180.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 103 + code: "TAN" + r0: 57.295780 + pv: (not used) + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "gnomonic" + category: 1 (zenithal) + pvrange: 0 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + crval: 0x
+ 150.00 -30.000 0.21498 -2000.0 + cunit: 0x
+ "deg" + "deg" + "m" + "s" + ctype: 0x
+ "RA---SZP" + "DEC--SZP" + "WAVE-F2W" + "TIME'x'" + lonpole: 195.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.211061 + npv: 7 + npvmax: 7 + pv: 0x
+ 1 1 0.0000 + 1 2 90.000 + 1 3 195.00 + 1 4 -30.000 + 2 1 0.0000 + 2 2 180.00 + 2 3 45.000 + nps: 1 + npsmax: 1 + ps: 0x
+ 4 0 UTC + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 1 + velref: 0 + alt: 'A' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Wavelength" + "Time offset" + crder: 0x
+ UNDEFINED UNDEFINED 1.0000e-11 UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED 1.0000e-12 UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "Standard representation: SZP projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: "BARYCENT" + ssysobs: "TOPOCENT" + velosys: 1500.000000000 + zsource: 0.002500000 + ssyssrc: "LSRK" + velangl: UNDEFINED + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 0 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_crval: 0x0 + m_cunit: 0x0 + m_ctype: 0x0 + m_pv: 0x0 + m_ps: 0x0 + m_cd: 0x0 + m_crota: 0x0 + + m_colax: 0x0 + m_cname: 0x0 + m_crder: 0x0 + m_csyer: 0x0 + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: 0.86603 0.50000 0.0000 0.0000 + pc[1][]: -0.50000 0.86603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.10000 0.10000 -9.6353e-06 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.086603 -0.050000 -0.0000 -0.0000 +piximg[1][]: -0.050000 0.086603 0.0000 0.0000 +piximg[2][]: -0.0000 -0.0000 -9.6353e-06 -0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -8.6603 -5.0000 -0.0000 -0.0000 +imgpix[1][]: -5.0000 8.6603 0.0000 0.0000 +imgpix[2][]: -0.0000 -0.0000 -1.0379e+05 -0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 195.00 -30.000 + prj: (see below) + euler: 150.00 120.00 195.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 102 + code: "SZP" + r0: 57.295780 + pv: (0) + 0.0000 180.00 45.000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "slant zenithal perspective" + category: 1 (zenithal) + pvrange: 103 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 1 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 -0.0000 -0.0000 1.0000 -0.0000 + -0.0000 57.296 -1.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 110 + type: "WAVE" + code: "F2W" + crval: 0.21498 + restfrq: 1420405750.000000 + restwav: 0.211061 + pv: (not used) + w: 0.0000 1.3945e+09 -6.4866e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x
+ +------------------------------------------------------------------------ + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: -0.086603 -0.050000 0.0000 0.0000 + pc[1][]: -0.050000 0.086603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 0.010000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + crval: 0x
+ 150.00 -30.000 0.018577 0.0000 + cunit: 0x
+ "deg" + "deg" + "" + "turn" + ctype: 0x
+ "RA---ZPN" + "DEC--ZPN" + "ZOPT-F2W" + "PHASE" + lonpole: 195.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.211061 + npv: 10 + npvmax: 10 + pv: 0x
+ 2 1 1.0000 + 2 3 0.33333 + 2 5 0.13333 + 2 7 0.053968 + 2 9 0.021869 + 2 11 0.0088632 + 2 13 0.0035921 + 2 15 0.0014558 + 2 17 0.00059003 + 2 19 0.00023913 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: -0.086603 -0.050000 0.0000 0.0000 + cd[1][]: -0.050000 0.086603 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.010000 + crota: 0x
+ 0.0000 30.000 0.0000 0.0000 + altlin: 6 + velref: 258 + alt: 'I' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Redshift" + "Phase" + crder: 0x
+ UNDEFINED UNDEFINED 5.0000e-11 UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED 5.0000e-12 UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED 0.0000 + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED 100.00 + wcsname: "IRAF representation: ZPN projection" + timesys: "UTC" + trefpos: "TOPOCENTRE" + trefdir: "RA_NOM,DEC_NOM" + plephem: "DE405" + timeunit: "s" + dateref: "1957-02-14T15:00:00" + mjdref: 35883.000000000 0.625000000 + timeoffs: 0.010000000 + dateobs: "1957-02-14T15:00:00" + datebeg: "1957-02-14T15:00:00" + dateavg: "1957-02-14T16:48:00" + dateend: "1957-02-14T18:36:00" + mjdobs: 35883.625000000 + mjdbeg: 35883.625000000 + mjdavg: 35883.700000000 + mjdend: 35883.775000000 + jepoch: 1957.125598905 + bepoch: 1957.125960663 + tstart: 0.000000000 + tstop: 12960.000000000 + xposure: 12960.000000000 + telapse: 12960.000000000 + timsyer: 0.000050000 + timrder: 0.000000001 + timedel: 1.000000000 + timepixr: 0.500000000 + obsgeo: -4554231.533000 2816759.109000 -3454036.323000 + 148.263510 -32.998406 411.793000 + obsorbit: "sputnik-1957.eph" + radesys: "FK5" + equinox: 2000.000000000 + specsys: UNDEFINED + ssysobs: "TOPOCENT" + velosys: 1500.000000000 + zsource: 0.002500000 + ssyssrc: "LSRK" + velangl: 0.000000000 + aux: 0x
+ rsun_ref: 696000000.000000000 + dsun_obs: 150700000000.000000000 + crln_obs: 120.000000000 + hgln_obs: 0.000000000 + hglt_obs: 7.250000000 + a_radius: 120000000.000000000 + b_radius: 110000000.000000000 + c_radius: 100000000.000000000 + blon_obs: 155.000000000 + blat_obs: -33.000000000 + bdis_obs: 137000000000.000000000 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 0 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_crval: 0x0 + m_cunit: 0x0 + m_ctype: 0x0 + m_pv: 0x0 + m_ps: 0x0 (= ps) + m_cd: 0x0 + m_crota: 0x0 + + m_colax: 0x0 + m_cname: 0x0 + m_crder: 0x0 + m_csyer: 0x0 + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x
(= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 513.00 1025.0 1.0000 + pc: 0x
+ pc[0][]: -0.086603 -0.050000 0.0000 0.0000 + pc[1][]: -0.050000 0.086603 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 0.010000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -0.086603 -0.050000 0.0000 0.0000 +piximg[1][]: -0.050000 0.086603 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 -4.5652e-05 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 0.010000 +imgpix[0][]: -8.6603 -5.0000 -0.0000 -0.0000 +imgpix[1][]: -5.0000 8.6603 0.0000 0.0000 +imgpix[2][]: -0.0000 -0.0000 -21905. -0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 100.00 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 195.00 -30.000 + prj: (see below) + euler: 150.00 120.00 195.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 107 + code: "ZPN" + r0: 57.295780 + pv: 0.0000 + 1.0000 0.0000 0.33333 0.0000 0.13333 + 0.0000 0.053968 0.0000 0.021869 0.0000 + 0.0088632 0.0000 0.0035921 0.0000 0.0014558 + 0.0000 0.00059003 0.0000 0.00023913 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "zenithal/azimuthal polynomial" + category: 1 (zenithal) + pvrange: 30 + simplezen: 1 + equiareal: 0 + conformal: 0 + global: 1 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 3.1416 8.9006e+05 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 19 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 112 + type: "ZOPT" + code: "F2W" + crval: 0.018577 + restfrq: 1420405750.000000 + restwav: 0.211061 + pv: (not used) + w: 0.21106 1.3945e+09 -1.3691e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x
+ spxS2P: 0x
+ spxP2X: 0x
diff --git a/deps/wcslib/Fortran/test/tpih2.f b/deps/wcslib/Fortran/test/tpih2.f new file mode 100644 index 0000000..3a9ba84 --- /dev/null +++ b/deps/wcslib/Fortran/test/tpih2.f @@ -0,0 +1,192 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tpih2.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TPIH2 +*----------------------------------------------------------------------- +* +* TPIH2 tests WCSPIH, the WCS FITS parser for image headers, by reading +* a test header and using PGSBOX to plot coordinate graticules for the +* resulting WCSPRM structs. +* +* Input comes from file 'pih.fits'. +* +* WCSP, which is meant to hold an address, is declared as an INTEGER +* array of length 2 to accomodate 64-bit machines for which +* sizeof(void *) = 2*sizeof(int). +*----------------------------------------------------------------------- + LOGICAL GOTEND + INTEGER C0(7), GCODE(2), I, IC, IERR, J, K, NAXIS(2), + : NKEYRC, NREJECT, NWCS, RELAX, WCSP(2) + REAL BLC(2), TRC(2) + DOUBLE PRECISION CACHE(4,0:256), NLDPRM(1) + CHARACTER KEYREC*80, DEVTYP*16, HEADER*28801, IDENTS(3)*80, + : INFILE*9, NLCPRM(1)*1, OPT(2)*1, WCSNAME*72 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcshdr.inc' + INCLUDE 'wcs.inc' + INTEGER WCS(WCSLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (WCS,DUMMY) + + EXTERNAL PGWCSL + + DATA INFILE /'pih.fits'/ + DATA C0 /7*-1/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ( + : 'Testing WCSLIB parser for FITS image headers (tpih2.f)',/, + : '------------------------------------------------------',/) + +* Open the FITS WCS test header for formatted, direct I/O. + OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', + : RECL=80, IOSTAT=IERR) + IF (IERR.NE.0) THEN + WRITE (*, 20) IERR, INFILE + 20 FORMAT ('ERROR',I3,' opening ',A) + GO TO 999 + END IF + +* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + K = 1 + NKEYRC = 0 + GOTEND = .FALSE. + DO 50 J = 0, 100 + DO 40 I = 1, 36 + READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC + IF (IERR.NE.0) THEN + WRITE (*, 30) IERR + 30 FORMAT ('ERROR',I3,' reading header.') + GO TO 999 + END IF + + IF (KEYREC(:8).EQ.' ') GO TO 40 + IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 + IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 + + HEADER(K:) = KEYREC + K = K + 80 + NKEYRC = NKEYRC + 1 + + IF (KEYREC(:8).EQ.'END ') THEN +* An END keyrecord was read, read the rest of the block. + GOTEND = .TRUE. + END IF + 40 CONTINUE + + IF (GOTEND) GO TO 60 + 50 CONTINUE + + 60 CLOSE (UNIT=1) + + HEADER(K:K) = CHAR (0) + WRITE (*, 70) NKEYRC + 70 FORMAT ('Found',I4,' non-comment header keyrecords.') + + +* WCSPIH will allocate memory for an array of NWCS intialized WCSPRM +* structs. This array will be returned via a "pointer", WCSP, that +* may be passed to WCSVCOPY to extract a particular struct. + RELAX = WCSHDR_all + IERR = WCSPIH (HEADER, NKEYRC, RELAX, 3, NREJECT, NWCS, WCSP) + IF (IERR.NE.0) THEN + WRITE (*, 80) IERR + 80 FORMAT ('WCSPIH ERROR',I2,'.') + GO TO 999 + END IF + +* Plot setup. + NAXIS(1) = 1024 + NAXIS(2) = 1024 + + BLC(1) = 0.5 + BLC(2) = 0.5 + TRC(1) = NAXIS(1) + 0.5 + TRC(2) = NAXIS(2) + 0.5 + + DEVTYP = '/XWINDOW' + CALL PGBEG(0, DEVTYP, 1, 1) + CALL PGVSTD() + + CALL PGWNAD(0.0, 1.0, 0.0, 1.0) + CALL PGASK(1) + CALL PGPAGE() + +* Annotation. + IDENTS(1) = 'Right ascension' + IDENTS(2) = 'Declination' + + OPT(1) = 'G' + OPT(2) = 'E' + +* Compact lettering. + CALL PGSCH(0.8) + +* Draw full grid lines. + CALL PGSCI(1) + GCODE(1) = 2 + GCODE(2) = 2 + + DO 100 I = 0, NWCS-1 +* Copy into our WCSPRM struct. + IERR = WCSVCOPY (WCSP, I, WCS) + + IERR = WCSSET (WCS) + IF (IERR.NE.0) THEN + WRITE (*, 90) IERR + 90 FORMAT ('WCSSET ERROR',I2,'.') + GO TO 999 + END IF + +* Get WCSNAME out of the WCSPRM struct. + IERR = WCSGTC (WCS, WCS_WCSNAME, WCSNAME) + IDENTS(3) = WCSNAME + WRITE (*, '(/,A)') WCSNAME + +* Draw the celestial grid. The grid density is set for each +* world coordinate by specifying LABDEN = 1224. + IC = -1 + CALL PGSBOX(BLC, TRC, IDENTS, OPT, 0, 1224, C0, GCODE, 0D0, 0, + : 0D0, 0, 0D0, .FALSE., PGWCSL, 1, WCSLEN, 1, NLCPRM, WCS, + : NLDPRM, 256, IC, CACHE, IERR) + +* Draw the frame. + CALL PGBOX('BC', 0.0, 0, 'BC', 0.0, 0) + + CALL WCSLEEP (500) + CALL PGPAGE() + +* Free memory (doesn't free memory allocated by WCSPIH). + IERR = WCSFREE (WCS) + 100 CONTINUE + +* Free the memory allocated by WCSPIH. + IERR = WCSVFREE (NWCS, WCSP) + + 999 CONTINUE + END diff --git a/deps/wcslib/Fortran/test/tprj1.f b/deps/wcslib/Fortran/test/tprj1.f new file mode 100644 index 0000000..a12dd14 --- /dev/null +++ b/deps/wcslib/Fortran/test/tprj1.f @@ -0,0 +1,372 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tprj1.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TPRJ1 +*----------------------------------------------------------------------- +* +* TPRJ1 tests forward and reverse spherical projections for closure. +* +*----------------------------------------------------------------------- + INCLUDE 'prj.inc' + + INTEGER J, K, NFAIL, PROJEX, STATUS + DOUBLE PRECISION PV(0:29) + + DOUBLE PRECISION PI + PARAMETER (PI = 3.141592653589793238462643D0) + + DOUBLE PRECISION TOL + PARAMETER (TOL = 1D-9) +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing closure of WCSLIB spherical projection ', + : 'routines (tprj1.f)',/, + : '-----------------------------------------------', + : '------------------') + + WRITE (*, '(/,A)') 'List of prj status return values:' + DO 40 STATUS = 1, 4 + DO 30 K = 80, 1, -1 + IF (PRJ_ERRMSG(STATUS)(K:K).NE.' ') THEN + WRITE(*, 20) STATUS, PRJ_ERRMSG(STATUS)(:K) + 20 FORMAT(I4,': ',A,'.') + GO TO 40 + END IF + 30 CONTINUE + 40 CONTINUE + WRITE(*, '()') + + DO 50 J = 0, 29 + PV(J) = 0D0 + 50 CONTINUE + + NFAIL = 0 + +* AZP: zenithal/azimuthal perspective. + PV(1) = 0.5D0 + PV(2) = 30D0 + NFAIL = NFAIL + PROJEX ('AZP', PV, 90, 5, TOL) + +* SZP: slant zenithal perspective. + PV(1) = 0.5D0 + PV(2) = 210D0 + PV(3) = 60D0 + NFAIL = NFAIL + PROJEX ('SZP', PV, 90, -90, TOL) + +* TAN: gnomonic. + NFAIL = NFAIL + PROJEX ('TAN', PV, 90, 5, TOL) + +* STG: stereographic. + NFAIL = NFAIL + PROJEX ('STG', PV, 90, -85, TOL) + +* SIN: orthographic/synthesis. + PV(1) = -0.3D0 + PV(2) = 0.5D0 + NFAIL = NFAIL + PROJEX ('SIN', PV, 90, 45, TOL) + +* ARC: zenithal/azimuthal equidistant. + NFAIL = NFAIL + PROJEX ('ARC', PV, 90, -90, TOL) + +* ZPN: zenithal/azimuthal polynomial. + PV(0) = 0.00000D0 + PV(1) = 0.95000D0 + PV(2) = -0.02500D0 + PV(3) = -0.15833D0 + PV(4) = 0.00208D0 + PV(5) = 0.00792D0 + PV(6) = -0.00007D0 + PV(7) = -0.00019D0 + PV(8) = 0.00000D0 + PV(9) = 0.00000D0 + NFAIL = NFAIL + PROJEX ('ZPN', PV, 90, 10, TOL) + +* ZEA: zenithal/azimuthal equal area. + NFAIL = NFAIL + PROJEX ('ZEA', PV, 90, -85, TOL) + +* AIR: Airy's zenithal projection. + PV(1) = 45D0 + NFAIL = NFAIL + PROJEX ('AIR', PV, 90, -85, TOL) + +* CYP: cylindrical perspective. + PV(1) = 3.0D0 + PV(2) = 0.8D0 + NFAIL = NFAIL + PROJEX ('CYP', PV, 90, -90, TOL) + +* CEA: cylindrical equal area. + PV(1) = 0.75D0 + NFAIL = NFAIL + PROJEX ('CEA', PV, 90, -90, TOL) + +* CAR: plate carree. + NFAIL = NFAIL + PROJEX ('CAR', PV, 90, -90, TOL) + +* MER: Mercator's. + NFAIL = NFAIL + PROJEX ('MER', PV, 85, -85, TOL) + +* SFL: Sanson-Flamsteed. + NFAIL = NFAIL + PROJEX ('SFL', PV, 90, -90, TOL) + +* PAR: parabolic. + NFAIL = NFAIL + PROJEX ('PAR', PV, 90, -90, TOL) + +* MOL: Mollweide's projection. + NFAIL = NFAIL + PROJEX ('MOL', PV, 90, -90, TOL) + +* AIT: Hammer-Aitoff. + NFAIL = NFAIL + PROJEX ('AIT', PV, 90, -90, TOL) + +* COP: conic perspective. + PV(1) = 60D0 + PV(2) = 15D0 + NFAIL = NFAIL + PROJEX ('COP', PV, 90, -25, TOL) + +* COE: conic equal area. + PV(1) = 60D0 + PV(2) = -15D0 + NFAIL = NFAIL + PROJEX ('COE', PV, 90, -90, TOL) + +* COD: conic equidistant. + PV(1) = -60D0 + PV(2) = 15D0 + NFAIL = NFAIL + PROJEX ('COD', PV, 90, -90, TOL) + +* COO: conic orthomorphic. + PV(1) = -60D0 + PV(2) = -15D0 + NFAIL = NFAIL + PROJEX ('COO', PV, 85, -90, TOL) + +* BON: Bonne's projection. + PV(1) = 30D0 + NFAIL = NFAIL + PROJEX ('BON', PV, 90, -90, TOL) + +* PCO: polyconic. + NFAIL = NFAIL + PROJEX ('PCO', PV, 90, -90, TOL) + +* TSC: tangential spherical cube. + NFAIL = NFAIL + PROJEX ('TSC', PV, 90, -90, TOL) + +* CSC: COBE quadrilateralized spherical cube. + NFAIL = NFAIL + PROJEX ('CSC', PV, 90, -90, 4D-2) + +* QSC: quadrilateralized spherical cube. + NFAIL = NFAIL + PROJEX ('QSC', PV, 90, -90, TOL) + +* HPX: HEALPix projection. + PV(1) = 4D0 + PV(2) = 3D0 + NFAIL = NFAIL + PROJEX ('HPX', PV, 90, -90, TOL) + +* XPH: HEALPix polar, aka "butterfly" projection. + NFAIL = NFAIL + PROJEX ('XPH', PV, 90, -90, TOL) + + + IF (NFAIL.NE.0) THEN + WRITE (*, 60) NFAIL + 60 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + ELSE + WRITE (*, 70) + 70 FORMAT (/,'PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + + END + +*----------------------------------------------------------------------- + INTEGER FUNCTION PROJEX (PCODE, PV, NORTH, SOUTH, TOL) +*----------------------------------------------------------------------- +* PROJEX exercises the spherical projection routines. +* +* Given: +* PCODE C*3 Projection code. +* PV D(0:29) Projection parameters. +* NORTH I Northern cutoff latitude, degrees. +* SOUTH I Southern cutoff latitude, degrees. +* TOL D Reporting tolerance, degrees. +*----------------------------------------------------------------------- + INTEGER I, J, LAT, LNG, NFAIL, NORTH, SOUTH, STAT1(361), + : STAT2(361), STATR(25,25), STATUS + DOUBLE PRECISION DLAT, DLATMX, DLNG, DLNGMX, DR, DRMAX, DX, DY, + : LAT1, LAT2(361), LATR(25,25), LNG1(361), LNG2(361), + : LNGR(25,25), PV(0:29), R, TOL, X(361), X1(25), + : X2(25,25), Y(361), Y1(25), Y2(25,25) + CHARACTER PCODE*3 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'prj.inc' + INTEGER PRJ(PRJLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (PRJ, DUMMY) + + DOUBLE PRECISION D2R, PI + PARAMETER (PI = 3.141592653589793238462643D0) + PARAMETER (D2R = PI/180D0) +*----------------------------------------------------------------------- + STATUS = PRJINI(PRJ) + + DO 10 J = 0, 29 + STATUS = PRJPTD (PRJ, PRJ_PV, PV(J), J) + 10 CONTINUE + +* N.B. special case - only three characters need be given. + STATUS = PRJPTC (PRJ, PRJ_CODE, PCODE, 0) + +* Uncomment the next line to test alternative initializations of +* projection parameters. +* STATUS = PRJPTD (PRJ, PRJ_R0, 180D0/PI, 0) + + WRITE (*, 20) PCODE, NORTH, SOUTH, TOL + 20 FORMAT ('Testing ',A3,'; latitudes',I3,' to',I4, + : ', reporting tolerance',1PG8.1,' deg.') + + NFAIL = 0 + DLNGMX = 0D0 + DLATMX = 0D0 + + DO 90 LAT = NORTH, SOUTH, -1 + LAT1 = DBLE(LAT) + + J = 1 + DO 30 LNG = -180, 180 + LNG1(J) = DBLE(LNG) + J = J + 1 + 30 CONTINUE + + STATUS = PRJS2X (PRJ, 361, 1, 1, 1, LNG1(1), LAT1, X(1), Y(1), + : STAT1(1)) + IF (STATUS.EQ.1) THEN + WRITE (*, 40) PCODE, STATUS + 40 FORMAT (3X,A3,'(S2X) ERROR',I2) + GO TO 90 + END IF + + STATUS = PRJX2S (PRJ, 361, 0, 1, 1, X(1), Y(1), + : LNG2(1), LAT2(1), STAT2(1)) + IF (STATUS.EQ.1) THEN + WRITE (*, 50) PCODE, STATUS + 50 FORMAT (3X,A3,'(X2S) ERROR',I2) + GO TO 90 + END IF + + LNG = -180 + DO 80 J = 1, 361 + IF (STAT1(J).NE.0) GO TO 80 + + IF (STAT2(J).NE.0) THEN + NFAIL = NFAIL + 1 + WRITE (*, 60) PCODE, LNG1(J), LAT1, X(J), Y(J), LNG2(J), + : LAT2(J), STAT2(J) + 60 FORMAT (3X,A3,'(X2S): lng1 =',F20.15,' lat1 =',F20.15,/, + : ' x =',F20.15,' y =',F20.15,/, + : ' lng2 =',F20.15,' lat2 =',F20.15, + : ' ERROR',I3) + GO TO 80 + END IF + + DLNG = ABS(LNG2(J) - LNG1(J)) + IF (DLNG.GT.180D0) DLNG = ABS(DLNG-360D0) + IF (ABS(LAT).NE.90 .AND. DLNG.GT.DLNGMX) DLNGMX = DLNG + DLAT = ABS(LAT2(J) - LAT1) + IF (DLAT.GT.DLATMX) DLATMX = DLAT + + IF (DLAT.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 70) PCODE, LNG1(J), LAT1, X(J), Y(J), LNG2(J), + : LAT2(J) + 70 FORMAT (8X,A3,': lng1 =',F20.15,' lat1 =',F20.15,/, + : 8X,' x =',F20.15,' y =',F20.15,/, + : 8X,' lng2 =',F20.15,' lat2 =',F20.15) + ELSE IF (ABS(LAT).NE.90) THEN + IF (DLNG.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 70) PCODE, LNG1(J), LAT1, X(J), Y(J), + : LNG2(J), LAT2(J) + END IF + END IF + 80 CONTINUE + 90 CONTINUE + + WRITE (*, 100) DLNGMX, DLATMX + 100 FORMAT (13X,'Maximum residual (sky): lng',1P,E8.1,' lat',E8.1) + + +* Test closure at points close to the reference point. + R = 1D0 + X1(13) = 0D0 + Y1(13) = 0D0 + DO 110 I = 1, 12 + X1(I) = -R + Y1(I) = -R + X1(26-I) = R + Y1(26-I) = R + + R = R / 10D0 + 110 CONTINUE + + STATUS = PRJX2S (PRJ, 25, 25, 1, 1, X1(1), Y1(1), + : LNGR(1,1), LATR(1,1), STATR(1,1)) + IF (STATUS.NE.0) THEN + WRITE (*, 120) PCODE, STATUS + 120 FORMAT (8X,A3,'(X2S): ERROR',I3) + GO TO 999 + END IF + + STATUS = PRJS2X (PRJ, 625, 0, 1, 1, LNGR(1,1), LATR(1,1), + : X2(1,1), Y2(1,1), STATR(1,1)) + IF (STATUS.NE.0) THEN + WRITE (*, 130) PCODE, STATUS + 130 FORMAT (3X,A3,' ERROR',I3) + GO TO 999 + END IF + + DRMAX = 0D0 + + DO 160 J = 1, 25 + DO 150 I = 1, 25 + DX = X2(I,J) - X1(I) + DY = Y2(I,J) - Y1(J) + DR = SQRT(DX*DX + DY*DY) + + IF (DR.GT.DRMAX) DRMAX = DR + IF (DR.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 140) PCODE, X1(I), Y1(J), LNGR(I,J), LATR(I,J), + : X2(I,J), Y2(I,J) + 140 FORMAT (8X,A3,': x1 =',F20.15,' y1 =',F20.15,/, + : 8X,' lng =',F20.15,' lat =',F20.15,/, + : 8X,' x2 =',F20.15,' y2 =',F20.15) + END IF + 150 CONTINUE + 160 CONTINUE + + + WRITE (*, 170) DRMAX + 170 FORMAT (13X,'Maximum residual (ref): dR',1PE8.1) + + + 999 PROJEX = NFAIL + + END diff --git a/deps/wcslib/Fortran/test/tprj2.f b/deps/wcslib/Fortran/test/tprj2.f new file mode 100644 index 0000000..c5a358e --- /dev/null +++ b/deps/wcslib/Fortran/test/tprj2.f @@ -0,0 +1,481 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tprj2.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TPRJ2 +*----------------------------------------------------------------------- +* +* TPRJ2 tests projection routines by plotting test graticules using +* PGPLOT. +* +*----------------------------------------------------------------------- + INTEGER J + DOUBLE PRECISION PV(0:29) + + DOUBLE PRECISION PI + PARAMETER (PI = 3.141592653589793238462643D0) +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ( + : 'Testing WCSLIB spherical projection routines (tprj2.f)',/, + : '------------------------------------------------------') + + DO 20 J = 0, 29 + PV(J) = 0D0 + 20 CONTINUE + +* PGPLOT initialization. + CALL PGBEG (0, '/xwindow', 1, 1) + +* Define pen colours. + CALL PGSCR (0, 0.00, 0.00, 0.00) + CALL PGSCR (1, 1.00, 1.00, 0.00) + CALL PGSCR (2, 1.00, 1.00, 1.00) + CALL PGSCR (3, 0.50, 0.50, 0.80) + CALL PGSCR (4, 0.80, 0.50, 0.50) + CALL PGSCR (5, 0.80, 0.80, 0.80) + CALL PGSCR (6, 0.50, 0.50, 0.80) + CALL PGSCR (7, 0.80, 0.50, 0.50) + CALL PGSCR (8, 0.30, 0.50, 0.30) + + 30 FORMAT(/,A,' projection') + 40 FORMAT(/,A,' projection',/,'Parameters:',5F12.5,/,5F12.5) + +* AZP: zenithal/azimuthal perspective. + PV(1) = 2D0 + PV(2) = 30D0 + WRITE (*, 40) 'Zenithal/azimuthal perspective', (PV(J), J=1,2) + CALL PRJPLT ('AZP', 90, -90, PV) + +* SZP: zenithal/azimuthal perspective. + PV(1) = 2D0 + PV(2) = 210D0 + PV(3) = 60D0 + WRITE (*, 40) 'Slant zenithal perspective', (PV(J), J=1,3) + CALL PRJPLT ('SZP', 90, -90, PV) + +* TAN: gnomonic. + WRITE (*, 30) 'Gnomonic' + CALL PRJPLT ('TAN', 90, 5, PV) + +* STG: stereographic. + WRITE (*, 30) 'Stereographic' + CALL PRJPLT ('STG', 90, -85, PV) + +* SIN: orthographic. + PV(1) = -0.3D0 + PV(2) = 0.5D0 + WRITE (*, 40) 'Orthographic/synthesis', (PV(J), J=1,2) + CALL PRJPLT ('SIN', 90, -90, PV) + +* ARC: zenithal/azimuthal equidistant. + WRITE (*, 30) 'Zenithal/azimuthal equidistant' + CALL PRJPLT ('ARC', 90, -90, PV) + +* ZPN: zenithal/azimuthal polynomial. + PV(0) = 0.05000D0 + PV(1) = 0.95000D0 + PV(2) = -0.02500D0 + PV(3) = -0.15833D0 + PV(4) = 0.00208D0 + PV(5) = 0.00792D0 + PV(6) = -0.00007D0 + PV(7) = -0.00019D0 + PV(8) = 0.00000D0 + PV(9) = 0.00000D0 + WRITE (*, 40) 'Zenithal/azimuthal polynomial', (PV(J), J=0,9) + CALL PRJPLT ('ZPN', 90, 10, PV) + +* ZEA: zenithal/azimuthal equal area. + WRITE (*, 30) 'Zenithal/azimuthal equal area' + CALL PRJPLT ('ZEA', 90, -90, PV) + +* AIR: Airy's zenithal projection. + PV(1) = 45D0 + WRITE (*, 40) 'Airy''s zenithal', PV(1) + CALL PRJPLT ('AIR', 90, -85, PV) + +* CYP: cylindrical perspective. + PV(1) = 3.0D0 + PV(2) = 0.8D0 + WRITE (*, 40) 'Cylindrical perspective', (PV(J), J=1,2) + CALL PRJPLT ('CYP', 90, -90, PV) + +* CEA: cylindrical equal area. + PV(1) = 0.75D0 + WRITE (*, 40) 'Cylindrical equal area', PV(1) + CALL PRJPLT ('CEA', 90, -90, PV) + +* CAR: plate carree. + WRITE (*, 30) 'Plate carree' + CALL PRJPLT ('CAR', 90, -90, PV) + +* MER: Mercator's. + WRITE (*, 30) 'Mercator''s' + CALL PRJPLT ('MER', 85, -85, PV) + +* SFL: Sanson-Flamsteed. + WRITE (*, 30) 'Sanson-Flamsteed (global sinusoid)' + CALL PRJPLT ('SFL', 90, -90, PV) + +* PAR: parabolic. + WRITE (*, 30) 'Parabolic' + CALL PRJPLT ('PAR', 90, -90, PV) + +* MOL: Mollweide's projection. + WRITE (*, 30) 'Mollweide''s' + CALL PRJPLT ('MOL', 90, -90, PV) + +* AIT: Hammer-Aitoff. + WRITE (*, 30) 'Hammer-Aitoff' + CALL PRJPLT ('AIT', 90, -90, PV) + +* COP: conic perspective. + PV(1) = 60D0 + PV(2) = 15D0 + WRITE (*, 40) 'Conic perspective', (PV(J), J=1,2) + CALL PRJPLT ('COP', 90, -25, PV) + +* COE: conic equal area. + PV(1) = 60D0 + PV(2) = -15D0 + WRITE (*, 40) 'Conic equal area', (PV(J), J=1,2) + CALL PRJPLT ('COE', 90, -90, PV) + +* COD: conic equidistant. + PV(1) = -60D0 + PV(2) = 15D0 + WRITE (*, 40) 'Conic equidistant', (PV(J), J=1,2) + CALL PRJPLT ('COD', 90, -90, PV) + +* COO: conic orthomorphic. + PV(1) = -60D0 + PV(2) = -15D0 + WRITE (*, 40) 'Conic orthomorphic', (PV(J), J=1,2) + CALL PRJPLT ('COO', 85, -90, PV) + +* BON: Bonne's projection. + PV(1) = 30D0 + WRITE (*, 40) 'Bonne''s', PV(1) + CALL PRJPLT ('BON', 90, -90, PV) + +* PCO: polyconic. + WRITE (*, 30) 'Polyconic' + CALL PRJPLT ('PCO', 90, -90, PV) + +* TSC: tangential spherical cube. + WRITE (*, 30) 'Tangential spherical cube' + CALL PRJPLT ('TSC', 90, -90, PV) + +* CSC: COBE quadrilateralized spherical cube. + WRITE (*, 30) 'COBE quadrilateralized spherical cube' + CALL PRJPLT ('CSC', 90, -90, PV) + +* QSC: quadrilateralized spherical cube. + WRITE (*, 30) 'Quadrilateralized spherical cube' + CALL PRJPLT ('QSC', 90, -90, PV) + +* HPX: HEALPix projection. + PV(1) = 4D0 + PV(2) = 3D0 + WRITE (*, 40) 'HEALPix', (PV(J), J=1,2) + CALL PRJPLT ('HPX', 90, -90, PV) + +* XPH: HEALPix polar, aka "butterfly" projection. + WRITE (*, 40) 'Butterfly', (PV(J), J=1,2) + CALL PRJPLT ('XPH', 90, -90, PV) + + CALL PGASK (0) + CALL PGEND + + END + + + SUBROUTINE PRJPLT (PCODE, NORTH, SOUTH, PV) +*----------------------------------------------------------------------- +* PRJPLT draws a 15 degree coordinate graticule. +* +* Given: +* PCODE C*3 Projection code. +* NORTH I Northern cutoff latitude, degrees. +* SOUTH I Southern cutoff latitude, degrees. +* PV D(0:29) Projection parameters. +*----------------------------------------------------------------------- + LOGICAL CUBIC, HEALPX, INTRRP + INTEGER CI, H, ILAT, ILNG, J, K, LEN, NORTH, SOUTH, STAT(361), + : STATUS + REAL HX, HY, SX, SY, XR(512), XR0, YR(512), YR0 + DOUBLE PRECISION LAT(361), LNG(361), PV(0:29), X(361), X0, Y(361), + : Y0 + CHARACTER PCODE*3 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'prj.inc' + INTEGER PRJ(PRJLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (PRJ,DUMMY) +*----------------------------------------------------------------------- + STATUS = PRJINI(PRJ) + + DO 10 J = 0, 29 + STATUS = PRJPTD (PRJ, PRJ_PV, PV(J), J) + 10 CONTINUE + + STATUS = PRJPTC (PRJ, PRJ_CODE, PCODE, 0) + + WRITE (*, 20) PCODE, NORTH, SOUTH + 20 FORMAT ('Plotting ',A3,'; latitudes',I3,' to',I4,'.') + + CALL PGASK (0) + + STATUS = PRJSET(PRJ) + STATUS = PRJGTI (PRJ, PRJ_CATEGORY, J) + CUBIC = J.EQ.PRJ_QUADCUBE + HEALPX = J.EQ.PRJ_HEALPIX + IF (CUBIC) THEN +* Draw the perimeter of the quadcube projection. + CALL PGENV (-335.0, 65.0, -200.0, 200.0, 1, -2) + CALL PGSCI (2) + CALL PGTEXT (-340.0, -220.0, PCODE // ' - 15 degree graticule') + + CALL PGSCI (8) + + STATUS = PRJGTD (PRJ, PRJ_X0, X0) + STATUS = PRJGTD (PRJ, PRJ_Y0, Y0) + + XR0 = REAL(X0) + YR0 = REAL(Y0) + + XR(1) = 45.0 + XR0 + YR(1) = 45.0 - YR0 + XR(2) = 45.0 + XR0 + YR(2) = 3.0*45.0 - YR0 + XR(3) = -45.0 + XR0 + YR(3) = 3.0*45.0 - YR0 + XR(4) = -45.0 + XR0 + YR(4) = -3.0*45.0 - YR0 + XR(5) = 45.0 + XR0 + YR(5) = -3.0*45.0 - YR0 + XR(6) = 45.0 + XR0 + YR(6) = 45.0 - YR0 + XR(7) = -7.0*45.0 + XR0 + YR(7) = 45.0 - YR0 + XR(8) = -7.0*45.0 + XR0 + YR(8) = -45.0 - YR0 + XR(9) = 45.0 + XR0 + YR(9) = -45.0 - YR0 + CALL PGLINE (9, XR, YR) + + ELSE + CALL PGENV (-200.0, 200.0, -200.0, 200.0, 1, -2) + CALL PGSCI (2) + CALL PGTEXT (-240.0, -220.0, PCODE//' - 15 degree graticule') + + IF (HEALPX) THEN + IF (PCODE.EQ.'HPX') THEN +* Draw the perimeter of the HEALPix projection. + CALL PGSCI (8) + + H = NINT(PV(1)) + SX = 180.0 / H + SY = SX * NINT(PV(2) + 1D0) / 2.0 + + STATUS = PRJGTD (PRJ, PRJ_X0, X0) + STATUS = PRJGTD (PRJ, PRJ_Y0, Y0) + + XR0 = REAL(X0) + YR0 = REAL(Y0) + + HX = 180.0 + XR0 + HY = SY - SX - YR0 + CALL PGMOVE (HX, HY) + + DO 30 J = 1, H + HX = HX - SX + HY = HY + SX + CALL PGDRAW (HX, HY) + + HX = HX - SX + HY = HY - SX + CALL PGDRAW (HX, HY) + 30 CONTINUE + + HX = 180.0 + XR0 + HY = -SY + SX - YR0 + + IF (MOD(INT(PV(2)),2).EQ.1) THEN + K = 1 + ELSE + K = -1 + HY = HY - SX + END IF + + CALL PGMOVE (HX, HY) + + DO 40 J = 1, H + HX = HX - SX + HY = HY - K*SX + CALL PGDRAW (HX, HY) + + HX = HX - SX + HY = HY + K*SX + CALL PGDRAW (HX, HY) + 40 CONTINUE + + ELSE IF (PCODE.EQ.'XPH') THEN + DO 70 ILNG = -90, 180, 90 + LNG(1) = DBLE(ILNG) - 0.0001 + + J = 1 + DO 50 ILAT = 90, -90, -1 + LAT(J) = DBLE(ILAT) + J = J + 1 + 50 CONTINUE + + STATUS = PRJS2X(PRJ, 1, 181, 1, 1, LNG, LAT, X, Y, STAT) + + DO 60 J = 1, 181 + XR(J) = -REAL(X(J)) + YR(J) = REAL(Y(J)) + 60 CONTINUE + + CALL PGLINE(181, XR, YR) + 70 CONTINUE + END IF + + END IF + END IF + + + CI = 1 + DO 100 ILNG = -180, 180, 15 + CI = CI + 1 + IF (CI.GT.7) CI = 2 + + LNG(1) = DBLE(ILNG) + + IF (ILNG.EQ.0) THEN + CALL PGSCI (1) + ELSE + CALL PGSCI (CI) + END IF + + J = 1 + DO 80 ILAT = NORTH, SOUTH, -1 + LAT(J) = DBLE(ILAT) + J = J + 1 + 80 CONTINUE + + LEN = NORTH - SOUTH + 1 + STATUS = PRJS2X (PRJ, 1, LEN, 1, 1, LNG, LAT, X, Y, STAT) + + K = 0 + DO 90 J = 1, LEN + IF (STAT(J).NE.0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + GO TO 90 + END IF + + IF (CUBIC .AND. J.GT.1) THEN + IF (ABS(X(J) - X(J-1)).GT.2D0 .OR. + : ABS(Y(J) - Y(J-1)).GT.5D0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + END IF + ELSE IF (HEALPX .AND. ILNG.EQ.180) THEN + IF (X(J).GT.180D0) GO TO 90 + END IF + + K = K + 1 + XR(K) = -REAL(X(J)) + YR(K) = REAL(Y(J)) + 90 CONTINUE + + CALL PGLINE (K, XR, YR) + 100 CONTINUE + + CI = 1 + INTRRP = CUBIC .OR. HEALPX + DO 130 ILAT = -90, 90, 15 + CI = CI + 1 + IF (CI.GT.7) CI = 2 + + IF (ILAT.GT.NORTH) GO TO 130 + IF (ILAT.LT.SOUTH) GO TO 130 + + LAT(1) = DBLE(ILAT) + + IF (ILAT.EQ.0) THEN + CALL PGSCI (1) + ELSE + CALL PGSCI (CI) + END IF + + ILNG = -180 + DO 110 J = 1, 361 + LNG(J) = DBLE(ILNG) + ILNG = ILNG + 1 + 110 CONTINUE + + STATUS = PRJS2X (PRJ, 361, 1, 1, 1, LNG, LAT, X, Y, STAT) + + K = 0 + DO 120 J = 1, 361 + IF (STAT(J).NE.0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + GO TO 120 + END IF + + IF (INTRRP .AND. J.GT.1) THEN + IF (ABS(X(J) - X(J-1)).GT.2D0 .OR. + : ABS(Y(J) - Y(J-1)).GT.5D0) THEN + IF (K.GT.1) CALL PGLINE (K, XR, YR) + K = 0 + END IF + END IF + + K = K + 1 + XR(K) = -REAL(X(J)) + YR(K) = REAL(Y(J)) + 120 CONTINUE + + CALL PGLINE (K, XR, YR) + 130 CONTINUE + + CALL PGSCI(1) + XR(1) = 0.0 + YR(1) = 0.0 + CALL PGPT (1, XR, YR, 21) + + CALL PGASK (1) + CALL WCSLEEP (250) + CALL PGPAGE() + + + RETURN + END diff --git a/deps/wcslib/Fortran/test/tspc.f b/deps/wcslib/Fortran/test/tspc.f new file mode 100644 index 0000000..7a61cda --- /dev/null +++ b/deps/wcslib/Fortran/test/tspc.f @@ -0,0 +1,421 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tspc.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TSPC +*----------------------------------------------------------------------- +* +* TSPC tests the spectral transformation driver routines for closure. +* +*----------------------------------------------------------------------- +* Maximum length of spectral axis - see CLOSURE. + INTEGER NSPEC + PARAMETER (NSPEC = 8001) + + INTEGER CLOSURE, NAXISJ, NFAIL + DOUBLE PRECISION C, CDELTX, CRPIXJ, CRVALX, MARS(0:6), RESTFRQ, + : RESTWAV, X1, X2 + + COMMON /SPECTRO/ MARS + + DATA C /2.99792458D8/ + +* KPNO MARS spectrograph grism parameters. + DATA MARS /4.5D5, 1D0, 27D0, 1.765D0, -1.077D6, 3D0, 5D0/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing closure of WCSLIB spectral transformation ', + : 'routines (tspc.f)',/, + : '--------------------------------------------------', + : '-----------------') + + NFAIL = 0 + +* PGPLOT initialization. + CALL PGBEG (0, '/xwindow', 1, 1) + + NAXISJ = NSPEC + CRPIXJ = NAXISJ/2 + 1 + + RESTFRQ = 1420.40595D6 + RESTWAV = C/RESTFRQ + X1 = 1D9 + X2 = 2D9 + CDELTX = (X2 - X1)/(NAXISJ - 1) + CRVALX = X1 + (CRPIXJ - 1.0)*CDELTX + WRITE (*, 20) X1*1D-9, X2*1D-9, CDELTX*1D-3 + 20 FORMAT (/,'Linear frequency axis, span:',F4.1,' to',F4.1, + : ' (GHz), step:',F8.3,' (kHz)',/,'---------------------', + : '-----------------------------------------------------') + NFAIL = NFAIL + CLOSURE('WAVE-F2W', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VOPT-F2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ZOPT-F2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AWAV-F2A', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VELO-F2V', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('BETA-F2V', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + + + RESTWAV = 700D-9 + RESTFRQ = C/RESTWAV + X1 = 300D-9 + X2 = 900D-9 + CDELTX = (X2 - X1)/(NAXISJ - 1) + CRVALX = X1 + (CRPIXJ - 1D0)*CDELTX + WRITE (*, 30) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 + 30 FORMAT (/,'Linear vacuum wavelength axis, span:',I4,' to',I4, + : ' (nm), step:',F9.6,' (nm)',/,'----------------------', + : '----------------------------------------------------') + NFAIL = NFAIL + CLOSURE('FREQ-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AFRQ-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ENER-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('WAVN-W2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VRAD-W2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AWAV-W2A', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VELO-W2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('BETA-W2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + + + WRITE (*, 40) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 + 40 FORMAT (/,'Linear air wavelength axis, span:',I4,' to',I4, + : ' (nm), step:',F9.6,' (nm)',/,'----------------------', + : '----------------------------------------------------') + NFAIL = NFAIL + CLOSURE('FREQ-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AFRQ-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ENER-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('WAVN-A2F', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VRAD-A2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('WAVE-A2W', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VOPT-A2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ZOPT-A2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VELO-A2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('BETA-A2V', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + + + RESTFRQ = 1420.40595D6 + RESTWAV = C/RESTFRQ + X1 = -0.96D0*C + X2 = 0.96D0*C + CDELTX = (X2 - X1)/(NAXISJ - 1) + CRVALX = X1 + (CRPIXJ - 1D0)*CDELTX + WRITE (*, 50) INT(X1), INT(X2), INT(CDELTX) + 50 FORMAT (/,'Linear velocity axis, span:',I11,' to',I10, + : ' m/s, step:',I6,' (m/s)',/,'-----------------------', + : '---------------------------------------------------') + NFAIL = NFAIL + CLOSURE('FREQ-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AFRQ-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ENER-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('WAVN-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VRAD-V2F', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('WAVE-V2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VOPT-V2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ZOPT-V2W', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AWAV-V2A', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + + + RESTWAV = 650D-9 + RESTFRQ = C/RESTWAV + X1 = 300D-9 + X2 = 1000D-9 + CDELTX = (X2 - X1)/(NAXISJ - 1) + CRVALX = X1 + (CRPIXJ - 1D0)*CDELTX + WRITE (*, 60) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 + 60 FORMAT (/,'Vacuum wavelength grism axis, span:',I4,' to',I5, + : ' (nm), step:',F9.6,' (nm)',/,'----------------------', + : '----------------------------------------------------') + NFAIL = NFAIL + CLOSURE('FREQ-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AFRQ-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ENER-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('WAVN-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VRAD-GRI', RESTFRQ, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('WAVE-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VOPT-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('ZOPT-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('AWAV-GRI', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VELO-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('BETA-GRI', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + + +* Reproduce Fig. 5 of Paper III. + NAXISJ = 1700 + CRPIXJ = 719.8D0 + CRVALX = 7245.2D-10 + CDELTX = 2.956D-10 + RESTWAV = 8500D-10 + RESTFRQ = C/RESTWAV + X1 = CRVALX + (1 - CRPIXJ)*CDELTX + X2 = CRVALX + (NAXISJ - CRPIXJ)*CDELTX + MARS(5) = 0D0 + MARS(6) = 0D0 + WRITE (*, 70) INT(X1*1D9), INT(X2*1D9), CDELTX*1D9 + 70 FORMAT (/,'Air wavelength grism axis, span:',I4,' to',I5, + : ' (nm), step:',F9.6,' (nm)',/,'----------------------', + : '----------------------------------------------------') + NFAIL = NFAIL + CLOSURE('AWAV-GRA', 0D0, 0D0, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + NFAIL = NFAIL + CLOSURE('VELO-GRA', 0D0, RESTWAV, NAXISJ, CRPIXJ, + : CDELTX, CRVALX) + + CALL PGASK(0) + CALL PGEND() + + + IF (NFAIL.NE.0) THEN + WRITE (*, 80) NFAIL + 80 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + ELSE + WRITE (*, 90) + 90 FORMAT (/,'PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + + END + +*======================================================================= + + INTEGER FUNCTION CLOSURE (CTYPES, RESTFRQ, RESTWAV, NAXISJ, + : CRPIXJ, CDELTX, CRVALX) + + INTEGER NSPEC + PARAMETER (NSPEC = 8001) + + INTEGER J, NAXISJ, NFAIL, RESTREQ, STAT1(NSPEC), STAT2(NSPEC), + : STATUS + REAL TMP, X(NSPEC), XMIN, XMAX, Y(NSPEC), YMAX, YMIN + DOUBLE PRECISION CDELTS, CDELTX, CLOS(NSPEC), CRPIXJ, CRVALS, + : CRVALX, DSDX, MARS(0:6), RESID, RESIDMAX, RESTFRQ, + : RESTWAV, SPEC1(NSPEC), SPEC2(NSPEC), TOL + CHARACTER CTYPES*8, PTYPE, SCODE*3, SNAME*21, STYPE*8, TITLE*80, + : UNITS*7, XTYPE, YLAB*80 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'spx.inc' + INCLUDE 'spc.inc' + INTEGER SPC(SPCLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (SPC,DUMMY) + + COMMON /SPECTRO/ MARS + + DATA TOL /1D-11/ +*----------------------------------------------------------------------- + CLOSURE = 0 + +* Get keyvalues for the required spectral axis type. + STATUS = SPCXPS (CTYPES, CRVALX, RESTFRQ, RESTWAV, PTYPE, XTYPE, + : RESTREQ, CRVALS, DSDX) + IF (STATUS.NE.0) THEN + WRITE (*, 10) STATUS, CTYPES + 10 FORMAT ('ERROR',I2,' from SPCXPS for',A,'.') + RETURN + END IF + CDELTS = CDELTX * DSDX + + STATUS = SPCINI(SPC) + + IF (CTYPES(6:6).EQ.'G') THEN +* KPNO MARS spectrograph grism parameters. + STATUS = SPCPTD (SPC, SPC_PV, MARS(0), 0) + STATUS = SPCPTD (SPC, SPC_PV, MARS(1), 1) + STATUS = SPCPTD (SPC, SPC_PV, MARS(2), 2) + STATUS = SPCPTD (SPC, SPC_PV, MARS(3), 3) + STATUS = SPCPTD (SPC, SPC_PV, MARS(4), 4) + STATUS = SPCPTD (SPC, SPC_PV, MARS(5), 5) + STATUS = SPCPTD (SPC, SPC_PV, MARS(6), 6) + END IF + +* Construct the axis. + DO 20 J = 1, NAXISJ + SPEC1(J) = (J - CRPIXJ)*CDELTS + 20 CONTINUE + + WRITE (*, 30) CTYPES, CRVALS+SPEC1(1), CRVALS+SPEC1(NAXISJ), + : CDELTS + 30 FORMAT (A,' (CRVALk+w) range: ',1PE13.6,' to ',1PE13.6,', step: ', + : 1PE13.6) + + +* Initialize. + STATUS = SPCPTI (SPC, SPC_FLAG, 0, 0) + STATUS = SPCPTD (SPC, SPC_CRVAL, CRVALS, 0) + STATUS = SPCPTD (SPC, SPC_RESTFRQ, RESTFRQ, 0) + STATUS = SPCPTD (SPC, SPC_RESTWAV, RESTWAV, 0) + STATUS = SPCPTC (SPC, SPC_TYPE, CTYPES, 0) + STATUS = SPCPTC (SPC, SPC_CODE, CTYPES(6:8), 0) + +* Convert the first to the second. + STATUS = SPCX2S(SPC, NAXISJ, 1, 1, SPEC1, SPEC2, STAT1) + IF (STATUS.NE.0) THEN + WRITE (*, 40) STATUS + 40 FORMAT ('SPCX2S ERROR',I2,'.') + RETURN + END IF + +* Convert the second back to the first. + STATUS = SPCS2X(SPC, NAXISJ, 1, 1, SPEC2, CLOS, STAT2) + IF (STATUS.NE.0) THEN + WRITE (*, 50) STATUS + 50 FORMAT ('SPCS2X ERROR',I2,'.') + RETURN + END IF + + +* Test closure. + NFAIL = 0 + RESIDMAX = 0D0 + STATUS = SPCGTC (SPC, SPC_TYPE, STYPE) + DO 90 J = 1, NAXISJ + IF (STAT1(J).NE.0) THEN + WRITE (*, 60) CTYPES, SPEC1(J), STYPE, STAT1(J) + 60 FORMAT (A,': w =',1PE20.12,' -> ',A4,' = ???, stat = ',I2) + GO TO 90 + END IF + + IF (STAT2(J).NE.0) THEN + WRITE (*, 70) CTYPES, SPEC1(J), STYPE, SPEC2(J), STAT2(J) + 70 FORMAT (A,': w =',1PE20.12,' -> ',A4,' =',1PE20.12, + : ' -> w = ???, stat = ',I2) + GO TO 90 + END IF + + RESID = ABS((CLOS(J) - SPEC1(J))/CDELTS) + IF (RESID.GT.RESIDMAX) RESIDMAX = RESID + + IF (RESID.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 80) CTYPES, SPEC1(J), STYPE, SPEC2(J), CLOS(J), + : RESID + 80 FORMAT (A,': w =',1PE20.12,' -> ',A4,' =',1PE20.12,' ->',/, + : ' w =',1PE20.12,', resid =',1PE8.1) + END IF + 90 CONTINUE + + WRITE (*, 100) CTYPES, RESIDMAX + 100 FORMAT (A,': Maximum closure residual =',1PE8.1,' pixel') + + +* Draw graph. + CALL PGBBUF() + CALL PGERAS() + + XMIN = REAL(CRVALS + SPEC1(1)) + XMAX = REAL(CRVALS + SPEC1(NAXISJ)) + YMIN = REAL(SPEC2(1)) - XMIN + YMAX = YMIN + DO 110 J = 1, NAXISJ + X(J) = REAL(J) + Y(J) = REAL(SPEC2(J) - (CRVALS + SPEC1(J))) + IF (Y(J).GT.YMAX) YMAX = Y(J) + IF (Y(J).LT.YMIN) YMIN = Y(J) + 110 CONTINUE + + J = INT(CRPIXJ+1) + IF (Y(J).LT.0D0) then + TMP = YMIN + YMIN = YMAX + YMAX = TMP + END IF + + CALL PGASK(0) + CALL PGENV(1.0, REAL(NAXISJ), YMIN, YMAX, 0, -1) + + CALL PGSCI(1) + CALL PGBOX('ABNTS', 0.0, 0, 'BNTS', 0.0, 0) + + STATUS = SPCTYP (CTYPES, STYPE, SCODE, SNAME, UNITS, PTYPE, XTYPE, + : RESTREQ) + DO 120 J = 21, 1, -1 + IF (SNAME(J:J).NE.' ') GO TO 130 + 120 CONTINUE + 130 YLAB = SNAME(:J) // ' - correction ' // UNITS + TITLE = CTYPES // ': CRVALk + w ' // UNITS + CALL PGLAB('Pixel coordinate', YLAB, TITLE) + + CALL PGAXIS('N', 0.0, YMAX, REAL(NAXISJ), YMAX, XMIN, XMAX, 0.0, + : 0, -0.5, 0.0, 0.5, -0.5, 0.0) + + CALL PGAXIS('N', REAL(NAXISJ), ymin, REAL(NAXISJ), YMAX, + : REAL(YMIN/CDELTS), REAL(YMAX/CDELTS), 0.0, 0, 0.5, + : 0.0, 0.5, 0.1, 0.0) + CALL PGMTXT('R', 2.2, 0.5, 0.5, 'Pixel offset') + + CALL PGLINE(NAXISJ, X, Y) + CALL PGSCI(7) + CALL PGPT1(REAL(CRPIXJ), 0.0, 24) + CALL PGEBUF() + + CALL WCSLEEP (200) + WRITE (*, '(A,$)') 'Type for next page: ' + READ (*, *, END=140) + 140 WRITE (*, *) + + CLOSURE = NFAIL + + END diff --git a/deps/wcslib/Fortran/test/tsph.f b/deps/wcslib/Fortran/test/tsph.f new file mode 100644 index 0000000..8ce64f6 --- /dev/null +++ b/deps/wcslib/Fortran/test/tsph.f @@ -0,0 +1,148 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tsph.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TSPH +*----------------------------------------------------------------------- +* +* TSPH tests the forward and reverse spherical coordinate transformation +* routines for closure. +* +*----------------------------------------------------------------------- + INTEGER J, LAT, LNG, NFAIL, SPHS2X, SPHX2S, STATUS + DOUBLE PRECISION COSLAT, DLAT, DLATMX, DLNG, DLNGMX, LNG1(361), + : LNG2(361), EUL(5), LAT1, LAT2(361), PHI(361), + : THETA(361), TOL, ZETA + + PARAMETER (TOL = 1D-12) + + DOUBLE PRECISION D2R, PI + PARAMETER (PI = 3.141592653589793238462643D0) + PARAMETER (D2R = PI/180D0) +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing closure of WCSLIB coordinate transformation ', + : 'routines (tsph.f)',/, + : '----------------------------------------------------', + : '-----------------') + +* Set reference angles. + EUL(1) = 90D0 + EUL(2) = 30D0 + EUL(3) = -90D0 + WRITE (*, 20) (EUL(J),J=1,3) + 20 FORMAT (/,'Celestial longitude and latitude of the native pole, ', + : 'and native',/,'longitude of the celestial pole ', + : '(degrees):',3F10.4) + + EUL(4) = COS(EUL(2)*D2R) + EUL(5) = SIN(EUL(2)*D2R) + + WRITE (*, 30) TOL + 30 FORMAT ('Reporting tolerance:',1PG8.1,' degrees of arc.') + + NFAIL = 0 + DLNGMX = 0D0 + DLATMX = 0D0 + + DO 70 LAT = 90, -90, -1 + LAT1 = DBLE(LAT) + COSLAT = COS(LAT1*D2R) + + J = 1 + DO 40 LNG = -180, 180 + LNG1(J) = DBLE(LNG) + J = J + 1 + 40 CONTINUE + + STATUS = SPHS2X (EUL, 361, 1, 1, 1, LNG1, LAT1, PHI, THETA) + STATUS = SPHX2S (EUL, 361, 0, 1, 1, PHI, THETA, LNG2, LAT2) + + DO 60 J = 1, 361 + DLNG = ABS(LNG2(J) - LNG1(J)) + IF (DLNG.GT.180D0) DLNG = ABS(DLNG-360D0) + DLNG = DLNG*COSLAT + DLAT = ABS(LAT2(J)-LAT1) + + IF (DLNG.GT.DLNGMX) DLNGMX = DLNG + IF (DLAT.GT.DLATMX) DLATMX = DLAT + + IF (DLNG.GT.TOL .OR. DLAT.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 50) LNG1(J), LAT1, PHI(J), THETA(J), LNG2(J), + : LAT2(J) + 50 FORMAT ('Unclosed: LNG1 =',F20.15,' LAT1 =',F20.15,/, + : ' PHI =',F20.15,' THETA =',F20.15,/, + : ' LNG2 =',F20.15,' LAT2 =',F20.15) + END IF + 60 CONTINUE + 70 CONTINUE + + +* Test closure at points close to the pole. + DO 90 J = -1, 1, 2 + ZETA = 1D0 + LNG1(1) = -180D0 + + DO 80 LAT = 1, 12 + LAT1 = DBLE(J)*(90D0 - ZETA) + + STATUS = SPHS2X (EUL, 1, 1, 1, 1, LNG1, LAT1, PHI, THETA) + STATUS = SPHX2S (EUL, 1, 1, 1, 1, PHI, THETA, LNG2, LAT2) + + DLNG = ABS(LNG2(1) - LNG1(1)) + IF (DLNG.GT.180D0) DLNG = ABS(DLNG-360D0) + DLNG = DLNG*COSLAT + DLAT = ABS(LAT2(1)-LAT1) + + IF (DLNG.GT.DLNGMX) DLNGMX = DLNG + IF (DLAT.GT.DLATMX) DLATMX = DLAT + + IF (DLNG.GT.TOL .OR. DLAT.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 50) LNG1(1), LAT1, PHI(1), THETA(1), LNG2(1), + : LAT2(1) + END IF + + ZETA = ZETA/10D0 + LNG1(1) = LNG1(1) + 30D0 + 80 CONTINUE + 90 CONTINUE + + WRITE (*, 100) DLNGMX, DLATMX + 100 FORMAT (/,'SPHS2X/SPHX2S: Maximum closure residual =',1P,E8.1, + : ' (lng)',E8.1,' (lat) deg.') + + + IF (NFAIL.NE.0) THEN + WRITE (*, 110) NFAIL + 110 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + ELSE + WRITE (*, 120) + 120 FORMAT (/,'PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + + END diff --git a/deps/wcslib/Fortran/test/tspx.f b/deps/wcslib/Fortran/test/tspx.f new file mode 100644 index 0000000..752ed7c --- /dev/null +++ b/deps/wcslib/Fortran/test/tspx.f @@ -0,0 +1,267 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tspx.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TSPX +*----------------------------------------------------------------------- +* +* TSPEC tests the spectral transformation routines for closure. +* +*----------------------------------------------------------------------- +* Length of spectral axis - see CLOSURE. + INTEGER NSPEC + PARAMETER (NSPEC = 8001) + + INTEGER CLOSURE, J, K, NFAIL, STAT(NSPEC), STATUS + DOUBLE PRECISION AWAV(NSPEC), C, FREQ(NSPEC), RESTFRQ, RESTWAV, + : SPC1(NSPEC), SPC2(NSPEC), STEP, VELO(NSPEC), WAVE(NSPEC) + + INCLUDE 'spx.inc' + + DATA C /2.99792458D8/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing closure of WCSLIB spectral transformation ', + : 'routines (tspx.f)',/, + : '--------------------------------------------------', + : '-----------------') + + RESTFRQ = 1420.40595D6 + RESTWAV = C/RESTFRQ + +* Exercise SPECX. + WRITE (*, 20) + 20 FORMAT (/,'Testing spectral cross-conversions (specx).',/) + STATUS = SPECX('VELO', 4.3D5, RESTFRQ, RESTWAV, SPX) + + WRITE (*, 30) SPX(1), SPX(2), SPXI(1), SPXI(2), (SPX(J), J=4,14) + 30 FORMAT (' restfrq:',1PE20.12,/,' restwav:',1PE20.12,/, + : ' wavetype:',I3,/, ' velotype:',I3,//, + : ' freq:',1PE20.12,/,' afrq:',1PE20.12,/, + : ' ener:',1PE20.12,/,' wavn:',1PE20.12,/, + : ' vrad:',1PE20.12,/,' wave:',1PE20.12,/, + : ' vopt:',1PE20.12,/,' zopt:',1PE20.12,/, + : ' awav:',1PE20.12,/,' velo:',1PE20.12,/, + : ' beta:',1PE20.12,/) + + WRITE (*, 40) (SPX(J), J=15,40) + 40 FORMAT ('dfreq/dafrq:',1PE20.12,/,'dafrq/dfreq:',1PE20.12,/, + : 'dfreq/dener:',1PE20.12,/,'dener/dfreq:',1PE20.12,/, + : 'dfreq/dwavn:',1PE20.12,/,'dwavn/dfreq:',1PE20.12,/, + : 'dfreq/dvrad:',1PE20.12,/,'dvrad/dfreq:',1PE20.12,/, + : 'dfreq/dwave:',1PE20.12,/,'dwave/dfreq:',1PE20.12,/, + : 'dfreq/dawav:',1PE20.12,/,'dawav/dfreq:',1PE20.12,/, + : 'dfreq/dvelo:',1PE20.12,/,'dvelo/dfreq:',1PE20.12,/, + : 'dwave/dvopt:',1PE20.12,/,'dvopt/dwave:',1PE20.12,/, + : 'dwave/dzopt:',1PE20.12,/,'dzopt/dwave:',1PE20.12,/, + : 'dwave/dawav:',1PE20.12,/,'dawav/dwave:',1PE20.12,/, + : 'dwave/dvelo:',1PE20.12,/,'dvelo/dwave:',1PE20.12,/, + : 'dawav/dvelo:',1PE20.12,/,'dvelo/dawav:',1PE20.12,/, + : 'dvelo/dbeta:',1PE20.12,/,'dbeta/dvelo:',1PE20.12,/) + +* Construct a linear velocity spectrum. + STEP = (2D0*C/NSPEC) / 2D0 + K = -NSPEC + DO 50 J = 1, NSPEC + VELO(J) = (K+1)*STEP + K = K + 2 + 50 CONTINUE + + WRITE (*, 60) VELO(1)*1D-3, VELO(NSPEC)*1D-3, + : (VELO(2) - VELO(1))*1D-3 + 60 FORMAT (/,'Velocity range:',F12.3,' to',F11.3,' km/s, step:', + : F7.3,' km/s') + +* Convert it to frequency. + STATUS = VELOFREQ(RESTFRQ, NSPEC, 1, 1, VELO, FREQ, STAT) + +* Test closure of all two-way combinations. + NFAIL = 0 + NFAIL = NFAIL + CLOSURE ('freq', 'afrq', 0D0, + : FREQAFRQ, AFRQFREQ, FREQ, SPC1) + NFAIL = NFAIL + CLOSURE ('afrq', 'freq', 0D0, + : AFRQFREQ, FREQAFRQ, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('freq', 'ener', 0D0, + : FREQENER, ENERFREQ, FREQ, SPC1) + NFAIL = NFAIL + CLOSURE ('ener', 'freq', 0D0, + : ENERFREQ, FREQENER, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('freq', 'wavn', 0D0, + : FREQWAVN, WAVNFREQ, FREQ, SPC1) + NFAIL = NFAIL + CLOSURE ('wavn', 'freq', 0D0, + : WAVNFREQ, FREQWAVN, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('freq', 'vrad', RESTFRQ, + : FREQVRAD, VRADFREQ, FREQ, SPC1) + NFAIL = NFAIL + CLOSURE ('vrad', 'freq', RESTFRQ, + : VRADFREQ, FREQVRAD, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('freq', 'wave', 0D0, + : FREQWAVE, WAVEFREQ, FREQ, WAVE) + NFAIL = NFAIL + CLOSURE ('wave', 'freq', 0D0, + : WAVEFREQ, FREQWAVE, WAVE, SPC2) + + NFAIL = NFAIL + CLOSURE ('freq', 'awav', 0D0, + : FREQAWAV, AWAVFREQ, FREQ, AWAV) + NFAIL = NFAIL + CLOSURE ('awav', 'freq', 0D0, + : AWAVFREQ, FREQAWAV, AWAV, SPC2) + + NFAIL = NFAIL + CLOSURE ('freq', 'velo', RESTFRQ, + : FREQVELO, VELOFREQ, FREQ, VELO) + NFAIL = NFAIL + CLOSURE ('velo', 'freq', RESTFRQ, + : VELOFREQ, FREQVELO, VELO, SPC2) + + NFAIL = NFAIL + CLOSURE ('wave', 'vopt', RESTWAV, + : WAVEVOPT, VOPTWAVE, WAVE, SPC1) + NFAIL = NFAIL + CLOSURE ('vopt', 'wave', RESTWAV, + : VOPTWAVE, WAVEVOPT, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('wave', 'zopt', RESTWAV, + : WAVEZOPT, ZOPTWAVE, WAVE, SPC1) + NFAIL = NFAIL + CLOSURE ('zopt', 'wave', RESTWAV, + : ZOPTWAVE, WAVEZOPT, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('wave', 'awav', 0D0, + : WAVEAWAV, AWAVWAVE, WAVE, SPC1) + NFAIL = NFAIL + CLOSURE ('awav', 'wave', 0D0, + : AWAVWAVE, WAVEAWAV, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('wave', 'velo', RESTWAV, + : WAVEVELO, VELOWAVE, WAVE, SPC1) + NFAIL = NFAIL + CLOSURE ('velo', 'wave', RESTWAV, + : VELOWAVE, WAVEVELO, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('awav', 'velo', RESTWAV, + : AWAVVELO, VELOAWAV, AWAV, SPC1) + NFAIL = NFAIL + CLOSURE ('velo', 'awav', RESTWAV, + : VELOAWAV, AWAVVELO, SPC1, SPC2) + + NFAIL = NFAIL + CLOSURE ('velo', 'beta', 0D0, + : VELOBETA, BETAVELO, VELO, SPC1) + NFAIL = NFAIL + CLOSURE ('beta', 'velo', 0D0, + : BETAVELO, VELOBETA, SPC1, SPC2) + + + IF (NFAIL.NE.0) THEN + WRITE (*, 70) NFAIL + 70 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + ELSE + WRITE (*, 80) + 80 FORMAT (/,'PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + + END + +*======================================================================= + + INTEGER FUNCTION CLOSURE (FROM, TO, PARM, FWD, REV, SPEC1, SPEC2) + + INTEGER NSPEC + PARAMETER (NSPEC = 8001) + + LOGICAL SKIP + INTEGER J, NFAIL, STAT1(NSPEC), STAT2(NSPEC), STATUS + DOUBLE PRECISION CLOS(NSPEC), PARM, RESID, RESIDMAX, SPEC1(NSPEC), + : SPEC2(NSPEC), TOL + CHARACTER FROM*(*), TO*(*) + + PARAMETER (TOL = 1D-9) + + INTEGER FWD, REV + EXTERNAL FWD, REV + + SAVE SKIP + DATA SKIP/.FALSE./ +*----------------------------------------------------------------------- + +* Convert the first to the second. + STATUS = FWD(PARM, NSPEC, 1, 1, SPEC1, SPEC2, STAT1) + IF (STATUS.NE.0) THEN + WRITE (*, 10) FROM, TO, STATUS + 10 FORMAT (A,A,' ERROR',I2,'.') + END IF + +* Convert the second back to the first. + STATUS = REV(PARM, NSPEC, 1, 1, SPEC2, CLOS, STAT2) + IF (STATUS.NE.0) THEN + WRITE (*, 10) TO, FROM, STATUS + END IF + +* Test closure. + NFAIL = 0 + RESIDMAX = 0.0 + DO 50 J = 1, NSPEC + IF (STAT1(J).NE.0) THEN + IF (SKIP) WRITE (*, *) + WRITE (*, 20) FROM, TO, FROM, SPEC1(J), TO, STAT1(J) + 20 FORMAT (A,A,': ',A,' =',1PE19.12,' -> ',A, + : ' = ???, stat = ',I2) + SKIP = .FALSE. + GO TO 50 + END IF + + IF (STAT2(J).NE.0) THEN + IF (SKIP) WRITE (*, *) + WRITE (*, 30) TO, FROM, FROM, SPEC1(J), TO, SPEC2(J), FROM, + : STAT2(J) + 30 FORMAT (A,A,': ',A,' =',1PE19.12,' -> ',A,' =',1PE19.12, + : ' -> ',A,' = ???, stat = ',I2) + SKIP = .FALSE. + GO TO 50 + END IF + + IF (SPEC1(J).EQ.0.0) THEN + RESID = ABS(CLOS(J) - SPEC1(J)) + ELSE + RESID = ABS((CLOS(J) - SPEC1(J))/SPEC1(J)) + IF (RESID.GT.RESIDMAX) RESIDMAX = RESID + END IF + + IF (RESID.GT.TOL) THEN + NFAIL = NFAIL + 1 + IF (SKIP) WRITE (*, *) + WRITE (*, 40) FROM, TO, FROM, SPEC1(J), TO, SPEC2(J), FROM, + : CLOS(J), RESID + 40 FORMAT (A,A,': ',A,' =',1PE19.12,' -> ',A,' =',1PE19.12, + : ' ->',/,' ',A,' =',1PE19.12,', resid =', + : 1PE8.1) + SKIP = .FALSE. + END IF + 50 CONTINUE + + WRITE (*, 60) FROM, TO, RESIDMAX + 60 FORMAT (A,A,': Maximum closure residual =',1PE8.1) + IF (RESIDMAX.GT.TOL) THEN + WRITE (*, *) + SKIP = .FALSE. + ELSE + SKIP = .TRUE. + END IF + + CLOSURE = NFAIL + + END diff --git a/deps/wcslib/Fortran/test/ttab1.f b/deps/wcslib/Fortran/test/ttab1.f new file mode 100644 index 0000000..09f7df2 --- /dev/null +++ b/deps/wcslib/Fortran/test/ttab1.f @@ -0,0 +1,269 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: ttab1.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TTAB1 +*----------------------------------------------------------------------- +* +* TTAB1 tests the -TAB routines for closure. +* +*----------------------------------------------------------------------- + + DOUBLE PRECISION TOL + PARAMETER (TOL = 1D-8) + + INTEGER K1, K2, M + PARAMETER (M = 2, K1 = 32, K2 = 16) + + INTEGER K(2), MAP(2) + DOUBLE PRECISION CRVAL(2) + DATA K /K1, K2/ + DATA MAP /0, 1/ + DATA CRVAL /1D0, -1D0/ + + INTEGER I, IK, IK1, IK2, IM, J, N, NFAIL, STAT0(128), + : STAT1(128), STATUS + DOUBLE PRECISION CRPIX4, EPSILON, RESID, RESIDMAX, TIME(12), + : WORLD(M,11,11), XT0(12), XT1(12), X0(M,11,11), + : X1(M,11,11), Z + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'tab.inc' + INTEGER TAB(TABLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (TAB,DUMMY) +*----------------------------------------------------------------------- + + WRITE (*, 10) TOL + 10 FORMAT ('Testing closure of WCSLIB tabular coordinate routines ', + : '(ttab1.f)',/, + : '------------------------------------------------------', + : '---------',//, + : 'Reporting tolerance',1PG8.1,'.') + +* First a 1-dimensional table from Sect. 6.2.3 of Paper III. + WRITE (*, '(/,A)') 'One-dimensional test:' + STATUS = TABPTI (TAB, TAB_FLAG, -1, 0, 0) + STATUS = TABINI (M, K, TAB) + IF (STATUS.NE.0) THEN + WRITE (*, 20) STATUS + 20 FORMAT ('TABINI ERROR',I2,'.') + GO TO 999 + END IF + + STATUS = TABPTI (TAB, TAB_M, 1, 0, 0) + STATUS = TABPTI (TAB, TAB_K, 8, 1, 0) + STATUS = TABPTI (TAB, TAB_MAP, 0, 1, 0) + STATUS = TABPTD (TAB, TAB_CRVAL, 0D0, 1, 0) + + STATUS = TABPTD (TAB, TAB_INDEX, 0D0, 1, 1) + STATUS = TABPTD (TAB, TAB_INDEX, 1D0, 1, 2) + STATUS = TABPTD (TAB, TAB_INDEX, 1D0, 1, 3) + STATUS = TABPTD (TAB, TAB_INDEX, 2D0, 1, 4) + STATUS = TABPTD (TAB, TAB_INDEX, 2D0, 1, 5) + STATUS = TABPTD (TAB, TAB_INDEX, 3D0, 1, 6) + STATUS = TABPTD (TAB, TAB_INDEX, 3D0, 1, 7) + STATUS = TABPTD (TAB, TAB_INDEX, 4D0, 1, 8) + + STATUS = TABPTD (TAB, TAB_COORD, 1997.84512D0, 1, 0) + STATUS = TABPTD (TAB, TAB_COORD, 1997.84631D0, 2, 0) + STATUS = TABPTD (TAB, TAB_COORD, 1993.28451D0, 3, 0) + STATUS = TABPTD (TAB, TAB_COORD, 1993.28456D0, 4, 0) + STATUS = TABPTD (TAB, TAB_COORD, 2001.59234D0, 5, 0) + STATUS = TABPTD (TAB, TAB_COORD, 2001.59239D0, 6, 0) + STATUS = TABPTD (TAB, TAB_COORD, 2002.18265D0, 7, 0) + STATUS = TABPTD (TAB, TAB_COORD, 2002.18301D0, 8, 0) + + EPSILON = 1D-3 + CRPIX4 = 0.5 + XT0(1) = 0.5 + EPSILON - CRPIX4 + XT0(2) = 1.0 - CRPIX4 + XT0(3) = 1.5 - EPSILON - CRPIX4 + XT0(4) = 1.5 + EPSILON - CRPIX4 + XT0(5) = 2.0 - CRPIX4 + XT0(6) = 2.5 - EPSILON - CRPIX4 + XT0(7) = 2.5 + EPSILON - CRPIX4 + XT0(8) = 3.0 - CRPIX4 + XT0(9) = 3.5 - EPSILON - CRPIX4 + XT0(10) = 3.5 + EPSILON - CRPIX4 + XT0(11) = 4.0 - CRPIX4 + XT0(12) = 4.5 - EPSILON - CRPIX4 + + STATUS = TABX2S (TAB, 12, 1, XT0, TIME, STAT0) + IF (STATUS.NE.0) THEN + WRITE (*, 30) STATUS + 30 FORMAT ('TABX2S ERROR',I2,'.') + END IF + + STATUS = TABS2X (TAB, 12, 1, TIME, XT1, STAT1) + IF (STATUS.NE.0) THEN + WRITE (*, 40) STATUS + 40 FORMAT ('TABX2S ERROR',I2,'.') + END IF + + WRITE (*, 50) + 50 FORMAT (' x -> time -> x') + DO 70 I = 1, 12 + WRITE (*, 60) XT0(I), TIME(I), XT1(I) + 60 FORMAT (F8.5,F12.5,F9.5) + 70 CONTINUE + WRITE (*, '(/)') + +* Test closure. + NFAIL = 0 + RESIDMAX = 0D0 + DO 110 I = 1, 12 + IF (STAT0(I).NE.0) THEN + WRITE (*, 80) XT0(I), STAT0(I) + 80 FORMAT (' TABX2S: X =',F7.1,', STAT =',I2) + GO TO 110 + END IF + + IF (STAT1(I).NE.0) THEN + WRITE (*, 90) TIME(I), STAT1(I) + 90 FORMAT (' TABS2X: T =',F7.1,', STAT =',I2) + GO TO 110 + END IF + + RESID = ABS(XT1(I) - XT0(I)) + IF (RESID.GT.RESIDMAX) RESIDMAX = RESID + + IF (RESID.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 100) XT0(I), TIME(I), XT1(I) + 100 FORMAT (' Closure error:',/,' X = ',F20.15,/, + : ' -> T = ',F20.15,/,' -> X = ',F20.15) + END IF + 110 CONTINUE + + STATUS = TABFREE (TAB) + + +* Now a 2-dimensional table. + WRITE (*, '(A)') 'Two-dimensional test:' + STATUS = TABPTI (TAB, TAB_FLAG, -1, 0, 0) + STATUS = TABINI (M, K, TAB) + IF (STATUS.NE.0) THEN + WRITE (*, 120) STATUS + 120 FORMAT ('TABINI ERROR',I2,'.') + GO TO 999 + END IF + + STATUS = TABPTI (TAB, TAB_M, M, 0, 0) + DO 140 IM = 1, M + STATUS = TABPTI (TAB, TAB_K, K(IM), IM, 0) + STATUS = TABPTI (TAB, TAB_MAP, MAP(IM), IM, 0) + STATUS = TABPTD (TAB, TAB_CRVAL, CRVAL(IM), IM, 0) + + DO 130 IK = 1, K(IM) + STATUS = TABPTD (TAB, TAB_INDEX, DBLE(IK-1), IM, IK) + 130 CONTINUE + 140 CONTINUE + + N = 0 + Z = 1D0 / ((K1-1) * (K2-1)) + DO 160 IK2 = 0, K2-1 + DO 150 IK1 = 0, K1-1 + N = N + 1 + STATUS = TABPTD (TAB, TAB_COORD, 3D0*IK1*IK2*Z, N, 0) + N = N + 1 + STATUS = TABPTD (TAB, TAB_COORD, -1D0*(K1-IK1-1)*IK2*Z + + : 0.01*IK1, N, 0) + 150 CONTINUE + 160 CONTINUE + + DO 180 I = 1, 11 + DO 170 J = 1, 11 + X0(1,J,I) = (J-1)*(K1-1)/10D0 - CRVAL(1) + X0(2,J,I) = (I-1)*(K2-1)/10D0 - CRVAL(2) + 170 CONTINUE + 180 CONTINUE + + STATUS = TABX2S (TAB, 121, 2, X0, WORLD, STAT0) + IF (STATUS.NE.0) THEN + WRITE (*, 190) STATUS + 190 FORMAT ('TABX2S ERROR',I2,'.') + END IF + + STATUS = TABS2X (TAB, 121, 2, WORLD, X1, STAT1) + IF (STATUS.NE.0) THEN + WRITE (*, 200) STATUS + 200 FORMAT ('TABX2S ERROR',I2,'.') + END IF + +* Test closure. + N = 0 + RESIDMAX = 0D0 + DO 260 I = 1, 11 + DO 250 J = 1, 11 + N = N + 1 + IF (STAT0(N).NE.0) THEN + WRITE (*, 210) X0(1,J,I), X0(2,J,I), STAT0(N) + 210 FORMAT (' TABX2S: X = (',F6.1,',',F6.1,'), STAT =',I2) + GO TO 250 + END IF + + IF (STAT1(N).NE.0) THEN + WRITE (*, 220) WORLD(1,J,I), WORLD(2,J,I), STAT1(N) + 220 FORMAT (' TABS2X: S = (',F6.1,',',F6.1,'), STAT =',I2) + GO TO 250 + END IF + + DO 240 IM = 1, M + RESID = ABS(X1(IM,J,I) - X0(IM,J,I)) + IF (RESID.GT.RESIDMAX) RESIDMAX = RESID + + IF (RESID.GT.TOL) THEN + NFAIL = NFAIL + 1 + WRITE (*, 230) X0(1,J,I), X0(2,J,I), WORLD(1,J,I), + : WORLD(2,J,I), X1(1,J,I), X1(2,J,I) + 230 FORMAT (' Closure error:',/, + : ' X = (',F20.15,',',F20.15,')',/, + : ' -> W = (',F20.15,',',F20.15,')',/, + : ' -> X = (',F20.15,',',F20.15,')') + GO TO 250 + END IF + 240 CONTINUE + 250 CONTINUE + 260 CONTINUE + + WRITE (*, 270) RESIDMAX + 270 FORMAT (/,'TABX2S/TABS2X: Maximum closure residual =',1PE8.1) + + IF (NFAIL.NE.0) THEN + WRITE (*, 280) NFAIL + 280 FORMAT (/,'FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + ELSE + WRITE (*, 290) + 290 FORMAT (/,'PASS: All closure residuals are within reporting ', + : 'tolerance.') + END IF + + + 999 STATUS = TABFREE (TAB) + + END diff --git a/deps/wcslib/Fortran/test/ttab2.f b/deps/wcslib/Fortran/test/ttab2.f new file mode 100644 index 0000000..e80745a --- /dev/null +++ b/deps/wcslib/Fortran/test/ttab2.f @@ -0,0 +1,289 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: ttab2.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TTAB2 +*----------------------------------------------------------------------- +* +* TTAB2 tests the -TAB routines using PGPLOT for graphical display. It +* demonstrates the nature of linear interpolation in 2 dimensions by +* contouring the interior a single 2 x 2 interpolation element as the +* values in each corner change. +* +*----------------------------------------------------------------------- + +* Set up a 2 x 2 lookup table. + INTEGER K1, K2, M + PARAMETER (M = 2, K1 = 2, K2 = 2) + + INTEGER K(2), MAP(2) + DOUBLE PRECISION CRVAL(2) + DATA K /K1, K2/ + DATA MAP /0, 1/ + DATA CRVAL /0D0, 0D0/ + +* Number of subdivisions on each side of the interpolation element. + INTEGER NP + REAL SCL + PARAMETER (NP = 128) + PARAMETER (SCL = 2.0/(NP-1)) + + INTEGER I, IM, IK, J, L, L1, L2, L3, LSTEP, STAT(NP*NP), STATUS + REAL ARRAY(NP,NP), CLEV(-10:20), LTM(6), V0, V1, W + DOUBLE PRECISION X(M,NP,NP), WORLD(M,NP,NP) + CHARACTER TEXT*80 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'tab.inc' + INTEGER TAB(TABLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (TAB,DUMMY) +*----------------------------------------------------------------------- + + WRITE (*, 10) + 10 FORMAT ( + : 'Testing WCSLIB coordinate lookup table routines (ttab2.f)',/, + : '---------------------------------------------------------') + + +* PGPLOT initialization. + CALL PGBEG (0, '/xwindow', 1, 1) + CALL PGVSTD () + CALL PGSCH (0.7) + +* The viewport is slightly oversized. + CALL PGWNAD (-0.65, 1.65, -0.65, 1.65) + + DO 20 L = -10, 20 + CLEV(L) = 0.2*L + 20 CONTINUE + + LTM(1) = -SCL*(1.0 + (NP-1)/4.0) + LTM(2) = SCL + LTM(3) = 0.0 + LTM(4) = -SCL*(1.0 + (NP-1)/4.0) + LTM(5) = 0.0 + LTM(6) = SCL + + +* Set up the lookup table. + STATUS = TABPTI (TAB, TAB_FLAG, -1, 0, 0) + STATUS = TABINI(M, K, TAB) + IF (STATUS.NE.0) THEN + WRITE (*, 30) STATUS + 30 FORMAT ('TABINI ERROR',I2,'.') + GO TO 999 + END IF + + STATUS = TABPTI (TAB, TAB_M, M, 0, 0) + DO 50 IM = 1, M + STATUS = TABPTI (TAB, TAB_K, K(IM), IM, 0) + STATUS = TABPTI (TAB, TAB_MAP, MAP(IM), IM, 0) + STATUS = TABPTD (TAB, TAB_CRVAL, CRVAL(IM), IM, 0) + + DO 40 IK = 1, K(IM) + STATUS = TABPTD (TAB, TAB_INDEX, DBLE(IK-1), IM, IK) + 40 CONTINUE + 50 CONTINUE + +* Subdivide the interpolation element. + DO 70 I = 1, NP + DO 60 J = 1, NP + X(1,J,I) = (J-1)*(K1-1.0)*SCL - 0.5 - CRVAL(1) + X(2,J,I) = (I-1)*(K2-1.0)*SCL - 0.5 - CRVAL(2) + 60 CONTINUE + 70 CONTINUE + +* The first coordinate element is static. + STATUS = TABPTD (TAB, TAB_COORD, 0D0, 1, 0) + STATUS = TABPTD (TAB, TAB_COORD, 0D0, 3, 0) + STATUS = TABPTD (TAB, TAB_COORD, 0D0, 5, 0) + STATUS = TABPTD (TAB, TAB_COORD, 0D0, 7, 0) + +* (k1,k2) = (1,1). + STATUS = TABPTD (TAB, TAB_COORD, 0D0, 2, 0) + +* The second coordinate element varies in three of the corners. + DO 170 L3 = 0, 100, 20 +* (k1,k2) = (2,2). + STATUS = TABPTD (TAB, TAB_COORD, 0.01D0*L3, 8, 0) + + DO 160 L2 = 0, 100, 20 +* (k1,k2) = (1,2). + STATUS = TABPTD (TAB, TAB_COORD, 0.01D0*L2, 6, 0) + + CALL PGPAGE () + DO 150 L1 = 0, 100, 2 +* (k1,k2) = (2,1). + STATUS = TABPTD (TAB, TAB_COORD, 0.01D0*L1, 4, 0) + +* Compute coordinates within the interpolation element. + STATUS = TABX2S (TAB, NP*NP, 2, X, WORLD, STAT) + IF (STATUS.NE.0) THEN + WRITE (*, 80) STATUS + 80 FORMAT ('TABX2S ERROR',I2,'.') + END IF + +* Start a new plot. + CALL PGBBUF () + CALL PGERAS () + CALL PGSCI (1) + CALL PGSLW (3) + CALL PGBOX ('BCNST', 0.0, 0, 'BCNSTV', 0.0, 0) + CALL PGMTXT ('T', 0.7, 0.5, 0.5, '-TAB coordinates: ' // + : 'linear interpolation / extrapolation in 2-D') + +* Draw the boundary of the interpolation element in red. + CALL PGSCI (2) + CALL PGMOVE (-0.5, 0.0) + CALL PGDRAW ( 1.5, 0.0) + + CALL PGMOVE ( 1.0, -0.5) + CALL PGDRAW ( 1.0, 1.5) + + CALL PGMOVE ( 1.5, 1.0) + CALL PGDRAW (-0.5, 1.0) + + CALL PGMOVE ( 0.0, 1.5) + CALL PGDRAW ( 0.0, -0.5) + +* Label the value of the coordinate element in each corner. + WRITE (TEXT, '(F3.1)') 0.0 + CALL PGTEXT (-0.09, -0.05, TEXT) + WRITE (TEXT, '(F4.2)') 0.01*L1 + CALL PGTEXT ( 1.02, -0.05, TEXT) + WRITE (TEXT, '(F3.1)') 0.01*L2 + CALL PGTEXT (-0.13, 1.02, TEXT) + WRITE (TEXT, '(F3.1)') 0.01*L3 + CALL PGTEXT ( 1.02, 1.02, TEXT) + + CALL PGSCI (1) + +* Contour labelling: bottom. + V0 = REAL(WORLD(2,1,1)) + V1 = REAL(WORLD(2,NP,1)) + IF (V0.NE.V1) THEN + IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN + LSTEP = 20 + ELSE + LSTEP = 40 + END IF + + DO 90 L = -200, 300, LSTEP + W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) + IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 90 + + WRITE (TEXT, '(F4.1)') L*0.01 + CALL PGPTXT (W+0.04, -0.56, 0.0, 1.0, TEXT) + 90 CONTINUE + END IF + +* Contour labelling: left. + V0 = REAL(WORLD(2,1,1)) + V1 = REAL(WORLD(2,1,NP)) + IF (V0.NE.V1) THEN + IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN + LSTEP = 20 + ELSE + LSTEP = 40 + END IF + + DO 100 L = -200, 300, LSTEP + W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) + IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 100 + + WRITE (TEXT, '(F4.1)') L*0.01 + CALL PGPTXT (-0.52, W-0.02, 0.0, 1.0, TEXT) + 100 CONTINUE + END IF + +* Contour labelling: right. + V0 = REAL(WORLD(2,NP,1)) + V1 = REAL(WORLD(2,NP,NP)) + IF (V0.NE.V1) THEN + IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN + LSTEP = 20 + ELSE + LSTEP = 40 + END IF + + DO 110 L = -200, 300, LSTEP + W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) + IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 110 + + WRITE (TEXT, '(F3.1)') L*0.01 + CALL PGPTXT (1.52, W-0.02, 0.0, 0.0, TEXT) + 110 CONTINUE + END IF + +* Contour labelling: top. + V0 = REAL(WORLD(2,1,NP)) + V1 = REAL(WORLD(2,NP,NP)) + IF (V0.NE.V1) THEN + IF (ABS(INT((V1-V0)/0.2)).LT.10) THEN + LSTEP = 20 + ELSE + LSTEP = 40 + END IF + + DO 120 L = -200, 300, LSTEP + W = -0.5 + 2.0*(L*0.01 - V0)/(V1 - V0) + IF (W.LT.-0.5 .OR. W.GT.1.5) GO TO 120 + + WRITE (TEXT, '(F3.1)') L*0.01 + CALL PGPTXT (W+0.04, 1.52, 0.0, 1.0, TEXT) + 120 CONTINUE + END IF + +* Draw contours for the second coordinate element. + DO 140 I = 1, NP + DO 130 J = 1, NP + ARRAY(J,I) = REAL(WORLD(2,J,I)) + 130 CONTINUE + 140 CONTINUE + + CALL PGSLW (2) + + CALL PGSCI (4) + CALL PGCONT (ARRAY, NP, NP, 1, NP, 1, NP, CLEV(-10), 10, + : LTM) + + CALL PGSCI (7) + CALL PGCONT (ARRAY, NP, NP, 1, NP, 1, NP, CLEV(0), 1, LTM) + + CALL PGSCI (5) + CALL PGCONT (ARRAY, NP, NP, 1, NP, 1, NP, CLEV(1), 20, LTM) + + CALL PGEBUF () + 150 CONTINUE + 160 CONTINUE + 170 CONTINUE + + CALL PGEND () + + 999 STATUS = TABFREE (TAB) + + END diff --git a/deps/wcslib/Fortran/test/ttab3.f b/deps/wcslib/Fortran/test/ttab3.f new file mode 100644 index 0000000..7f6f263 --- /dev/null +++ b/deps/wcslib/Fortran/test/ttab3.f @@ -0,0 +1,216 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: ttab3.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TTAB3 +*----------------------------------------------------------------------- +* +* TTAB3 tests the -TAB routines using PGPLOT for graphical display. It +* constructs a table that approximates Bonne's projection and uses it to +* draw a graticule. +* +*----------------------------------------------------------------------- + +* Set up the lookup table. + INTEGER K1, K2, M + PARAMETER (M = 2, K1 = 271, K2 = 235) + + INTEGER K(M), MAP(M) + DOUBLE PRECISION CRVAL(M) + DATA K /K1, K2/ + DATA MAP /0, 1/ + DATA CRVAL /135D0, 95D0/ + + INTEGER CI, I, IK, ILAT, ILNG, IM, J, STAT(K1,K2), STATUS + REAL XR(361), YR(361) + DOUBLE PRECISION COORD(M,K1,K2), WORLD(M,361), X(K1), XY(M,361), + : Y(K2) + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary, done here using equivalences. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'prj.inc' + INCLUDE 'tab.inc' + INTEGER PRJ(PRJLEN), TAB(TABLEN) + DOUBLE PRECISION DUMMY1, DUMMY2 + EQUIVALENCE (PRJ,DUMMY1), (TAB,DUMMY2) +*----------------------------------------------------------------------- + + WRITE (*, 10) + 10 FORMAT ('Testing WCSLIB inverse coordinate lookup table ', + : 'routines (ttab3.f)',/, + : '-----------------------------------------------', + : '------------------',/) + + +* PGPLOT initialization. + CALL PGBEG (0, '/xwindow', 1, 1) + CALL PGVSTD () + CALL PGSCH (0.7) + CALL PGWNAD (-135.0, 135.0, -95.0, 140.0) + CALL PGBOX ('BC', 0.0, 0, 'BC', 0.0, 0) + + CALL PGSCR (0, 0.00, 0.00, 0.00) + CALL PGSCR (1, 1.00, 1.00, 0.00) + CALL PGSCR (2, 1.00, 1.00, 1.00) + CALL PGSCR (3, 0.50, 0.50, 0.80) + CALL PGSCR (4, 0.80, 0.50, 0.50) + CALL PGSCR (5, 0.80, 0.80, 0.80) + CALL PGSCR (6, 0.50, 0.50, 0.80) + CALL PGSCR (7, 0.80, 0.50, 0.50) + CALL PGSCR (8, 0.30, 0.50, 0.30) + + +* Set up the lookup table. + STATUS = TABPTI (TAB, TAB_FLAG, -1, 0, 0) + STATUS = TABINI(M, K, TAB) + IF (STATUS.NE.0) THEN + WRITE (*, 20) STATUS + 20 FORMAT ('TABINI ERROR',I2,'.') + GO TO 999 + END IF + + STATUS = TABPTI (TAB, TAB_M, M, 0, 0) + DO 40 IM = 1, M + STATUS = TABPTI (TAB, TAB_K, K(IM), IM, 0) + STATUS = TABPTI (TAB, TAB_MAP, MAP(IM), IM, 0) + STATUS = TABPTD (TAB, TAB_CRVAL, CRVAL(IM), IM, 0) + + DO 30 IK = 1, K(IM) + STATUS = TABPTD (TAB, TAB_INDEX, DBLE(IK-1), IM, IK) + 30 CONTINUE + 40 CONTINUE + +* Set up the lookup table to approximate Bonne's projection. + DO 50 I = 1, K1 + X(I) = 136 - I + 50 CONTINUE + DO 60 J = 1, K2 + Y(J) = J - 96 + 60 CONTINUE + + STATUS = PRJINI (PRJ) + STATUS = PRJPTD (PRJ, PRJ_PV, 35D0, 1) + +* Disable bounds checking (or alternatively, simply ignore +* out-of-bounds errors). This is necessary to provide continuity +* beyond the -180 and +180 meridians, noting that bonx2s() computes +* out-of-bounds values so as to provide continuity. + STATUS = PRJPTI (PRJ, PRJ_BOUNDS, 0, 0) + + STATUS = BONX2S (PRJ, K1, K2, 1, 2, X, Y, COORD(1,1,1), + : COORD(2,1,1), STAT) + + IK = 1 + DO 80 J = 1, K2 + DO 70 I = 1, K1 + STATUS = TABPTD (TAB, TAB_COORD, COORD(1,I,J), IK, 0) + STATUS = TABPTD (TAB, TAB_COORD, COORD(2,I,J), IK+1, 0) + IK = IK + 2 + 70 CONTINUE + 80 CONTINUE + + +* Draw meridians. + CI = 1 + DO 110 ILNG = -180, 180, 15 + CI = CI + 1 + IF (CI.GT.7) CI = 2 + IF (ILNG.NE.0) THEN + CALL PGSCI (CI) + ELSE + CALL PGSCI (1) + END IF + + J = 0 + DO 90 ILAT = -90, 90 + J = J + 1 + WORLD(1,J) = DBLE(ILNG) + WORLD(2,J) = DBLE(ILAT) + 90 CONTINUE + +* A fudge to account for the singularity at the poles. + WORLD(1,1) = 0D0 + WORLD(1,181) = 0D0 + + STATUS = TABS2X (TAB, 181, 2, WORLD, XY, STAT) + + IK = 0 + DO 100 J = 1, 181 + IF (STAT(J,1).NE.0) THEN + IF (IK.GT.1) CALL PGLINE (IK, XR, YR) + IK = 0 + GO TO 100 + END IF + + IK = IK + 1 + XR(IK) = REAL(XY(1,J)) + YR(IK) = REAL(XY(2,J)) + 100 CONTINUE + + CALL PGLINE (IK, XR, YR) + 110 CONTINUE + + +* Draw parallels. + CI = 1 + DO 140 ILAT = -75, 75, 15 + CI = CI + 1 + IF (CI.GT.7) CI = 2 + IF (ILAT.NE.0) THEN + CALL PGSCI (CI) + ELSE + CALL PGSCI (1) + END IF + + J = 0 + DO 120 ILNG = -180, 180 + J = J + 1 + WORLD(1,J) = DBLE(ILNG) + WORLD(2,J) = DBLE(ILAT) + 120 CONTINUE + + STATUS = TABS2X (TAB, 361, 2, WORLD, XY, STAT) + + IK = 0 + DO 130 J = 1, 361 + IF (STAT(J,1).NE.0) THEN + IF (IK.GT.1) CALL PGLINE (IK, XR, YR) + IK = 0 + GO TO 130 + END IF + + IK = IK + 1 + XR(IK) = REAL(XY(1,J)) + YR(IK) = REAL(XY(2,J)) + 130 CONTINUE + + CALL PGLINE (IK, XR, YR) + 140 CONTINUE + + CALL PGEND () + + 999 STATUS = TABFREE (TAB) + + END diff --git a/deps/wcslib/Fortran/test/tunits.f b/deps/wcslib/Fortran/test/tunits.f new file mode 100644 index 0000000..4aa3ea7 --- /dev/null +++ b/deps/wcslib/Fortran/test/tunits.f @@ -0,0 +1,157 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: tunits.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TUNITS +*----------------------------------------------------------------------- +* +* TUNITS tests WCSULEX, WCSUTRN, and WCSUNITS the FITS units +* specification parser, translator and converter. +* +*----------------------------------------------------------------------- + + INCLUDE 'wcsunits.inc' + + LOGICAL INTRCT + INTEGER FUNC, I, NC, STATUS + DOUBLE PRECISION OFFSET, POWER, SCALE, UNITS(WCSUNITS_NTYPE) + CHARACTER HAVE*80, WANT*80 +*----------------------------------------------------------------------- + + INTRCT = ISATTY(5) + + WRITE (*, 10) + 10 FORMAT ('Testing FITS unit specification parser (tunits.f)',/, + : '-------------------------------------------------') + IF (INTRCT) WRITE (*, 20) + 20 FORMAT (/,'To test WCSULEX, enter when prompted with "Unit ', + : 'string (want):".') + + 30 CONTINUE + IF (INTRCT) WRITE (*, '(/,A,$)') 'Unit string (have): ' + READ (*, '(A)', END=999) HAVE + NC = LNBLNK(HAVE) + IF (.NOT.INTRCT) WRITE (*, 40) HAVE(:NC) + 40 FORMAT (/,'Unit string (have): ',A) + + STATUS = WCSUTRN(7, HAVE) + IF (STATUS.GE.0) THEN + NC = LNBLNK(HAVE) + WRITE (*, 50) HAVE(:NC) + 50 FORMAT (' Translation: ',A,$) + IF (STATUS.EQ.0) THEN + WRITE (*, '()') + ELSE + NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) + WRITE (*, 60) WCSUNITS_ERRMSG(STATUS)(:NC) + 60 FORMAT (' (WARNING: ',A,')') + END IF + END IF + + IF (INTRCT) WRITE (*, '(A,$)') 'Unit string (want): ' + READ (*, '(A)', END=999) WANT + + IF (WANT.NE.' ') THEN + NC = LNBLNK(WANT) + IF (.NOT.INTRCT) WRITE (*, 70) WANT(:NC) + 70 FORMAT ('Unit string (want): ',A) + + STATUS = WCSUTRN(7, WANT) + IF (STATUS.GE.0) THEN + NC = LNBLNK(WANT) + WRITE (*, 50) WANT(:NC) + IF (STATUS.EQ.0) THEN + WRITE (*, '()') + ELSE + NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) + WRITE (*, 60) WCSUNITS_ERRMSG(STATUS)(:NC) + END IF + END IF + + WRITE (*, 80) HAVE(:LNBLNK(HAVE)), WANT(:LNBLNK(WANT)) + 80 FORMAT ('Conversion: "',A,'" -> "',A,'"') + + STATUS = WCSUNITS (HAVE, WANT, SCALE, OFFSET, POWER) + IF (STATUS.NE.0) THEN + NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) + WRITE (*, 90) STATUS, WCSUNITS_ERRMSG(STATUS)(:NC) + 90 FORMAT ('WCSUNITS ERROR',I3,': ',A) + GO TO 30 + END IF + + IF (POWER.EQ.1D0) THEN + WRITE (*, '(A,$)') ' = ' + ELSE + WRITE (*, '(A,$)') ' = (' + END IF + + IF (SCALE.EQ.1.0) THEN + WRITE (*, '(A,$)') 'value' + ELSE + WRITE (*, '(1PG14.8,A,$)') SCALE, ' * value' + END IF + + IF (OFFSET.NE.0D0) THEN + WRITE (*, '(A,1PG14.8,$)') ' + ', OFFSET + END IF + + IF (POWER.EQ.1D0) THEN + WRITE (*, '()') + ELSE + WRITE (*, '(A,1PG12.6)') ')^', POWER + END IF + + ELSE +* Parse the unit string. + NC = LNBLNK(HAVE) + WRITE (*, '(A,A,A)') ' Parsing: "', HAVE(:NC), '"' + + STATUS = WCSULEX (HAVE, FUNC, SCALE, UNITS) + IF (STATUS.NE.0) THEN + NC = LNBLNK(WCSUNITS_ERRMSG(STATUS)) + WRITE (*, 100) STATUS, WCSUNITS_ERRMSG(STATUS)(:NC) + 100 FORMAT ('WCSULEX ERROR',I3,': ',A,'.') + GO TO 30 + END IF + + WRITE (*, '(1PG15.8,A)') SCALE, ' *' + DO 110 I = 1, WCSUNITS_NTYPE + IF (UNITS(I).NE.0.0) THEN + NC = LNBLNK(WCSUNITS_TYPES(I)) + WRITE (*, '(F11.2,X,A,$)') UNITS(I), + : WCSUNITS_TYPES(I)(:NC) + IF (WCSUNITS_UNITS(I).NE.' ') THEN + NC = LNBLNK(WCSUNITS_UNITS(I)) + WRITE (*, '(A,A,A)') ' (', WCSUNITS_UNITS(I)(:NC),')' + ELSE + WRITE (*, '()') + END IF + END IF + 110 CONTINUE + END IF + GO TO 30 + + 999 WRITE (*, '()') + + END diff --git a/deps/wcslib/Fortran/test/tunits.out b/deps/wcslib/Fortran/test/tunits.out new file mode 100644 index 0000000..b54f460 --- /dev/null +++ b/deps/wcslib/Fortran/test/tunits.out @@ -0,0 +1,72 @@ +Testing FITS unit specification parser (tunits.f) +------------------------------------------------- + +Unit string (have): km/h +Unit string (want): m/ms +Conversion: "km/h" -> "m/ms" + = 2.77777778E-04 * value + +Unit string (have): JY/BEAM + Translation: Jy/beam +Unit string (want): (kg/s^2)/beam +Conversion: "Jy/beam" -> "(kg/s^2)/beam" + = 1.00000000E-26 * value + +Unit string (have): KM/SEC + Translation: km/s +Unit string (want): m/s +Conversion: "km/s" -> "m/s" + = 1000.0000 * value + +Unit string (have): KM/H + Translation: km/h (WARNING: Potentially unsafe translation) +Unit string (want): M/S + Translation: m/s (WARNING: Potentially unsafe translation) +Conversion: "km/h" -> "m/s" + = 0.27777778 * value + +Unit string (have): log(MHZ) + Translation: log(MHz) +Unit string (want): ln(/s) +Conversion: "log(MHz)" -> "ln(/s)" + = 2.3025851 * value + 13.815511 + +Unit string (have): DEG + Translation: deg + Parsing: "deg" + 1.0000000 * + 1.00 plane angle (degree) + +Unit string (have): ARCMINS + Translation: arcmin + Parsing: "arcmin" + 1.66666667E-02 * + 1.00 plane angle (degree) + +Unit string (have): ARCSEC + Translation: arcsec + Parsing: "arcsec" + 2.77777778E-04 * + 1.00 plane angle (degree) + +Unit string (have): sqrt(HZ^2) + Translation: sqrt(Hz^2) + Parsing: "sqrt(Hz^2)" + 1.0000000 * + -1.00 time (second) + +Unit string (have): Jy + Parsing: "Jy" + 1.00000000E-26 * + 1.00 mass (kilogram) + -2.00 time (second) + +Unit string (have): Volts + Translation: V + Parsing: "V" + 1.0000000 * + -1.00 charge (Coulomb) + 1.00 mass (kilogram) + 1.00 length (metre) + -2.00 time (second) + diff --git a/deps/wcslib/Fortran/test/twcs.f b/deps/wcslib/Fortran/test/twcs.f new file mode 100644 index 0000000..2bfbafd --- /dev/null +++ b/deps/wcslib/Fortran/test/twcs.f @@ -0,0 +1,486 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: twcs.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TWCS +*----------------------------------------------------------------------- +* +* TWCS1 tests WCSS2P and WCSP2S for closure on an oblique 2-D slice +* through a 4-D image with celestial, spectral and logarithmic +* coordinate axes. +* +*----------------------------------------------------------------------- + INCLUDE 'cel.inc' + INCLUDE 'prj.inc' + INCLUDE 'wcs.inc' + INCLUDE 'wcserr.inc' + INCLUDE 'wcsmath.inc' + + DOUBLE PRECISION TOL + PARAMETER (TOL = 1D-10) + + INTEGER NELEM + PARAMETER (NELEM = 9) + + LOGICAL PASSED + INTEGER CHECK_ERROR, ETEST, I, J, K, LAT, LATIDX, LNG, LNGIDX, + : NFAIL(0:3), SPCIDX, STAT(0:360), STATUS, TEST_ERRORS + DOUBLE PRECISION FREQ, IMG(NELEM,0:360), LAT1, LNG1, PHI(0:360), + : PIXEL1(NELEM,0:360), PIXEL2(NELEM,0:360), R, RESID, + : RESMAX, THETA(0:360), TIME, WORLD1(NELEM,0:360), + : WORLD2(NELEM,0:360) + CHARACTER VERS*8 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INTEGER WCS(WCSLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (WCS,DUMMY) + +* Number of axes. + INTEGER N + PARAMETER (N = 4) + +* WCS header parameters. + INTEGER NAXIS, NPV, PVI(3), PVM(3) + DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, + : PC(N,N), PV(3), RESTFRQ, RESTWAV + CHARACTER CTYPE(N)*72 + + COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, + : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV + COMMON /HEADCH/ CTYPE + + DATA NAXIS /N/ + DATA (CRPIX(J), J=1,N) + : /513D0, 0D0, 0D0, 0D0/ + DATA ((PC(I,J),J=1,N),I=1,N) + : /1.1D0, 0D0, 0D0, 0D0, + : 0D0, 1.0D0, 0D0, 0.1D0, + : 0D0, 0D0, 1.0D0, 0D0, + : 0D0, 0.2D0, 0D0, 1.0D0/ + DATA (CDELT(I), I=1,N) + : /-9.635265432D-6, 1D0, 0.1D0, -1D0/ + DATA (CTYPE(I), I=1,N) + : /'WAVE-F2W', 'XLAT-BON', 'TIME-LOG', 'XLON-BON'/ + DATA (CRVAL(I), I=1,N) + : /0.214982042D0, -30D0, 1D0, 150D0/ + DATA LONPOLE /150D0/ + DATA LATPOLE /999D0/ + DATA RESTFRQ /1.42040575D9/ + DATA RESTWAV /0D0/ + +* Set PVi_m keyvalues for the longitude axis (I = 4). For test +* purposes, these are set so that the fiducial native coordinates +* are at the native pole, i.e. so that (phi0,theta0) = (0,90), but +* without any fiducial offset, i.e. iwith PVi_0a == 0 (by default). + DATA NPV /3/ + DATA (PVI(K), PVM(K), PV(K), K=1,2) + : /4, 1, 0D0, + : 4, 2, 90D0/ + +* PVi_m keyvalues for the latitude axis (I = 2). + DATA PVI(3), PVM(3), PV(3) + : /2, 1, -30D0/ + + +* For the wcserr tests. + COMMON /ERRTST/ ETEST + DATA ETEST /0/ +*----------------------------------------------------------------------- + CALL WCSLIB_VERSION (VERS, 8) + WRITE (*, 10) VERS + 10 FORMAT ('WCSLIB version number: ',A,/) + + WRITE (*, 20) + 20 FORMAT ('Testing closure of WCSLIB world coordinate ', + : 'transformation routines (twcs.f)',/, + : '-------------------------------------------', + : '--------------------------------',/) + + +* This routine simulates the actions of a FITS header parser. + STATUS = WCSPTI (WCS, WCS_FLAG, -1, 0, 0) + CALL PARSER (WCS) + +* Test WCSENQ - note that the struct is unset. + NFAIL(0) = 0 + IF (WCSENQ(WCS, WCSENQ_MEM).EQ.0) THEN + NFAIL(0) = 1 + WRITE (*, 30) + 30 FORMAT ('Unexpected result from WCSENQ: memory.') + END IF + +* Put the struct in bypass mode (as a test). + STATUS = WCSPTI (WCS, WCS_FLAG, 1, 0, 0) + STATUS = WCSSET (WCS) + IF (STATUS.NE.0) THEN + WRITE (*, 40) STATUS + 40 FORMAT ('WCSSET ERROR',I3) + END IF + +* Test WCSENQ. + IF (WCSENQ(WCS, WCSENQ_SET + WCSENQ_BYP).EQ.0) THEN + NFAIL(0) = NFAIL(0) + 1 + WRITE (*, 50) + 50 FORMAT ('Unexpected result from WCSENQ: set and bypass.') + END IF + + IF (WCSENQ(WCS, WCSENQ_CHK).EQ.0) THEN + NFAIL(0) = NFAIL(0) + 1 + WRITE (*, 60) 'a' + 60 FORMAT ('Unexpected result from WCSENQ: checksum (',A,').') + END IF + +* Further test for WCSENQ - an inconsequential change. + STATUS = WCSPTD (WCS, WCS_LATPOLE, 999.001D0, 0, 0) + IF (WCSENQ(WCS, WCSENQ_CHK).EQ.1) THEN + NFAIL(0) = NFAIL(0) + 1 + WRITE (*, 60) 'b' + END IF + + + IF (NFAIL(0).GT.0) WRITE (*, '()') + WRITE (*, 70) TOL + 70 FORMAT ('Reporting tolerance',1PG8.1,' pixel.') + +* Get indices. + STATUS = WCSGTI (WCS, WCS_LNG, LNGIDX) + STATUS = WCSGTI (WCS, WCS_LAT, LATIDX) + STATUS = WCSGTI (WCS, WCS_SPEC, SPCIDX) + +* Initialize non-celestial world coordinates. + TIME = 1D0 + FREQ = 1.42040595D9 - 180D0 * 62500D0 + DO 80 K = 0, 360 + WORLD1(1,K) = 0D0 + WORLD1(2,K) = 0D0 + WORLD1(3,K) = 0D0 + WORLD1(4,K) = 0D0 + + WORLD1(3,K) = TIME + TIME = 1.01D0 * TIME + + WORLD1(SPCIDX,K) = 2.99792458D8 / FREQ + FREQ = FREQ + 62500D0 + 80 CONTINUE + + NFAIL(1) = 0 + RESMAX = 0D0 + DO 160 LAT = 90, -90, -1 + LAT1 = DBLE(LAT) + + K = 0 + DO 90 LNG = -180, 180 + LNG1 = DBLE(LNG) + + WORLD1(LNGIDX,K) = LNG1 + WORLD1(LATIDX,K) = LAT1 + K = K + 1 + 90 CONTINUE + + STATUS = WCSS2P (WCS, 361, NELEM, WORLD1, PHI, THETA, IMG, + : PIXEL1, STAT) + IF (STATUS.NE.0) THEN + WRITE (*, 100) STATUS, LAT1 + 100 FORMAT (3X,'WCSS2P(1) ERROR',I3,' (LAT1 =',F20.15, ')') + GO TO 160 + END IF + + STATUS = WCSP2S (WCS, 361, NELEM, PIXEL1, IMG, PHI, THETA, + : WORLD2, STAT) + IF (STATUS.NE.0) THEN + WRITE (*, 110) STATUS, LAT1 + 110 FORMAT (3X,'WCSP2S ERROR',I3,' (LAT1 =',F20.15, ')') + GO TO 160 + END IF + + STATUS = WCSS2P (WCS, 361, NELEM, WORLD2, PHI, THETA, IMG, + : PIXEL2, STAT) + IF (STATUS.NE.0) THEN + WRITE (*, 120) STATUS, LAT1 + 120 FORMAT (3X,'WCSS2P(2) ERROR',I3,' (LAT1 =',F20.15, ')') + GO TO 160 + END IF + + DO 150 K = 0, 360 + RESID = 0D0 + DO 130 I = 1, NAXIS + R = PIXEL2(I,K) - PIXEL1(I,K) + RESID = RESID + R*R + 130 CONTINUE + + RESID = SQRT(RESID) + IF (RESID.GT.RESMAX) RESMAX = RESID + + IF (RESID.GT.TOL) THEN + NFAIL(1) = NFAIL(1) + 1 + WRITE (*, 140) (WORLD1(I,K), I=1,NAXIS), + : (PIXEL1(I,K), I=1,NAXIS), + : (WORLD2(I,K), I=1,NAXIS), + : (PIXEL2(I,K), I=1,NAXIS) + 140 FORMAT (/,'Closure error:',/, + : 'world1:',4F18.12,/, + : 'pixel1:',4F18.12,/, + : 'world2:',4F18.12,/, + : 'pixel2:',4F18.12) + END IF + + LNG1 = LNG1 + 1D0 + 150 CONTINUE + 160 CONTINUE + + WRITE (*, 170) RESMAX + 170 FORMAT ('WCSP2S/WCSS2P: Maximum closure residual =',1P,G8.1, + : ' pixel.') + + +* Test WCSERR. + WRITE (*, 180) + 180 FORMAT (/,'IGNORE messages marked with ''OK'', they test ', + : 'WCSERR: ') + + STATUS = WCSERR_ENABLE(1) + +* Test 1 - take it out of bypass mode, so now WCSSET should fail. + STATUS = WCSPTD (WCS, WCS_PV, UNDEFINED, PVI(3), PVM(3)) + STATUS = WCSPTI (WCS, WCS_FLAG, 0, 0, 0) + STATUS = WCSSET (WCS) + NFAIL(3) = CHECK_ERROR (WCS, STATUS, WCSERR_BAD_PARAM, + : 'Invalid parameter value') + + NFAIL(3) = NFAIL(3) + TEST_ERRORS() + + WRITE (*, '()') + + PASSED = .TRUE. + IF (NFAIL(0).NE.0) THEN + PASSED = .FALSE. + WRITE (*, 190) + 190 FORMAT ('FAIL: Unexpected result from WCSENQ.') + END IF + + IF (NFAIL(1).NE.0) THEN + PASSED = .FALSE. + WRITE (*, 200) NFAIL(1) + 200 FORMAT ('FAIL:',I5,' closure residuals exceed reporting ', + : 'tolerance.') + END IF + + IF (NFAIL(3).NE.0) THEN + PASSED = .FALSE. + WRITE (*, 210) NFAIL(3) + 210 FORMAT ('FAIL:',I5,' error messages differ from that ', + : 'expected.') + END IF + + IF (PASSED) THEN + WRITE (*, 220) + 220 FORMAT ( + : 'PASS: All enquiry results returned as expected',/, + : 'PASS: All closure residuals are within reporting ', + : 'tolerance.',/, + : 'PASS: All error messages reported as expected.') + END IF + + +* Clean up. + STATUS = WCSFREE(WCS) + + END + +*----------------------------------------------------------------------- + SUBROUTINE PARSER (WCS) +*----------------------------------------------------------------------- +* In practice a parser would read the FITS header until it encountered +* the NAXIS keyword which must occur near the start, before any of the +* WCS keywords. It would then use WCSINI to allocate memory for arrays +* in the WCSPRM "data structure" and set default values. +* +* In this simulation the header keyvalues are set in the main program in +* variables passed in COMMON. +*----------------------------------------------------------------------- +* Number of axes. + INTEGER N + PARAMETER (N = 4) + + INTEGER I, J, K, NAXIS, NPV, PVI(3), PVM(3), STATUS, WCS(*) + DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, + : PC(N,N), PV(3), RESTFRQ, RESTWAV + CHARACTER CTYPE(N)*72 + + INCLUDE 'wcs.inc' + + COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, + : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV + COMMON /HEADCH/ CTYPE +*----------------------------------------------------------------------- + STATUS = WCSINI (NAXIS, WCS) + + DO 20 I = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_CRPIX, CRPIX(I), I, 0) + + DO 10 J = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_PC, PC(I,J), I, J) + 10 CONTINUE + + STATUS = WCSPTD (WCS, WCS_CDELT, CDELT(I), I, 0) + STATUS = WCSPTC (WCS, WCS_CTYPE, CTYPE(I), I, 0) + STATUS = WCSPTD (WCS, WCS_CRVAL, CRVAL(I), I, 0) + 20 CONTINUE + + STATUS = WCSPTD (WCS, WCS_LONPOLE, LONPOLE, 0, 0) + STATUS = WCSPTD (WCS, WCS_LATPOLE, LATPOLE, 0, 0) + + STATUS = WCSPTD (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) + STATUS = WCSPTD (WCS, WCS_RESTWAV, RESTWAV, 0, 0) + + DO 30 K = 1, NPV + STATUS = WCSPTD (WCS, WCS_PV, PV(K), PVI(K), PVM(K)) + 30 CONTINUE + + END + +*----------------------------------------------------------------------- + INTEGER FUNCTION TEST_ERRORS() +*----------------------------------------------------------------------- + CHARACTER NULL*1 + PARAMETER (NULL = CHAR(0)) + + INTEGER CHECK_ERROR, ETEST, NFAIL, STATUS + CHARACTER CTYPE*72 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcs.inc' + INTEGER WCS(WCSLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (WCS,DUMMY) + + COMMON /ERRTST/ ETEST +*----------------------------------------------------------------------- + NFAIL = 0 + +* Test 2. + STATUS = WCSPTI (WCS, WCS_FLAG, -1, 0, 0) + STATUS = WCSINI (-32, WCS) + NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_MEMORY, + : 'naxis must not be negative (got -32)') + +* Test 3. + STATUS = WCSPTI (WCS, WCS_FLAG, 0, 0, 0) + STATUS = WCSINI (2, WCS) + NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_SUCCESS, ' ') + +* Test 4; CTYPE strings handled with CHARACTER*72 variable. + CTYPE = 'CUBEFACE' + STATUS = WCSPTC (WCS, WCS_CTYPE, CTYPE, 1, 0) + STATUS = WCSPTC (WCS, WCS_CTYPE, CTYPE, 2, 0) + STATUS = WCSSET (WCS) + NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_BAD_CTYPE, + : 'Multiple CUBEFACE axes (in CTYPE1 and CTYPE2)') + +* Test 5; CTYPE strings handled C-style, i.e. with trailing '\0'. + STATUS = WCSPTI (WCS, WCS_FLAG, 0, 0, 0) + STATUS = WCSINI (2, WCS) + STATUS = WCSPTC (WCS, WCS_CTYPE, 'RA---FOO'//NULL, 1, 0) + STATUS = WCSPTC (WCS, WCS_CTYPE, 'DEC--BAR'//NULL, 2, 0) + STATUS = WCSSET (WCS) + NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_BAD_CTYPE, + : 'Unrecognized projection code (FOO in CTYPE1)') + +* Test 6. + STATUS = WCSPTI (WCS, WCS_FLAG, 0, 0, 0) + STATUS = WCSINI (2, WCS) + STATUS = WCSPTC (WCS, WCS_CTYPE, 'RA---TAN'//NULL, 1, 0) + STATUS = WCSPTC (WCS, WCS_CTYPE, 'FREQ-LOG'//NULL, 2, 0) + STATUS = WCSSET (WCS) + NFAIL = NFAIL + CHECK_ERROR (WCS, STATUS, WCSERR_BAD_CTYPE, + : 'Unmatched celestial axes') + + STATUS = WCSFREE(WCS) + + TEST_ERRORS = NFAIL + + END + +*----------------------------------------------------------------------- + INTEGER FUNCTION CHECK_ERROR(WCS, STATUS, EXSTATUS, EXMSG) +*----------------------------------------------------------------------- + INCLUDE 'wcs.inc' + INCLUDE 'wcserr.inc' + + INTEGER EXSTATUS, ILEN, ISTAT, ETEST, STATUS, WCS(WCSLEN) + CHARACTER ERRMSG*(WCSERR_MSG_LENGTH), EXMSG*(*) + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary. As a dummy argument, WCS should +* already be aligned. WCSERR is aligned here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INTEGER WCSERR(ERRLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (WCSERR,DUMMY) + + COMMON /ERRTST/ ETEST +*----------------------------------------------------------------------- + IF (STATUS.NE.0) THEN + ISTAT = WCSGTI (WCS, WCS_ERR, WCSERR(1)) + ISTAT = WCSERR_GTC (WCSERR, WCSERR_MSG, ERRMSG) + ELSE + ERRMSG = ' ' + END IF + + ETEST = ETEST + 1 + WRITE (*, 10) ETEST + 10 FORMAT (/,'Test ',I2,'...') + + IF (STATUS.EQ.EXSTATUS .AND. ERRMSG.EQ.EXMSG) THEN + CALL FLUSH(6) + ISTAT = WCSPERR (WCS, 'OK: '//CHAR(0)) + WRITE (*, *) '...succeeded.' + CHECK_ERROR = 0 + ELSE + WRITE (*, 20) EXSTATUS, EXMSG(:ILEN(EXMSG)) + 20 FORMAT ('Expected error ',I2,': ''',A,''', got') + CALL FLUSH(6) + ISTAT = WCSPERR (WCS, CHAR(0)) + WRITE (*, *) '...failed.' + CHECK_ERROR = 1 + END IF + + END + +*----------------------------------------------------------------------- + INTEGER FUNCTION ILEN(STRING) +*----------------------------------------------------------------------- + CHARACTER STRING*(*) +*----------------------------------------------------------------------- + DO 10 ILEN = LEN(STRING), 1, -1 + IF (STRING(ILEN:ILEN).NE. ' ') RETURN + 10 CONTINUE + + ILEN = 0 + END diff --git a/deps/wcslib/Fortran/test/twcsfix.f b/deps/wcslib/Fortran/test/twcsfix.f new file mode 100644 index 0000000..4dbe049 --- /dev/null +++ b/deps/wcslib/Fortran/test/twcsfix.f @@ -0,0 +1,303 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: twcsfix.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TWCSFIX +*----------------------------------------------------------------------- +* +* TWCSFIX tests the translation routines for non-standard WCS keyvalues, +* the WCSFIX suite. It also tests the change of celestial coordinate +* system routine, WCSCCS, and the spectral coordinate translation +* routine, WCSSPTR. +* +*----------------------------------------------------------------------- + DOUBLE PRECISION TOL + PARAMETER (TOL = 1D-10) + +* B1950.0 equatorial coordinates of the galactic pole. +* CUNITia is set to ARCSEC below as an additional test. + DOUBLE PRECISION DEC, RA + PARAMETER (RA = 192.2500D0 * 3600D0) + PARAMETER (DEC = +27.4000D0 * 3600D0) + +* Number of axes. + INTEGER N + PARAMETER (N = 3) + + INTEGER I, J, NAXIS, VELREF + DOUBLE PRECISION BEPOCH, CDELT(N), CRPIX(N), CRVAL(N), EQUINOX, + : IMGCRD(N), LATPOLE, LONPOLE, MJDBEG, OBSGEO_B, OBSGEO_H, + : OBSGEO_L, PC(N,N), PHI, PIXCRD(N), RESTFRQ, RESTWAV, + : THETA, WORLD(N) + CHARACTER CTYPE(N)*72, CUNIT(N)*72, DATEAVG*72, DATEBEG*72, + : DATEEND*72, DATEOBS*72, RADESYS*72, SPECSYS*72 + + COMMON /HEADER/ CRPIX, PC, CDELT, CRVAL, RESTFRQ, RESTWAV, BEPOCH, + : MJDBEG, OBSGEO_L, OBSGEO_B, OBSGEO_H, EQUINOX, NAXIS, + : VELREF + COMMON /HEADCH/ CTYPE, CUNIT, DATEOBS, DATEBEG, DATEAVG, DATEEND, + : SPECSYS + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcs.inc' + INCLUDE 'wcsfix.inc' + INTEGER STAT(WCSFIX_NWCS), STATUS + CHARACTER CTYPES*9 + INTEGER WCS0(WCSLEN), WCS1(WCSLEN) + DOUBLE PRECISION DUMMY0, DUMMY1 + EQUIVALENCE (WCS0,DUMMY0) + EQUIVALENCE (WCS1,DUMMY1) + + DATA NAXIS /N/ + DATA (CRPIX(J), J=1,N) + : /90D0, 90D0, 1D0/ + DATA ((PC(I,J),J=1,N),I=1,N) + : /1D0, 0D0, 0D0, + : 0D0, 1D0, 0D0, + : 0D0, 0D0, 1D0/ + DATA (CDELT(I), I=1,N) + : /-1D0, 1D0, 19.68717093222D0/ + DATA (CUNIT(I), I=1,N) + : /'ARCSEC', 'ARCSEC', 'KM/SEC'/ + DATA (CTYPE(I), I=1,N) + : /'RA---NCP', 'DEC--NCP', 'FELO-HEL'/ + DATA (CRVAL(I), I=1,N) + : /RA, DEC, 5569.27104D0/ + DATA RESTFRQ /1.42040575D9/ + DATA RESTWAV /0D0/ + +* N.B. non-standard date-time format. + DATA DATEOBS /'1957/02/15 01:10:00'/ + DATA DATEBEG /'1957/02/15 01:10:00'/ + DATA DATEAVG /'1957/02/15 02:10:00'/ + DATA DATEEND /'1957/02/15 03:10:00'/ + + DATA BEPOCH / 1957.124382563D0/ + DATA MJDBEG / 35884.048611D0/ + + DATA OBSGEO_L /148.263510D0/ + DATA OBSGEO_B /-32.998406D0/ + DATA OBSGEO_H / 411.793D0/ + + DATA EQUINOX /1950.0D0/ + +* For testing SPCFIX. + DATA VELREF /2/ + DATA SPECSYS /'BARYCENT'/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing WCSLIB translator for non-standard usage ', + : '(twcsfix.f)',/, + : '-------------------------------------------------', + : '-----------',/) + +* This routine simulates the actions of a FITS header parser. + STATUS = WCSPTI (WCS0, WCS_FLAG, -1, 0, 0) + CALL PARSER (WCS0) + +* Fix non-standard WCS keyvalues. + STATUS = WCSFIX (7, 0, WCS0, STAT) + WRITE (*, 20) (STAT(I), I=1,WCSFIX_NWCS) + 20 FORMAT ('WCSFIX status returns: (',I2,6(',',I2),')',/) + + IF (STATUS.NE.0) THEN + WRITE (*, 30) STATUS + 30 FORMAT ('WCSFIX ERROR',I2,'.') + GO TO 999 + END IF + +* Extract information from the FITS header. + STATUS = WCSSET (WCS0) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR(WCS0, CHAR(0)) + GO TO 999 + END IF + + CALL FLUSH(6) + STATUS = WCSPRT (WCS0) + WRITE (*, 40) + 40 FORMAT (/,'------------------------------------', + : '------------------------------------') + +* Make a copy of the wcsprm struct. + STATUS = WCSPTI (WCS1, WCS_FLAG, -1, 0, 0) + STATUS = WCSSUB (WCS0, -1, -1, WCS1) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS1, CHAR(0)) + GO TO 999 + END IF + +* Transform equatorial B1950 to galactic coordinates. The WCS has +* been constructed with the galactic pole coincident with the native +* pole of the projection in order to test the resolution of an +* indeterminacy. + RADESYS = CHAR(0) + STATUS = WCSCCS (WCS1, 123.0D0, 27.4D0, 192.25D0, 'GLON', 'GLAT', + : RADESYS, 0D0, 'G') + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS1, CHAR(0)) + GO TO 999 + END IF + +* Should now have a 'VOPT-F2W' axis, translate it to frequency. + CTYPES = 'FREQ-???' + I = -1 + STATUS = WCSSPTR (WCS1, I, CTYPES) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR(WCS1, CHAR(0)) + GO TO 999 + END IF + + STATUS = WCSSET (WCS1) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR(WCS1, CHAR(0)) + GO TO 999 + END IF + + CALL FLUSH(6) + STATUS = WCSPRT (WCS1) + +* Print before-and-afters. + WRITE (*, 50) (CRPIX(I), I=1,N) + 50 FORMAT (/,'Original and new coordinates of reference point (' + : 2(F4.1,', '),F3.1,'), lonpole, and latpole:') + STATUS = WCSGTD (WCS0, WCS_CRVAL, CRVAL(1)) + STATUS = WCSGTD (WCS0, WCS_LONPOLE, LONPOLE) + STATUS = WCSGTD (WCS0, WCS_LATPOLE, LATPOLE) + WRITE (*, 60) (CRVAL(I), I=1,N), LONPOLE, LATPOLE + 60 FORMAT (2(F14.6,', '),F14.2,', ',F14.6,', ',F14.6) + + STATUS = WCSGTD (WCS1, WCS_CRVAL, CRVAL(1)) + STATUS = WCSGTD (WCS1, WCS_LONPOLE, LONPOLE) + STATUS = WCSGTD (WCS1, WCS_LATPOLE, LATPOLE) + WRITE (*, 60) (CRVAL(I), I=1,N), LONPOLE, LATPOLE + +* Compute B1950 coordinates of a field point. + PIXCRD(1) = 1000D0 + PIXCRD(2) = 1000D0 + PIXCRD(3) = 1D0 + WRITE (*, 70) (PIXCRD(I), I=1,N) + 70 FORMAT (/,'Original and new coordinates of field point (', + : 2(F6.1,', '),F3.1,'):') + + STATUS = WCSP2S (WCS0, 1, N, PIXCRD, IMGCRD, PHI, THETA, WORLD, + : STAT) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS0, CHAR(0)) + GO TO 999 + END IF + + WRITE (*, 80) (WORLD(I), I=1,N) + 80 FORMAT (2(F14.6,', '),F14.2) + +* Compute galactic coordinates of the same field point. + STATUS = WCSP2S (WCS1, 1, N, PIXCRD, IMGCRD, PHI, THETA, WORLD, + : STAT) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCS1, CHAR(0)) + GO TO 999 + END IF + + WRITE (*, 80) (WORLD(I), I=1,N) + + STATUS = WCSFREE (WCS0) + STATUS = WCSFREE (WCS1) + + + 999 CONTINUE + END + +*----------------------------------------------------------------------- + SUBROUTINE PARSER (WCS) +*----------------------------------------------------------------------- +* In practice a parser would read the FITS header until it encountered +* the NAXIS keyword which must occur near the start, before any of the +* WCS keywords. It would then use WCSINI to allocate memory for arrays +* in the WCSPRM "data structure" and set default values. +* +* In this simulation the header keyvalues are set in the main program in +* variables passed in COMMON. +*----------------------------------------------------------------------- +* Number of axes. + INTEGER N + PARAMETER (N = 3) + + INTEGER I, J, NAXIS, STATUS, VELREF, WCS(*) + DOUBLE PRECISION BEPOCH, CDELT(N), CRPIX(N), CRVAL(N), EQUINOX, + : MJDBEG, OBSGEO_B, OBSGEO_H, OBSGEO_L, PC(N,N), RESTFRQ, + : RESTWAV + CHARACTER CTYPE(N)*72, CUNIT(N)*72, DATEAVG*72, DATEBEG*72, + : DATEEND*72, DATEOBS*72, SPECSYS*72 + + COMMON /HEADER/ CRPIX, PC, CDELT, CRVAL, RESTFRQ, RESTWAV, BEPOCH, + : MJDBEG, OBSGEO_L, OBSGEO_B, OBSGEO_H, EQUINOX, NAXIS, + : VELREF + COMMON /HEADCH/ CTYPE, CUNIT, DATEOBS, DATEBEG, DATEAVG, DATEEND, + : SPECSYS + + INCLUDE 'wcsunits.inc' + INCLUDE 'wcs.inc' +*----------------------------------------------------------------------- + STATUS = WCSNPV (2) + STATUS = WCSINI (NAXIS, WCS) + + DO 20 I = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_CRPIX, CRPIX(I), I, 0) + + DO 10 J = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_PC, PC(I,J), I, J) + 10 CONTINUE + + STATUS = WCSPTD (WCS, WCS_CDELT, CDELT(I), I, 0) + STATUS = WCSPTC (WCS, WCS_CUNIT, CUNIT(I), I, 0) + STATUS = WCSPTC (WCS, WCS_CTYPE, CTYPE(I), I, 0) + STATUS = WCSPTD (WCS, WCS_CRVAL, CRVAL(I), I, 0) + 20 CONTINUE + + STATUS = WCSPTD (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) + STATUS = WCSPTD (WCS, WCS_RESTWAV, RESTWAV, 0, 0) + + STATUS = WCSPTI (WCS, WCS_NPV, 1, 0, 0) + STATUS = WCSPTD (WCS, WCS_PV, -1D0, -1, -1) + + STATUS = WCSPTI (WCS, WCS_VELREF, VELREF, 0, 0) + + STATUS = WCSPTC (WCS, WCS_DATEAVG, DATEAVG, 0, 0) + STATUS = WCSPTC (WCS, WCS_DATEEND, DATEEND, 0, 0) + + STATUS = WCSPTD (WCS, WCS_BEPOCH, BEPOCH, 0, 0) + STATUS = WCSPTD (WCS, WCS_MJDBEG, MJDBEG, 0, 0) + + STATUS = WCSPTD (WCS, WCS_OBSGEO, OBSGEO_L, 4, 0) + STATUS = WCSPTD (WCS, WCS_OBSGEO, OBSGEO_B, 5, 0) + STATUS = WCSPTD (WCS, WCS_OBSGEO, OBSGEO_H, 6, 0) + + STATUS = WCSPTD (WCS, WCS_EQUINOX, EQUINOX, 6, 0) + + STATUS = WCSPTC (WCS, WCS_SPECSYS, SPECSYS, 0, 0) + + RETURN + END diff --git a/deps/wcslib/Fortran/test/twcsfix.out b/deps/wcslib/Fortran/test/twcsfix.out new file mode 100644 index 0000000..a84ec53 --- /dev/null +++ b/deps/wcslib/Fortran/test/twcsfix.out @@ -0,0 +1,454 @@ +Testing WCSLIB translator for non-standard usage (twcsfix.f) +------------------------------------------------------------ + +WCSFIX status returns: (-1, 0, 0, 0, 0, 0,-1) + + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 19687. + crval: 0x
+ 192.25 27.400 5.5693e+06 + cunit: 0x
+ "deg" + "deg" + "m/s" + ctype: 0x
+ "RA---SIN" + "DEC--SIN" + "VOPT-F2W" + lonpole: 180.000000 + latpole: 27.400000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 3 + npvmax: 3 + pv: 0x
+ -1 -1 -1.0000 + 2 1 0.0000 + 2 2 1.9292 + nps: 0 + npsmax: 8 + ps: 0x
+ cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 + altlin: 0 + velref: 2 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: "1957-02-15T01:10:00.018" + datebeg: "1957-02-15T01:09:59.990" + dateavg: "1957-02-15T02:10:00" + dateend: "1957-02-15T03:10:00" + mjdobs: 35884.048611317 + mjdbeg: 35884.048611000 + mjdavg: 35884.090277778 + mjdend: 35884.131944444 + jepoch: UNDEFINED + bepoch: 1957.124382563 + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: -4554231.538450 2816759.125233 -3454036.303343 + 148.263510 -32.998406 411.793000 + obsorbit: UNDEFINED + radesys: "FK4" + equinox: 1950.000000000 + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3300 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 3 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 19687. + dispre: 0x0 + disseq: 0x0 + piximg: (nil) + imgpix: (nil) + i_naxis: 0 + unity: 1 + affine: 1 + simple: 1 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 192.25 27.400 180.00 27.400 + prj: (see below) + euler: 192.25 62.600 180.00 0.46020 0.88782 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 105 + code: "SIN" + r0: 57.295780 + pv: (0) + 0.0000 1.9292 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "orthographic/synthesis" + category: 1 (zenithal) + pvrange: 102 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 3.7218 4.7218 2.7218 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 111 + type: "VOPT" + code: "F2W" + crval: 5.5693e+06 + restfrq: 1420405750.000000 + restwav: 0.000000 + pv: (not used) + w: 0.21106 1.3945e+09 -4.5667 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x
+ spxS2P: 0x
+ spxP2X: 0x
+ +------------------------------------------------------------------------ + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 -89906. + crval: 0x
+ 303.00 90.000 1.3945e+09 + cunit: 0x
+ "deg" + "deg" + "Hz" + ctype: 0x
+ "GLON-SIN" + "GLAT-SIN" + "FREQ" + lonpole: 180.000000 + latpole: 90.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 2 + npvmax: 2 + pv: 0x
+ 2 1 0.0000 + 2 2 1.9292 + nps: 0 + npsmax: 0 + ps: 0x0 + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 + altlin: 0 + velref: 2 + alt: 'G' + colnum: 0 + colax: 0x
+ 0 0 0 + cname: 0x
+ UNDEFINED + UNDEFINED + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: "1957-02-15T01:10:00.018" + datebeg: "1957-02-15T01:09:59.990" + dateavg: "1957-02-15T02:10:00" + dateend: "1957-02-15T03:10:00" + mjdobs: 35884.048611317 + mjdbeg: 35884.048611000 + mjdavg: 35884.090277778 + mjdend: 35884.131944444 + jepoch: UNDEFINED + bepoch: 1957.124382563 + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: -4554231.538450 2816759.125233 -3454036.303343 + 148.263510 -32.998406 411.793000 + obsorbit: UNDEFINED + radesys: UNDEFINED + equinox: UNDEFINED + specsys: "BARYCENT" + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "GLON" + lattyp: "GLAT" + lng: 0 + lat: 1 + spec: 2 + time: -1 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 3000 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 3 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x0 (= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 3 + crpix: 0x
+ 90.000 90.000 1.0000 + pc: 0x
+ pc[0][]: 1.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 + cdelt: 0x
+ -0.00027778 0.00027778 -89906. + dispre: 0x0 + disseq: 0x0 + piximg: (nil) + imgpix: (nil) + i_naxis: 0 + unity: 1 + affine: 1 + simple: 1 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 303.00 90.000 180.00 90.000 + prj: (see below) + euler: 303.00 0.0000 180.00 1.0000 0.0000 + latpreq: 0 (not required) + isolat: 1 + err: 0x0 + + prj.* + flag: 105 + code: "SIN" + r0: 57.295780 + pv: (0) + 0.0000 1.9292 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "orthographic/synthesis" + category: 1 (zenithal) + pvrange: 102 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 3.7218 4.7218 2.7218 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + +Original and new coordinates of reference point (90.0, 90.0, 1.0), lonpole, and latpole: + 192.250000, 27.400000, 5569271.04, 180.000000, 27.400000 + 303.000000, 90.000000, 1394500000.01, 180.000000, 90.000000 + +Original and new coordinates of field point (1000.0, 1000.0, 1.0): + 191.964631, 27.650355, 5569271.04 + 168.242805, 89.644021, 1394500000.01 diff --git a/deps/wcslib/Fortran/test/twcsmix.f b/deps/wcslib/Fortran/test/twcsmix.f new file mode 100644 index 0000000..d3536c2 --- /dev/null +++ b/deps/wcslib/Fortran/test/twcsmix.f @@ -0,0 +1,818 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: twcsmix.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TWCS2 +*----------------------------------------------------------------------- +* +* TWCS2 tests WCSMIX for closure on the 1 degree celestial graticule for +* a number of selected projections. Points with good solutions are +* marked with a white dot on a graphical display of the projection while +* bad solutions are flagged with a red circle. +* +*----------------------------------------------------------------------- +* Number of axes. + INTEGER N + PARAMETER (N = 4) + + INTEGER I, J, K, NAXIS, NPV, PVI(4), PVM(4) + DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, + : PC(N,N), PV(4), RESTFRQ, RESTWAV + CHARACTER CTYPE(N)*72 + + DOUBLE PRECISION TOL + PARAMETER (TOL = 1D-9) + + COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, + : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV + COMMON /HEADCH/ CTYPE + + DATA NAXIS /N/ + DATA (CRPIX(J), J=1,N) + : /513D0, 0D0, 0D0, 0D0/ + DATA ((PC(I,J),J=1,N),I=1,N) + : /1.1D0, 0D0, 0D0, 0D0, + : 0D0, 1.0D0, 0D0, 0.1D0, + : 0D0, 0D0, 1.0D0, 0D0, + : 0D0, 0.2D0, 0D0, 1.0D0/ + DATA (CDELT(I), I=1,N) + : /-9.635265432D-6, 1D0, 1D0, -1D0/ + DATA (CTYPE(I), I=1,N) + : /'WAVE-F2W', 'XLAT-xxx ', 'TIME ', 'XLON-xxx '/ + DATA (CRVAL(I), I=1,N) + : /0.214982042D0, -30D0, -2D3, 150D0/ + DATA LONPOLE /150D0/ + DATA LATPOLE /999D0/ + DATA RESTFRQ /1.42040575D9/ + DATA RESTWAV /0D0/ + +* Set PVi_m keyvalues for the longitude axis (I = 4) so that the +* fiducial native coordinates are at the native pole, i.e. +* (phi0,theta0) = (0,90), but without any fiducial offset. We do +* this as a test, and also so that all projections will be +* exercised with the same obliquity parameters. + DATA (PVI(K), PVM(K), PV(K), K=1,2) + : /4, 1, 0D0, + : 4, 2, 90D0/ + +* PVi_m keyvalues for the latitude axis (I = 2). Value may be reset +* below. + DATA (PVI(K), PVM(K), PV(K), K=3,4) + : /2, 1, 0D0, + : 2, 2, 0D0/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing WCSLIB wcsmix routine (twcsmix.f)',/, + : '-----------------------------------------') + +* PGPLOT initialization. + CALL PGBEG (0, '/xwindow', 1, 1) + +* Define pen colours. + CALL PGSCR (0, 0.00, 0.00, 0.00) + CALL PGSCR (1, 1.00, 1.00, 0.00) + CALL PGSCR (2, 1.00, 1.00, 1.00) + CALL PGSCR (3, 0.50, 0.50, 0.80) + CALL PGSCR (4, 0.80, 0.50, 0.50) + CALL PGSCR (5, 0.80, 0.80, 0.80) + CALL PGSCR (6, 0.50, 0.50, 0.80) + CALL PGSCR (7, 0.80, 0.50, 0.50) + CALL PGSCR (8, 0.30, 0.50, 0.30) + CALL PGSCR (9, 1.00, 0.75, 0.00) + +* ARC: zenithal/azimuthal equidistant. + CTYPE(2)(6:8) = 'ARC' + CTYPE(4)(6:8) = 'ARC' + NPV = 2 + CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) + +* ZEA: zenithal/azimuthal equal area. + CTYPE(2)(6:8) = 'ZEA' + CTYPE(4)(6:8) = 'ZEA' + NPV = 2 + CALL MIXEX (TOL, -120.0, 120.0, -120.0, 120.0) + +* CYP: cylindrical perspective. + CTYPE(2)(6:8) = 'CYP' + CTYPE(4)(6:8) = 'CYP' + NPV = 4 + PV(3) = 3D0 + PV(4) = 0.8D0 + CALL MIXEX (TOL, -170.0, 170.0, -170.0, 170.0) + +* CEA: cylindrical equal area. + CTYPE(2)(6:8) = 'CEA' + CTYPE(4)(6:8) = 'CEA' + NPV = 3 + PV(3) = 0.75D0 + CALL MIXEX (TOL, -200.0, 200.0, -200.0, 200.0) + +* CAR: plate carree. + CTYPE(2)(6:8) = 'CAR' + CTYPE(4)(6:8) = 'CAR' + NPV = 2 + CALL MIXEX (TOL, -210.0, 210.0, -210.0, 210.0) + +* SFL: Sanson-Flamsteed. + CTYPE(2)(6:8) = 'SFL' + CTYPE(4)(6:8) = 'SFL' + NPV = 2 + CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) + +* PAR: parabolic. + CTYPE(2)(6:8) = 'PAR' + CTYPE(4)(6:8) = 'PAR' + NPV = 2 + CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) + +* MOL: Mollweide's projection. + CTYPE(2)(6:8) = 'MOL' + CTYPE(4)(6:8) = 'MOL' + NPV = 2 + CALL MIXEX (TOL, -170.0, 170.0, -170.0, 170.0) + +* AIT: Hammer-Aitoff. + CTYPE(2)(6:8) = 'AIT' + CTYPE(4)(6:8) = 'AIT' + NPV = 2 + CALL MIXEX (TOL, -170.0, 170.0, -170.0, 170.0) + +* COE: conic equal area. + CTYPE(2)(6:8) = 'COE' + CTYPE(4)(6:8) = 'COE' + NPV = 4 + PV(3) = 60D0 + PV(4) = 15D0 + CALL MIXEX (TOL, -140.0, 140.0, -120.0, 160.0) + +* COD: conic equidistant. + CTYPE(2)(6:8) = 'COD' + CTYPE(4)(6:8) = 'COD' + NPV = 4 + PV(3) = 60D0 + PV(4) = 15D0 + CALL MIXEX (TOL, -200.0, 200.0, -180.0, 220.0) + +* BON: Bonne's projection. + CTYPE(2)(6:8) = 'BON' + CTYPE(4)(6:8) = 'BON' + NPV = 3 + PV(3) = 30D0 + CALL MIXEX (TOL, -160.0, 160.0, -160.0, 160.0) + +* PCO: polyconic. + CTYPE(2)(6:8) = 'PCO' + CTYPE(4)(6:8) = 'PCO' + NPV = 2 + CALL MIXEX (TOL, -190.0, 190.0, -190.0, 190.0) + +* TSC: tangential spherical cube. + CTYPE(2)(6:8) = 'TSC' + CTYPE(4)(6:8) = 'TSC' + NPV = 2 + CALL MIXEX (TOL, -340.0, 80.0, -210.0, 210.0) + +* QSC: quadrilateralized spherical cube. + CTYPE(2)(6:8) = 'QSC' + CTYPE(4)(6:8) = 'QSC' + NPV = 2 + CALL MIXEX (TOL, -340.0, 80.0, -210.0, 210.0) + + CALL PGEND () + + END + + +*----------------------------------------------------------------------- + SUBROUTINE MIXEX (TOL, IMIN, IMAX, JMIN, JMAX) +*----------------------------------------------------------------------- +* MIXEX tests WCSMIX. +* +* Given: +* TOL D Reporting tolerance, degrees. +*----------------------------------------------------------------------- + INTEGER DOID, ILAT, ILNG, LATIDX, LNGIDX, SPCIDX, STAT, STATUS + REAL IMAX, IMIN, IPT(1), JMAX, JMIN, JPT(1) + DOUBLE PRECISION IMG(4), LAT1, LATSPN(2), LNGSPN(2), LNG1, PHI, + : PIX1(4), PIX2(4), PIX3(4), PIXLAT, PIXLNG, THETA, TOL, + : WORLD(4) + CHARACTER PCODE*4 + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary, done here using equivalences. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcs.inc' + INCLUDE 'cel.inc' + INCLUDE 'prj.inc' + INTEGER CEL(CELLEN), PRJ(PRJLEN), WCS(WCSLEN) + DOUBLE PRECISION DUMMY1, DUMMY2, DUMMY3 + EQUIVALENCE (CEL,DUMMY1), (PRJ,DUMMY2), (WCS,DUMMY3) +*----------------------------------------------------------------------- +* This routine simulates the actions of a FITS header parser. + STATUS = WCSPTI (WCS, WCS_FLAG, -1, 0, 0) + CALL PARSER (WCS) + + +* Draw the coordinate graticule. + CALL GRDPLT(WCS, IMIN, IMAX, JMIN, JMAX) + + + STATUS = WCSGTI (WCS, WCS_CEL, CEL(1)) + STATUS = CELGTI (CEL, CEL_PRJ, PRJ(1)) + STATUS = PRJGTC (PRJ, PRJ_CODE, PCODE) + WRITE (*, 10) PCODE, TOL + 10 FORMAT ('Testing ',A3,'; reporting tolerance',1PG8.1,' deg.') + + STATUS = WCSGTI (WCS, WCS_LNG, LNGIDX) + STATUS = WCSGTI (WCS, WCS_LAT, LATIDX) + STATUS = WCSGTI (WCS, WCS_SPEC, SPCIDX) + WORLD(1) = 0D0 + WORLD(2) = 0D0 + WORLD(3) = 0D0 + WORLD(4) = 0D0 + WORLD(SPCIDX) = 2.99792458D8 / 1.42040595D9 + + DO 80 ILAT = 90, -90, -1 + LAT1 = DBLE(ILAT) + + DO 70 ILNG = -180, 180, 15 + LNG1 = DBLE(ILNG) + + WORLD(LNGIDX) = LNG1 + WORLD(LATIDX) = LAT1 + STATUS = WCSS2P (WCS, 1, 4, WORLD(1), PHI, THETA, IMG(1), + : PIX1(1), STAT) + IF (STATUS.NE.0) THEN + WRITE (*, 20) PCODE, LNG1, LAT1, STATUS + 20 FORMAT (A3,': LNG1 =',F20.15,' LAT1 =',F20.15, + : ' ERROR',I3) + GO TO 70 + END IF + + PIXLNG = PIX1(LNGIDX) + PIXLAT = PIX1(LATIDX) + + IPT(1) = REAL(PIXLNG) + JPT(1) = REAL(PIXLAT) + CALL PGPT (1, IPT, JPT, -1) + + LNGSPN(1) = LNG1 - 9.3D0 + IF (LNGSPN(1).LT.-180D0) LNGSPN(1) = -180D0 + LNGSPN(2) = LNG1 + 4.1D0 + IF (LNGSPN(2).GT. 180D0) LNGSPN(2) = 180D0 + LATSPN(1) = LAT1 - 3.7D0 + IF (LATSPN(1).LT. -90D0) LATSPN(1) = -90D0 + LATSPN(2) = LAT1 + 7.2D0 + IF (LATSPN(2).GT. 90D0) LATSPN(2) = 90D0 + + DOID = 1 + + PIX2(LNGIDX) = PIXLNG + STATUS = WCSMIX (WCS, LNGIDX, 1, LATSPN, 1D0, 0, WORLD, + : PHI, THETA, IMG, PIX2) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' A: WCSMIX ERROR', STATUS + ELSE + STATUS = WCSS2P (WCS, 1, 0, WORLD(1), PHI, THETA, IMG(1), + : PIX3(1), STAT) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' A: WCSS2P ERROR', STATUS + ELSE IF (ABS(PIX3(LNGIDX)-PIXLNG).GT.TOL .AND. + : (ABS(WORLD(LATIDX)- LAT1).GT.TOL .OR. + : ABS(PIX2(LATIDX)-PIXLAT).GT.TOL)) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, 30) WORLD(LNGIDX), WORLD(LATIDX), PHI, + : THETA, PIX2(LNGIDX), PIX2(LATIDX) + 30 FORMAT (' A: (LNG2) =',F20.15,' LAT2 =',F20.15,/, + : ' PHI =',F20.15,' THETA =',F20.15,/, + : ' (I2) =',F20.15,' J2 =',F20.15) + END IF + END IF + + PIX2(LATIDX) = PIXLAT + STATUS = WCSMIX (WCS, LATIDX, 1, LATSPN, 1D0, 0, WORLD, + : PHI, THETA, IMG, PIX2) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' B: WCSMIX ERROR', STATUS + ELSE + STATUS = WCSS2P (WCS, 1, 0, WORLD(1), PHI, THETA, + : IMG(1), PIX3(1), STAT) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' B: WCSS2P ERROR', STATUS + ELSE IF (ABS(PIX3(LATIDX)-PIXLAT).GT.TOL .AND. + : (ABS(WORLD(LATIDX)- LAT1).GT.TOL .OR. + : ABS(PIX2(LNGIDX)-PIXLNG).GT.TOL)) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, 40) WORLD(LNGIDX), WORLD(LATIDX), PHI, + : THETA, PIX2(LNGIDX), PIX2(LATIDX) + 40 FORMAT (' B: (LNG2) =',F20.15,' LAT2 =',F20.15,/, + : ' PHI =',F20.15,' THETA =',F20.15,/, + : ' I2 =',F20.15,' (J2) =',F20.15) + END IF + END IF + + WORLD(LATIDX) = LAT1 + + PIX2(LNGIDX) = PIXLNG + STATUS = WCSMIX (WCS, LNGIDX, 2, LNGSPN, 1D0, 0, WORLD, + : PHI, THETA, IMG, PIX2) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' C: WCSMIX ERROR', STATUS + ELSE + STATUS = WCSS2P (WCS, 1, 0, WORLD(1), PHI, THETA, + : IMG(1), PIX3(1), STAT) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' C: WCSS2P ERROR', STATUS + ELSE IF (ABS(PIX3(LNGIDX)-PIXLNG).GT.TOL .AND. + : (ABS(WORLD(LNGIDX)- LNG1).GT.TOL .OR. + : ABS(PIX2(LATIDX)-PIXLAT).GT.TOL)) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, 50) WORLD(LNGIDX), WORLD(LATIDX), PHI, + : THETA, PIX2(LNGIDX), PIX2(LATIDX) + 50 FORMAT (' C: LNG2 =',F20.15,' (LAT2) =',F20.15,/, + : ' PHI =',F20.15,' THETA =',F20.15,/, + : ' (I2) =',F20.15,' J2 =',F20.15) + END IF + END IF + + PIX2(LATIDX) = PIXLAT + STATUS = WCSMIX (WCS, LATIDX, 2, LNGSPN, 1D0, 0, WORLD, + : PHI, THETA, IMG, PIX2) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' D: WCSMIX ERROR', STATUS + ELSE + STATUS = WCSS2P (WCS, 1, 0, WORLD(1), PHI, THETA, IMG(1), + : PIX3(1), STAT) + IF (STATUS.NE.0) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, '(A,I2)') ' D: WCSS2P ERROR', STATUS + ELSE IF (ABS(PIX3(LATIDX)-PIXLAT).GT.TOL .AND. + : (ABS(WORLD(LNGIDX)- LNG1).GT.TOL .OR. + : ABS(PIX2(LNGIDX)-PIXLNG).GT.TOL)) THEN + CALL ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) + WRITE (*, 60) WORLD(LNGIDX), WORLD(LATIDX), PHI, + : THETA, PIX2(LNGIDX), PIX2(LATIDX) + 60 FORMAT (' D: LNG2 =',F20.15,' (LAT2) =',F20.15,/, + : ' PHI =',F20.15,' THETA =',F20.15,/, + : ' I2 =',F20.15,' (J2) =',F20.15) + END IF + END IF + + 70 CONTINUE + 80 CONTINUE + + STATUS = WCSFREE (WCS) + + RETURN + END + + +*----------------------------------------------------------------------- + SUBROUTINE ID (WCS, DOID, LNG1, LAT1, PIXLNG, PIXLAT) +*----------------------------------------------------------------------- + INTEGER DOID, STATUS + REAL IPT(1), JPT(1) + DOUBLE PRECISION EULER(5), LNG1, LAT1, PHI, PIXLAT, PIXLNG, THETA + CHARACTER PCODE*4 + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary. As a dummy argument, WCS should +* already be aligned. The others are aligned here using +* equivalences. Failure to do this may result in mysterious "bus +* errors". + INCLUDE 'wcs.inc' + INCLUDE 'cel.inc' + INCLUDE 'prj.inc' + INTEGER CEL(CELLEN), PRJ(PRJLEN), WCS(WCSLEN) + DOUBLE PRECISION DUMMY1, DUMMY2 + EQUIVALENCE (CEL,DUMMY1), (PRJ,DUMMY2) +*----------------------------------------------------------------------- + IF (DOID.NE.0) THEN +* Compute native coordinates. + STATUS = WCSGTI (WCS, WCS_CEL, CEL(1)) + STATUS = CELGTD (CEL, CEL_EULER, EULER) + CALL SPHS2X (EULER, 1, 1, 1, 1, LNG1, LAT1, PHI, THETA) + + STATUS = CELGTI (CEL, CEL_PRJ, PRJ) + STATUS = PRJGTC (PRJ, PRJ_CODE, PCODE) + WRITE (*, 10) PCODE, LNG1, LAT1, PHI, THETA, PIXLNG, PIXLAT + 10 FORMAT (/,A3,': LNG1 =',F20.15,' LAT1 =',F20.15,/, + : ' PHI =',F20.15,' THETA =',F20.15,/, + : ' I1 =',F20.15,' J1 =',F20.15) + DOID = 0 + + CALL PGSCI (9) + IPT(1) = REAL(PIXLNG) + JPT(1) = REAL(PIXLAT) + CALL PGPT (1, IPT, JPT, 21) + CALL PGSCI (2) + END IF + + RETURN + END + + +*----------------------------------------------------------------------- + SUBROUTINE GRDPLT (WCS, IMIN, IMAX, JMIN, JMAX) +*----------------------------------------------------------------------- +* Number of axes. + INTEGER N, NELEM + PARAMETER (N = 4, NELEM = 9) + + LOGICAL CUBIC + INTEGER CATEG, CI, ILAT, ILNG, J, K, LATIDX, LNGIDX, SPCIDX, + : STAT(0:360), STATUS + REAL IMAX, IMIN, JMAX, JMIN, IR(0:1023), JR(0:1023) + DOUBLE PRECISION FREQ, IMG(NELEM,0:360), LAT, LNG, PHI(0:360), + : PIX(NELEM,0:360), REF(4), STEP, THETA(0:360), W(10), + : WORLD(NELEM,0:360) + CHARACTER PCODE*4, TEXT*80 + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary. As a dummy argument, WCS should +* already be aligned. The others are aligned here using +* equivalences. Failure to do this may result in mysterious "bus +* errors". + INCLUDE 'wcs.inc' + INCLUDE 'cel.inc' + INCLUDE 'prj.inc' + INCLUDE 'lin.inc' + INTEGER CEL(CELLEN), LIN(LINLEN), PRJ(PRJLEN), WCS(WCSLEN) + INTEGER NATIVE(WCSLEN) + DOUBLE PRECISION DUMMY1, DUMMY2, DUMMY3, DUMMY4 + EQUIVALENCE (CEL,DUMMY1), (LIN,DUMMY2), (PRJ,DUMMY3), + : (NATIVE,DUMMY4) +*----------------------------------------------------------------------- +* Initialize non-celestial world coordinates. + STATUS = WCSGTI (WCS, WCS_LNG, LNGIDX) + STATUS = WCSGTI (WCS, WCS_LAT, LATIDX) + STATUS = WCSGTI (WCS, WCS_SPEC, SPCIDX) + + FREQ = 1.42040595D9 - 180D0 * 62500D0 + DO 10 J = 0, 360 + WORLD(1,J) = 0D0 + WORLD(2,J) = 0D0 + WORLD(3,J) = 0D0 + WORLD(4,J) = 0D0 + + WORLD(SPCIDX,J) = 2.99792458D8 / FREQ + FREQ = FREQ + 62500D0 + 10 CONTINUE + + +* Define PGPLOT viewport. + CALL PGENV (IMIN, IMAX, JMIN, JMAX, 1, -2) + + STATUS = WCSGTI (WCS, WCS_CEL, CEL(1)) + STATUS = CELGTI (CEL, CEL_PRJ, PRJ) + STATUS = PRJGTI (PRJ, PRJ_CATEGORY, CATEG) + CUBIC = CATEG.EQ.7 + IF (CUBIC) THEN +* Some sort of quad-cube projection. + CALL PGSCI (8) + +* Draw the map boundary. + DO 20 J = 0, 8 + IMG(1,J) = 0D0 + IMG(2,J) = 0D0 + IMG(3,J) = 0D0 + IMG(4,J) = 0D0 + 20 CONTINUE + + STATUS = PRJGTD (PRJ, PRJ_W, W) + IMG(LNGIDX,0) = -W(1) + IMG(LATIDX,0) = W(1) + IMG(LNGIDX,1) = -W(1) + IMG(LATIDX,1) = W(1)*3D0 + IMG(LNGIDX,2) = W(1) + IMG(LATIDX,2) = W(1)*3D0 + IMG(LNGIDX,3) = W(1) + IMG(LATIDX,3) = -W(1)*3D0 + IMG(LNGIDX,4) = -W(1) + IMG(LATIDX,4) = -W(1)*3D0 + IMG(LNGIDX,5) = -W(1) + IMG(LATIDX,5) = W(1) + IMG(LNGIDX,6) = W(1)*7D0 + IMG(LATIDX,6) = W(1) + IMG(LNGIDX,7) = W(1)*7D0 + IMG(LATIDX,7) = -W(1) + IMG(LNGIDX,8) = -W(1) + IMG(LATIDX,8) = -W(1) + + STATUS = WCSGTI (WCS, WCS_LIN, LIN(1)) + STATUS = LINX2P (LIN, 9, NELEM, IMG, PIX) + + DO 30 J = 0, 8 + IR(J) = REAL(PIX(LNGIDX,J)) + JR(J) = REAL(PIX(LATIDX,J)) + 30 CONTINUE + + CALL PGLINE (9, IR, JR) + END IF + + IF (CATEG.EQ.6) THEN +* Polyconic. + STEP = 10D0 + ELSE + STEP = 15D0 + END IF + + +* Draw the native coordinate graticule faintly in the background. + STATUS = WCSPTI (NATIVE, WCS_FLAG, -1, 0, 0) + STATUS = WCSCOPY (WCS, NATIVE) + STATUS = WCSPTD (NATIVE, WCS_CRVAL, 0D0, LNGIDX, 0) + STATUS = WCSPTD (NATIVE, WCS_CRVAL, 90D0, LATIDX, 0) + STATUS = WCSPTD (NATIVE, WCS_LONPOLE, 180D0, 0, 0) + STATUS = WCSSET (NATIVE) + + CALL PGSCI (8) + +* Draw native meridians of longitude. + DO 60 ILNG = -180, 180, 15 + LNG = DBLE(ILNG) + IF (ILNG.EQ.-180) LNG = -179.99D0 + IF (ILNG.EQ.+180) LNG = +179.99D0 + + J = 0 + DO 40 ILAT = -90, 90 + WORLD(LNGIDX,J) = LNG + WORLD(LATIDX,J) = DBLE(ILAT) + J = J + 1 + 40 CONTINUE + + STATUS = WCSS2P (NATIVE, 181, NELEM, WORLD(1,0), + : PHI(0), THETA(0), IMG(1,0), PIX(1,0), STAT(0)) + IF (STATUS.NE.0) GO TO 60 + + J = 0 + K = 0 + DO 50 ILAT = -90, 90 + IF (CUBIC .AND. K.GT.0) THEN + IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.2D0 .OR. + : ABS(PIX(LATIDX,J)-JR(K-1)).GT.5D0) THEN + IF (K.GT.1) CALL PGLINE (K, IR, JR) + K = 0 + END IF + END IF + + IR(K) = REAL(PIX(LNGIDX,J)) + JR(K) = REAL(PIX(LATIDX,J)) + J = J + 1 + K = K + 1 + 50 CONTINUE + + CALL PGLINE (K, IR, JR) + 60 CONTINUE + +* Draw native parallels of latitude. + DO 90 ILAT = -90, 90, 15 + LAT = DBLE(ILAT) + + J = 0 + DO 70 ILNG = -180, 180 + LNG = DBLE(ILNG) + IF (ILNG.EQ.-180) LNG = -179.99D0 + IF (ILNG.EQ.+180) LNG = +179.99D0 + + WORLD(LNGIDX,J) = LNG + WORLD(LATIDX,J) = LAT + J = J + 1 + 70 CONTINUE + + STATUS = WCSS2P (NATIVE, 361, NELEM, WORLD(1,0), + : PHI(0), THETA(0), IMG(1,0), PIX(1,0), STAT(0)) + IF (STATUS.NE.0) GO TO 90 + + J = 0 + K = 0 + DO 80 ILNG = -180, 180 + IF (CUBIC .AND. K.GT.0) THEN + IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.2D0 .OR. + : ABS(PIX(LATIDX,J)-JR(K-1)).GT.5D0) THEN + IF (K.GT.1) CALL PGLINE (K, IR, JR) + K = 0 + END IF + END IF + + IR(K) = REAL(PIX(LNGIDX,J)) + JR(K) = REAL(PIX(LATIDX,J)) + J = J + 1 + K = K + 1 + 80 CONTINUE + + CALL PGLINE (K, IR, JR) + 90 CONTINUE + + STATUS = WCSFREE (NATIVE) + + +* Draw a colour-coded celestial coordinate graticule. + CI = 1 + +* Draw celestial meridians of longitude. + DO 120 ILNG = -180, 180, 15 + LNG = DBLE(ILNG) + + CI = CI + 1 + IF (CI.GT.7) CI = 2 + IF (ILNG.NE.0) THEN + CALL PGSCI (CI) + ELSE + CALL PGSCI (1) + END IF + + J = 0 + DO 100 ILAT = -90, 90 + LAT = DBLE(ILAT) + + WORLD(LNGIDX,J) = LNG + WORLD(LATIDX,J) = LAT + J = J + 1 + 100 CONTINUE + + STATUS = WCSS2P (WCS, 181, NELEM, WORLD(1,0), PHI(0), THETA(0), + : IMG(1,0), PIX(1,0), STAT(0)) + IF (STATUS.NE.0) GO TO 120 + + J = 0 + K = 0 + DO 110 ILAT = -90, 90 +* Test for discontinuities. + IF (K.GT.0) THEN + IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.STEP .OR. + : ABS(PIX(LATIDX,J)-JR(K-1)).GT.STEP) THEN + IF (K.GT.1) CALL PGLINE (K, IR, JR) + K = 0 + END IF + END IF + + IR(K) = REAL(PIX(LNGIDX,J)) + JR(K) = REAL(PIX(LATIDX,J)) + J = J + 1 + K = K + 1 + 110 CONTINUE + + CALL PGLINE (K, IR, JR) + 120 CONTINUE + +* Draw celestial parallels of latitude. + CI = 1 + DO 150 ILAT = -90, 90, 15 + LAT = DBLE(ILAT) + + CI = CI + 1 + IF (CI.GT.7) CI = 2 + IF (ILAT.NE.0) THEN + CALL PGSCI (CI) + ELSE + CALL PGSCI (1) + END IF + + J = 0 + DO 130 ILNG = -180, 180 + WORLD(LNGIDX,J) = DBLE(ILNG) + WORLD(LATIDX,J) = LAT + J = J + 1 + 130 CONTINUE + + STATUS = WCSS2P (WCS, 361, NELEM, WORLD(1,0), PHI(0), THETA(0), + : IMG(1,0), PIX(1,0), STAT(0)) + IF (STATUS.NE.0) GO TO 150 + + J = 0 + K = 0 + DO 140 ILNG = -180, 180 +* Test for discontinuities. + IF (K.GT.0) THEN + IF (ABS(PIX(LNGIDX,J)-IR(K-1)).GT.STEP .OR. + : ABS(PIX(LATIDX,J)-JR(K-1)).GT.STEP) THEN + IF (K.GT.1) CALL PGLINE (K, IR, JR) + K = 0 + END IF + END IF + + IR(K) = REAL(PIX(LNGIDX,J)) + JR(K) = REAL(PIX(LATIDX,J)) + J = J + 1 + K = K + 1 + 140 CONTINUE + + CALL PGLINE (K, IR, JR) + 150 CONTINUE + + +* Write a descriptive title. + CALL PGSCI (1) + STATUS = PRJGTC (PRJ, PRJ_CODE, PCODE) + TEXT = PCODE // 'projection - 15 degree graticule' + WRITE (*, '(//,A)') TEXT + CALL PGTEXT (IMIN, JMIN-10.0, TEXT) + + STATUS = CELGTD (CEL, CEL_REF, REF) + WRITE (TEXT, 160) REF(1), REF(2) + 160 FORMAT ('centered on celestial coordinates (',F6.2,',',F6.2,')') + WRITE (*, '(A)') TEXT + CALL PGTEXT (IMIN, JMIN-20.0, TEXT) + + WRITE (TEXT, 170) REF(3), REF(4) + 170 FORMAT ('with celestial pole at native coordinates (',F7.2, + : ',',F7.2,')') + WRITE (*, '(A)') TEXT + CALL PGTEXT (IMIN, JMIN-30.0, TEXT) + + CALL PGSCI (2) + + + RETURN + END + + +*----------------------------------------------------------------------- + SUBROUTINE PARSER (WCS) +*----------------------------------------------------------------------- +* In practice a parser would read the FITS header until it encountered +* the NAXIS keyword which must occur near the start, before any of the +* WCS keywords. It would then use WCSINI to allocate memory for arrays +* in the WCSPRM "data structure" and set default values. +* +* In this simulation the header keyvalues are set in the main program in +* variables passed in COMMON. +*----------------------------------------------------------------------- +* Number of axes. + INTEGER N + PARAMETER (N = 4) + + INTEGER I, J, K, NAXIS, NPV, PVI(4), PVM(4), STATUS, WCS(*) + DOUBLE PRECISION CDELT(N), CRPIX(N), CRVAL(N), LATPOLE, LONPOLE, + : PC(N,N), PV(4), RESTFRQ, RESTWAV + CHARACTER CTYPE(N)*72 + + INCLUDE 'wcs.inc' + + COMMON /HEADER/ NAXIS, NPV, CRPIX, PC, CDELT, CRVAL, LONPOLE, + : LATPOLE, RESTFRQ, RESTWAV, PVI, PVM, PV + COMMON /HEADCH/ CTYPE +*----------------------------------------------------------------------- + STATUS = WCSPTI (WCS, WCS_FLAG, -1, 0, 0) + STATUS = WCSINI (NAXIS, WCS) + + DO 20 I = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_CRPIX, CRPIX(I), I, 0) + + DO 10 J = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_PC, PC(I,J), I, J) + 10 CONTINUE + + STATUS = WCSPTD (WCS, WCS_CDELT, CDELT(I), I, 0) + STATUS = WCSPTC (WCS, WCS_CTYPE, CTYPE(I), I, 0) + STATUS = WCSPTD (WCS, WCS_CRVAL, CRVAL(I), I, 0) + 20 CONTINUE + + STATUS = WCSPTD (WCS, WCS_LONPOLE, LONPOLE, 0, 0) + STATUS = WCSPTD (WCS, WCS_LATPOLE, LATPOLE, 0, 0) + + STATUS = WCSPTD (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) + STATUS = WCSPTD (WCS, WCS_RESTWAV, RESTWAV, 0, 0) + + DO 30 K = 1, NPV + STATUS = WCSPTD (WCS, WCS_PV, PV(K), PVI(K), PVM(K)) + 30 CONTINUE + +* Extract information from the FITS header. + STATUS = WCSSET (WCS) + IF (STATUS.NE.0) THEN + WRITE (*, 40) STATUS + 40 FORMAT ('WCSSET ERROR',I3) + END IF + + RETURN + END diff --git a/deps/wcslib/Fortran/test/twcssub.f b/deps/wcslib/Fortran/test/twcssub.f new file mode 100644 index 0000000..fdf34ab --- /dev/null +++ b/deps/wcslib/Fortran/test/twcssub.f @@ -0,0 +1,182 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: twcssub.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TWCSSUB +*----------------------------------------------------------------------- +* +* TWCSSUB tests WCSSUB which extracts the coordinate description for a +* subimage from a wcsprm struct. +* +*----------------------------------------------------------------------- +* Number of axes. + INTEGER NAXIS + PARAMETER (NAXIS = 4) + + INTEGER AXES(NAXIS), I, J, K, NPS, NPV, NSUB, PSI(10), PSM(10), + : PVI(10), PVM(10), STATUS + DOUBLE PRECISION CDELT(NAXIS), CRPIX(NAXIS), CRVAL(NAXIS), + : LATPOLE, LONPOLE, PC(NAXIS,NAXIS), PV(10), RESTFRQ, + : RESTWAV + CHARACTER CNAME(NAXIS)*72, CTYPE(NAXIS)*72, CUNIT(NAXIS)*72, + : PS(10)*72 + +* On some systems, such as Sun Sparc, the structs MUST be aligned +* on a double precision boundary, done here using equivalences. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcs.inc' + INCLUDE 'wcserr.inc' + INTEGER WCS(WCSLEN), WCSEXT(WCSLEN) + DOUBLE PRECISION DUMMY1, DUMMY2 + EQUIVALENCE (WCS,DUMMY1), (WCSEXT,DUMMY2) + + DATA (CRPIX(J), J=1,NAXIS) + : / 1025D0, 64D0, 512D0, 513D0/ + DATA ((PC(I,J),J=1,NAXIS),I=1,NAXIS) + : / 1.1D0, 0D0, 0D0, 0D0, + : 0D0, 1.0D0, 0D0, 0D0, + : 0D0, 0D0, 1.0D0, 0.1D0, + : 0D0, 0D0, 0.2D0, 1.0D0/ + DATA (CDELT(I), I=1,NAXIS) + : /-9.2D-6, 10D0, 1D0, -1D0/ + DATA (CUNIT(I), I=1,NAXIS) + : /'m', 's', 'deg', 'deg'/ + DATA (CTYPE(I), I=1,NAXIS) + : /'WAVE-F2W', 'TIME', 'XLAT-SZP', 'XLON-SZP'/ + DATA (CRVAL(I), I=1,NAXIS) + : /0.214982042D0, -2D3, -30D0, 150D0/ + DATA LONPOLE /150D0/ + DATA LATPOLE /999D0/ + DATA RESTFRQ /1.42040575D9/ + DATA RESTWAV /0D0/ + + DATA (CNAME(I), I=1,NAXIS) + : /'Wavelength', 'Time', 'Latitude', 'Longitude'/ + + PARAMETER (NPV = 4) + DATA (PVI(K), PVM(K), PV(K), K=1,NPV) + : /1, 1, -1D0, + : 3, 1, 2D0, + : 3, 2, 210D0, + : 3, 3, 60D0/ + + PARAMETER (NPS = 1) + DATA (PSI(K), PSM(K), PS(K), K=1,NPS) + : /2, 1, 'UTC'/ +*----------------------------------------------------------------------- + STATUS = WCSPTI (WCS, WCS_FLAG, -1, 0, 0) + STATUS = WCSINI (NAXIS, WCS) + + DO 20 I = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_CRPIX, CRPIX(I), I, 0) + + DO 10 J = 1, NAXIS + STATUS = WCSPTD (WCS, WCS_PC, PC(I,J), I, J) + 10 CONTINUE + + STATUS = WCSPTD (WCS, WCS_CDELT, CDELT(I), I, 0) + STATUS = WCSPTC (WCS, WCS_CUNIT, CUNIT(I), I, 0) + STATUS = WCSPTC (WCS, WCS_CTYPE, CTYPE(I), I, 0) + STATUS = WCSPTD (WCS, WCS_CRVAL, CRVAL(I), I, 0) + STATUS = WCSPTC (WCS, WCS_CNAME, CNAME(I), I, 0) + 20 CONTINUE + + STATUS = WCSPTD (WCS, WCS_LONPOLE, LONPOLE, 0, 0) + STATUS = WCSPTD (WCS, WCS_LATPOLE, LATPOLE, 0, 0) + + STATUS = WCSPTD (WCS, WCS_RESTFRQ, RESTFRQ, 0, 0) + STATUS = WCSPTD (WCS, WCS_RESTWAV, RESTWAV, 0, 0) + + DO 30 K = 1, NPV + STATUS = WCSPTD (WCS, WCS_PV, PV(K), PVI(K), PVM(K)) + 30 CONTINUE + + DO 40 K = 1, NPS + STATUS = WCSPTC (WCS, WCS_PS, PS(K), PSI(K), PSM(K)) + 40 CONTINUE + +* Extract information from the FITS header. + STATUS = WCSSET (WCS) + IF (STATUS.NE.0) THEN + WRITE (*, 50) STATUS + 50 FORMAT ('WCSSET ERROR',I3,'.') + GO TO 999 + END IF + + WRITE (*, 60) + 60 FORMAT ( + : 'Testing WCSLIB subimage extraction subroutine (twcssub.f)',/, + : '---------------------------------------------------------',//, + : 'Initial contents of wcsprm struct:') + CALL FLUSH(6) + STATUS = WCSPRT (WCS) + + +* Extract the coordinate description for a subimage and add an axis. + NSUB = 4 + AXES(1) = WCSSUB_LONGITUDE + AXES(2) = WCSSUB_LATITUDE + AXES(3) = -(WCSSUB_SPECTRAL + WCSSUB_STOKES) + AXES(4) = 0 + WRITE (6, 70) + 70 FORMAT (//,'Extracted contents of wcsprm struct:') + + STATUS = WCSPTI (WCSEXT, WCS_FLAG, -1, 0, 0) + STATUS = WCSSUB (WCS, NSUB, AXES, WCSEXT) + + CALL FLUSH(6) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCSEXT, CHAR(0)) + ELSE + STATUS = WCSSET (WCSEXT) + IF (STATUS.NE.0) THEN + STATUS = WCSPERR (WCSEXT, CHAR(0)) + ELSE + STATUS = WCSPRT (WCSEXT) + END IF + END IF + + +* Set it up for failure by setting PC1_3 non-zero. + STATUS = WCSPTD (WCS, WCS_PC, 1D0, 1, 3) + NSUB = 2 + AXES(1) = 4 + AXES(2) = 3 + STATUS = WCSSUB(WCS, NSUB, AXES, WCSEXT) + IF (STATUS.EQ.WCSERR_NON_SEPARABLE) THEN + WRITE (6, 80) WCSERR_NON_SEPARABLE + 80 FORMAT (//,'Received wcssub status',I3,' as expected for a ' + : 'non-separable subimage',/,'coordinate system.') + ELSE + WRITE (6, 90) WCSERR_NON_SEPARABLE, STATUS + 90 FORMAT (//,'ERROR: expected wcssub status',I3,' for a non-', + : 'separable subimage coordinate',/,'system, but received ', + : 'status',I3,' instead.') + END IF + + + STATUS = WCSFREE (WCSEXT) + 999 STATUS = WCSFREE (WCS) + + END diff --git a/deps/wcslib/Fortran/test/twcssub.out b/deps/wcslib/Fortran/test/twcssub.out new file mode 100644 index 0000000..eca27ad --- /dev/null +++ b/deps/wcslib/Fortran/test/twcssub.out @@ -0,0 +1,478 @@ +Testing WCSLIB subimage extraction subroutine (twcssub.f) +--------------------------------------------------------- + +Initial contents of wcsprm struct: + flag: 137 + naxis: 4 + crpix: 0x
+ 1025.0 64.000 512.00 513.00 + pc: 0x
+ pc[0][]: 1.1000 0.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.10000 + pc[3][]: 0.0000 0.0000 0.20000 1.0000 + cdelt: 0x
+ -9.2000e-06 10.000 1.0000 -1.0000 + crval: 0x
+ 0.21498 -2000.0 -30.000 150.00 + cunit: 0x
+ "m" + "s" + "deg" + "deg" + ctype: 0x
+ "WAVE-F2W" + "TIME" + "XLAT-SZP" + "XLON-SZP" + lonpole: 150.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 4 + npvmax: 64 + pv: 0x
+ 1 1 -1.0000 + 3 1 2.0000 + 3 2 210.00 + 3 3 60.000 + nps: 1 + npsmax: 8 + ps: 0x
+ 2 1 UTC + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 0 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Wavelength" + "Time" + "Latitude" + "Longitude" + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: UNDEFINED + equinox: UNDEFINED + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "XLON" + lattyp: "XLAT" + lng: 3 + lat: 2 + spec: 0 + time: 1 + cubeface: -1 + chksum: + types: 0x
+ 3300 4000 2201 2200 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 1025.0 64.000 512.00 513.00 + pc: 0x
+ pc[0][]: 1.1000 0.0000 0.0000 0.0000 + pc[1][]: 0.0000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.10000 + pc[3][]: 0.0000 0.0000 0.20000 1.0000 + cdelt: 0x
+ -9.2000e-06 10.000 1.0000 -1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -1.0120e-05 -0.0000 -0.0000 -0.0000 +piximg[1][]: 0.0000 10.000 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 1.0000 0.10000 +piximg[3][]: -0.0000 -0.0000 -0.20000 -1.0000 +imgpix[0][]: -98814. -0.0000 -0.0000 -0.0000 +imgpix[1][]: 0.0000 0.10000 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.0204 0.10204 +imgpix[3][]: -0.0000 -0.0000 -0.20408 -1.0204 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 150.00 -30.000 + prj: (see below) + euler: 150.00 120.00 150.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 102 + code: "SZP" + r0: 57.295780 + pv: (0) + 2.0000 210.00 60.000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "slant zenithal perspective" + category: 1 (zenithal) + pvrange: 103 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 0.50000 -0.86603 2.7321 28.648 + -49.620 156.53 3.7321 -90.000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 110 + type: "WAVE" + code: "F2W" + crval: 0.21498 + restfrq: 1420405750.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 1.3945e+09 -6.4866e+09 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x
+ spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x
+ + +Extracted contents of wcsprm struct: + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 512.00 64.000 0.0000 + pc: 0x
+ pc[0][]: 1.0000 0.20000 0.0000 0.0000 + pc[1][]: 0.10000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -1.0000 1.0000 10.000 1.0000 + crval: 0x
+ 150.00 -30.000 -2000.0 0.0000 + cunit: 0x
+ "deg" + "deg" + "s" + "" + ctype: 0x
+ "XLON-SZP" + "XLAT-SZP" + "TIME" + "" + lonpole: 150.000000 + latpole: -30.000000 + restfrq: 1420405750.000000 + restwav: 0.000000 + npv: 3 + npvmax: 3 + pv: 0x
+ 2 1 2.0000 + 2 2 210.00 + 2 3 60.000 + nps: 1 + npsmax: 1 + ps: 0x
+ 3 1 UTC + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 0 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Longitude" + "Latitude" + "Time" + UNDEFINED + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: UNDEFINED + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: UNDEFINED + equinox: UNDEFINED + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 0 + tab: 0x0 + nwtb: 0 + wtb: 0x0 + lngtyp: "XLON" + lattyp: "XLAT" + lng: 0 + lat: 1 + spec: -1 + time: 2 + cubeface: -1 + chksum: + types: 0x
+ 2200 2201 4000 0 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 137 + m_naxis: 4 + m_crpix: 0x
(= crpix) + m_pc: 0x
(= pc) + m_cdelt: 0x
(= cdelt) + m_crval: 0x
(= crval) + m_cunit: 0x
(= cunit) + m_ctype: 0x
(= ctype) + m_pv: 0x
(= pv) + m_ps: 0x
(= ps) + m_cd: 0x
(= cd) + m_crota: 0x
(= crota) + + m_colax: 0x
(= colax) + m_cname: 0x
(= cname) + m_crder: 0x
(= crder) + m_csyer: 0x
(= csyer) + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 (= tab) + m_wtb: 0x0 (= wtb) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 513.00 512.00 64.000 0.0000 + pc: 0x
+ pc[0][]: 1.0000 0.20000 0.0000 0.0000 + pc[1][]: 0.10000 1.0000 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 0.0000 1.0000 + cdelt: 0x
+ -1.0000 1.0000 10.000 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: -1.0000 -0.20000 -0.0000 -0.0000 +piximg[1][]: 0.10000 1.0000 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 10.000 0.0000 +piximg[3][]: 0.0000 0.0000 0.0000 1.0000 +imgpix[0][]: -1.0204 -0.20408 -0.0000 -0.0000 +imgpix[1][]: 0.10204 1.0204 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 0.10000 0.0000 +imgpix[3][]: 0.0000 0.0000 0.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 137 + offset: 0 + phi0: 0.000000 + theta0: 90.000000 + ref: 150.00 -30.000 150.00 -30.000 + prj: (see below) + euler: 150.00 120.00 150.00 -0.50000 0.86603 + latpreq: 0 (not required) + isolat: 0 + err: 0x0 + + prj.* + flag: 102 + code: "SZP" + r0: 57.295780 + pv: (0) + 2.0000 210.00 60.000 + phi0: 0.000000 + theta0: 90.000000 + bounds: 7 + + name: "slant zenithal perspective" + category: 1 (zenithal) + pvrange: 103 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.017453 0.50000 -0.86603 2.7321 28.648 + -49.620 156.53 3.7321 -90.000 0.0000 + m: 0 + n: 0 + prjx2s: 0x
+ prjs2x: 0x
+ + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 + + +Received wcssub status 13 as expected for a non-separable subimage +coordinate system. diff --git a/deps/wcslib/Fortran/test/twcstab.f b/deps/wcslib/Fortran/test/twcstab.f new file mode 100644 index 0000000..9ae53b9 --- /dev/null +++ b/deps/wcslib/Fortran/test/twcstab.f @@ -0,0 +1,175 @@ +*======================================================================= +* +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: twcstab.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + PROGRAM TWCSTAB +*----------------------------------------------------------------------- +* +* TWCSTAB tests WCSTAB and also provides sample code for using it in +* conjunction with WCSPIH and FTWCST. Although this example and FTWCST +* are based on the CFITSIO library, WCSTAB itself is completely +* independent of it. +* +* We assume that the input file, ../C/wcstab.fits, has already been +* generated by running the C version of twcstab. +* +* WCSP and WTB, which are meant to hold addresses, are declared as +* INTEGER arrays of length 2 to accomodate 64-bit machines for which +* sizeof(void *) = 2*sizeof(int). +*======================================================================= + + LOGICAL GOTEND + INTEGER BLOKSZ, I, J, K, IERR, IUNIT, NKEYRC, NREJECT, NWCS, + : NWTB, STATUS, WCSP(2), WTB(2) + CHARACTER KEYREC*80, HEADER*28801, INFILE*16 + +* On some systems, such as Sun Sparc, the struct MUST be aligned +* on a double precision boundary, done here using an equivalence. +* Failure to do this may result in mysterious "bus errors". + INCLUDE 'wcs.inc' + INCLUDE 'wcshdr.inc' + INCLUDE 'wcsfix.inc' + INCLUDE 'getwcstab.inc' + INTEGER STAT(WCSFIX_NWCS) + INTEGER WCS(WCSLEN) + DOUBLE PRECISION DUMMY + EQUIVALENCE (WCS,DUMMY) + + DATA INFILE /'../C/wcstab.fits'/ +*----------------------------------------------------------------------- + WRITE (*, 10) + 10 FORMAT ('Testing WCSTAB and associated routines (twcstab.f)',/, + : '--------------------------------------------------',/) + +* Open the FITS test file. + IUNIT = 1 + STATUS = 0 + CALL FTOPEN (IUNIT, INFILE, 0, BLOKSZ, STATUS) + IF (STATUS.NE.0) THEN + CALL FLUSH(6) + CALL FTRPRT ('STDERR', STATUS) + GO TO 999 + END IF + +* Read the primary header; unfortunately there is no FITSIO +* equivalent of CFITSIO's fits_hdr2str() so do it the long way. + OPEN (UNIT=1, FILE=INFILE, FORM='FORMATTED', ACCESS='DIRECT', + : RECL=80, IOSTAT=IERR) + IF (IERR.NE.0) THEN + WRITE (*, 20) IERR, INFILE + 20 FORMAT ('ERROR',I3,' opening ',A) + GO TO 999 + END IF + +* Read in the FITS header, excluding COMMENT and HISTORY keyrecords. + K = 1 + NKEYRC = 0 + GOTEND = .FALSE. + DO 50 J = 0, 100 + DO 40 I = 1, 36 + READ (1, '(A80)', REC=36*J+I, IOSTAT=IERR) KEYREC + IF (IERR.NE.0) THEN + WRITE (*, 30) IERR + 30 FORMAT ('ERROR',I3,' reading header.') + GO TO 999 + END IF + + IF (KEYREC(:8).EQ.' ') GO TO 40 + IF (KEYREC(:8).EQ.'COMMENT ') GO TO 40 + IF (KEYREC(:8).EQ.'HISTORY ') GO TO 40 + + HEADER(K:) = KEYREC + K = K + 80 + NKEYRC = NKEYRC + 1 + + IF (KEYREC(:8).EQ.'END ') THEN +* An END keyrecord was read, read the rest of the block. + GOTEND = .TRUE. + END IF + 40 CONTINUE + + IF (GOTEND) GO TO 60 + 50 CONTINUE + + 60 CLOSE (UNIT=1) + +*----------------------------------------------------------------------- +* Basic steps required to interpret a FITS WCS header, including -TAB. +*----------------------------------------------------------------------- + +* Parse the primary header of the FITS file. + STATUS = WCSPIH (HEADER, NKEYRC, WCSHDR_all, 2, NREJECT, NWCS, + : WCSP) + IF (STATUS.NE.0) THEN + WRITE (*, 70) STATUS, WCSHDR_ERRMSG(STATUS) + 70 FORMAT ('WCSPIH ERROR',I2,A) + GO TO 999 + END IF + +* Copy into our WCSPRM struct. + IERR = WCSVCOPY (WCSP, 0, WCS) + +* Read coordinate arrays from the binary table extension. + STATUS = WCSGTI (WCS, WCS_NWTB, NWTB) + STATUS = WCSGTI (WCS, WCS_WTB, WTB(1)) + STATUS = FTWCST (IUNIT, NWTB, WTB, STATUS) + IF (STATUS.NE.0) THEN + CALL FLUSH(6) + CALL FTRPRT ('STDERR', STATUS) + GO TO 999 + END IF + +* Fix non-standard WCS keyvalues. + STATUS = WCSFIX (7, 0, WCS, STAT) + IF (STATUS.NE.0) THEN + WRITE (*, 80) (STAT(I), I=1,WCSFIX_NWCS) + 80 FORMAT ('WCSFIX ERROR, status returns: ',10(I2,:,',')) + GO TO 999 + END IF + +*----------------------------------------------------------------------- +* The wcsprm struct is now ready for use. +*----------------------------------------------------------------------- + +* Finished with the FITS file. + CALL FTCLOS (IUNIT, STATUS) + +* Initialize the wcsprm struct, taking memory allocated by FTWCST. + IF (STATUS.EQ.0) STATUS = WCSSET (WCS) + IF (STATUS.NE.0) THEN + WRITE (*, 90) STATUS, WCS_ERRMSG(STATUS) + 90 FORMAT ('WCSSET ERROR',I2,A) + GO TO 998 + END IF + +* Do something with it. + CALL FLUSH(6) + STATUS = WCSPRT (WCS) + +* Clean up. + 998 STATUS = WCSFREE (WCS) + STATUS = WCSVFREE (NWCS, WCSP) + + 999 CONTINUE + END diff --git a/deps/wcslib/Fortran/test/twcstab.out b/deps/wcslib/Fortran/test/twcstab.out new file mode 100644 index 0000000..4d8dec1 --- /dev/null +++ b/deps/wcslib/Fortran/test/twcstab.out @@ -0,0 +1,3325 @@ +Testing WCSTAB and associated routines (twcstab.f) +-------------------------------------------------- + + flag: 137 + naxis: 4 + crpix: 0x
+ 129.00 65.000 0.50000 1.0000 + pc: 0x
+ pc[0][]: 0.99619 0.087156 0.0000 0.0000 + pc[1][]: -0.087156 0.99619 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 1.0000 1.0000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + crval: 0x
+ 136.00 76.000 0.50000 0.0000 + cunit: 0x
+ "deg" + "deg" + "m" + "a" + ctype: 0x
+ "RA---TAB" + "DEC--TAB" + "WAVE-TAB" + "TIME-TAB" + lonpole: UNDEFINED + latpole: 90.000000 + restfrq: 0.000000 + restwav: 0.000000 + npv: 12 + npvmax: 12 + pv: 0x
+ 1 1 1.0000 + 1 2 1.0000 + 1 3 1.0000 + 2 1 1.0000 + 2 2 1.0000 + 2 3 2.0000 + 3 1 2.0000 + 3 2 1.0000 + 3 3 1.0000 + 4 1 2.0000 + 4 2 1.0000 + 4 3 1.0000 + nps: 12 + npsmax: 12 + ps: 0x
+ 1 0 WCS-TABLE + 1 1 CelCoords + 1 2 RAIndex + 2 0 WCS-TABLE + 2 1 CelCoords + 2 2 DecIndex + 3 0 WCS-TABLE + 3 1 WaveCoord + 3 2 WaveIndex + 4 0 WCS-TABLE + 4 1 TimeCoord + 4 2 TimeIndex + cd: 0x
+ cd[0][]: 0.0000 0.0000 0.0000 0.0000 + cd[1][]: 0.0000 0.0000 0.0000 0.0000 + cd[2][]: 0.0000 0.0000 0.0000 0.0000 + cd[3][]: 0.0000 0.0000 0.0000 0.0000 + crota: 0x
+ 0.0000 0.0000 0.0000 0.0000 + altlin: 1 + velref: 0 + alt: ' ' + colnum: 0 + colax: 0x
+ 0 0 0 0 + cname: 0x
+ "Right ascension (J2000)" + "Declination (J2000)" + "Wavelength" + "Observation date" + crder: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + csyer: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + czphs: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + cperi: 0x
+ UNDEFINED UNDEFINED UNDEFINED UNDEFINED + wcsname: "-TAB test file" + timesys: UNDEFINED + trefpos: UNDEFINED + trefdir: UNDEFINED + plephem: UNDEFINED + timeunit: UNDEFINED + dateref: UNDEFINED + mjdref: 0.000000000 0.000000000 + timeoffs: UNDEFINED + dateobs: UNDEFINED + datebeg: UNDEFINED + dateavg: UNDEFINED + dateend: UNDEFINED + mjdobs: UNDEFINED + mjdbeg: UNDEFINED + mjdavg: UNDEFINED + mjdend: UNDEFINED + jepoch: UNDEFINED + bepoch: UNDEFINED + tstart: UNDEFINED + tstop: UNDEFINED + xposure: UNDEFINED + telapse: UNDEFINED + timsyer: UNDEFINED + timrder: UNDEFINED + timedel: UNDEFINED + timepixr: UNDEFINED + obsgeo: UNDEFINED UNDEFINED UNDEFINED + UNDEFINED UNDEFINED UNDEFINED + obsorbit: UNDEFINED + radesys: "FK5" + equinox: 2000.000000000 + specsys: UNDEFINED + ssysobs: UNDEFINED + velosys: UNDEFINED + zsource: UNDEFINED + ssyssrc: UNDEFINED + velangl: UNDEFINED + aux: 0x0 + ntab: 3 + tab: 0x
(see below) + nwtb: 7 + wtb: 0x
(see below) + lngtyp: "RA" + lattyp: "DEC" + lng: 0 + lat: 1 + spec: 2 + time: 3 + cubeface: -1 + chksum: + types: 0x
+ 2500 2501 3510 4520 + lin: (see below) + cel: (see below) + spc: (see below) + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_crval: 0x0 + m_cunit: 0x0 + m_ctype: 0x0 + m_pv: 0x0 + m_ps: 0x0 + m_cd: 0x0 + m_crota: 0x0 + + m_colax: 0x0 + m_cname: 0x0 + m_crder: 0x0 + m_csyer: 0x0 + m_czphs: 0x
(= czphs) + m_cperi: 0x
(= cperi) + m_aux: 0x0 (= aux) + m_tab: 0x0 + m_wtb: 0x0 + +wtb[0].* + i: 1 + m: 1 + kind: c + extnam: WCS-TABLE + extver: 1 + extlev: 1 + ttype: CelCoords + row: 1 + ndim: 3 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[1].* + i: 1 + m: 1 + kind: i + extnam: WCS-TABLE + extver: 1 + extlev: 1 + ttype: RAIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[2].* + i: 2 + m: 2 + kind: i + extnam: WCS-TABLE + extver: 1 + extlev: 1 + ttype: DecIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[3].* + i: 3 + m: 1 + kind: c + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: WaveCoord + row: 1 + ndim: 2 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[4].* + i: 3 + m: 1 + kind: i + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: WaveIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[5].* + i: 4 + m: 1 + kind: c + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: TimeCoord + row: 1 + ndim: 2 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +wtb[6].* + i: 4 + m: 1 + kind: i + extnam: WCS-TABLE + extver: 2 + extlev: 1 + ttype: TimeIndex + row: 1 + ndim: 1 + dimlen: 0x
+ arrayp: 0x
-> 0x
+ +tab[0].* + flag: 137 + M: 2 + K: 0x
+ 70 40 + map: 0x
+ 0 1 + crval: 0x
+ 136.00 76.000 + index: 0x
+ index[0]: 0x
+ 0.0000 4.0000 8.0000 12.000 16.000 + 20.000 24.000 28.000 32.000 36.000 + 40.000 44.000 48.000 52.000 56.000 + 60.000 64.000 68.000 72.000 76.000 + 80.000 84.000 88.000 92.000 96.000 + 100.00 104.00 108.00 112.00 116.00 + 120.00 124.00 128.00 132.00 136.00 + 140.00 144.00 148.00 152.00 156.00 + 160.00 164.00 168.00 172.00 176.00 + 180.00 184.00 188.00 192.00 196.00 + 200.00 204.00 208.00 212.00 216.00 + 220.00 224.00 228.00 232.00 236.00 + 240.00 244.00 248.00 252.00 256.00 + 260.00 264.00 268.00 272.00 276.00 + index[1]: 0x
+ 0.0000 4.0000 8.0000 12.000 16.000 + 20.000 24.000 28.000 32.000 36.000 + 40.000 44.000 48.000 52.000 56.000 + 60.000 64.000 68.000 72.000 76.000 + 80.000 84.000 88.000 92.000 96.000 + 100.00 104.00 108.00 112.00 116.00 + 120.00 124.00 128.00 132.00 136.00 + 140.00 144.00 148.00 152.00 156.00 + coord: 0x
+ (*, 1, 1) 147.58 -31.516 + (*, 2, 1) 147.69 -31.445 + (*, 3, 1) 147.65 -31.392 + (*, 4, 1) 147.64 -31.462 + (*, 5, 1) 147.81 -31.459 + (*, 6, 1) 147.87 -31.398 + (*, 7, 1) 147.98 -31.402 + (*, 8, 1) 147.81 -31.416 + (*, 9, 1) 148.01 -31.446 + (*,10, 1) 147.97 -31.449 + (*,11, 1) 148.17 -31.447 + (*,12, 1) 148.29 -31.405 + (*,13, 1) 148.43 -31.367 + (*,14, 1) 148.49 -31.495 + (*,15, 1) 148.56 -31.473 + (*,16, 1) 148.70 -31.389 + (*,17, 1) 148.71 -31.493 + (*,18, 1) 148.77 -31.394 + (*,19, 1) 148.84 -31.405 + (*,20, 1) 148.72 -31.455 + (*,21, 1) 149.04 -31.488 + (*,22, 1) 149.00 -31.299 + (*,23, 1) 149.17 -31.359 + (*,24, 1) 149.15 -31.411 + (*,25, 1) 149.34 -31.386 + (*,26, 1) 149.33 -31.444 + (*,27, 1) 149.50 -31.366 + (*,28, 1) 149.47 -31.481 + (*,29, 1) 149.50 -31.379 + (*,30, 1) 149.50 -31.424 + (*,31, 1) 149.51 -31.462 + (*,32, 1) 149.88 -31.451 + (*,33, 1) 149.85 -31.462 + (*,34, 1) 149.99 -31.479 + (*,35, 1) 150.01 -31.401 + (*,36, 1) 150.04 -31.455 + (*,37, 1) 150.15 -31.497 + (*,38, 1) 150.34 -31.482 + (*,39, 1) 150.29 -31.463 + (*,40, 1) 150.29 -31.418 + (*,41, 1) 150.35 -31.328 + (*,42, 1) 150.41 -31.390 + (*,43, 1) 150.53 -31.388 + (*,44, 1) 150.72 -31.395 + (*,45, 1) 150.76 -31.519 + (*,46, 1) 150.75 -31.475 + (*,47, 1) 150.72 -31.413 + (*,48, 1) 150.95 -31.434 + (*,49, 1) 151.12 -31.371 + (*,50, 1) 151.06 -31.373 + (*,51, 1) 150.96 -31.437 + (*,52, 1) 151.17 -31.366 + (*,53, 1) 151.38 -31.350 + (*,54, 1) 151.36 -31.396 + (*,55, 1) 151.52 -31.454 + (*,56, 1) 151.54 -31.438 + (*,57, 1) 151.53 -31.417 + (*,58, 1) 151.55 -31.454 + (*,59, 1) 151.77 -31.462 + (*,60, 1) 151.87 -31.401 + (*,61, 1) 151.83 -31.365 + (*,62, 1) 151.98 -31.475 + (*,63, 1) 152.08 -31.468 + (*,64, 1) 152.14 -31.410 + (*,65, 1) 152.19 -31.430 + (*,66, 1) 152.40 -31.460 + (*,67, 1) 152.23 -31.494 + (*,68, 1) 152.34 -31.461 + (*,69, 1) 152.26 -31.432 + (*,70, 1) 152.49 -31.509 + (*, 1, 2) 147.34 -31.303 + (*, 2, 2) 147.48 -31.423 + (*, 3, 2) 147.68 -31.442 + (*, 4, 2) 147.58 -31.353 + (*, 5, 2) 147.85 -31.388 + (*, 6, 2) 147.95 -31.317 + (*, 7, 2) 147.87 -31.262 + (*, 8, 2) 147.98 -31.483 + (*, 9, 2) 148.06 -31.292 + (*,10, 2) 148.23 -31.437 + (*,11, 2) 148.33 -31.416 + (*,12, 2) 148.28 -31.337 + (*,13, 2) 148.46 -31.316 + (*,14, 2) 148.47 -31.307 + (*,15, 2) 148.38 -31.360 + (*,16, 2) 148.57 -31.387 + (*,17, 2) 148.67 -31.311 + (*,18, 2) 148.79 -31.407 + (*,19, 2) 148.87 -31.392 + (*,20, 2) 148.86 -31.367 + (*,21, 2) 148.96 -31.332 + (*,22, 2) 149.05 -31.339 + (*,23, 2) 148.95 -31.399 + (*,24, 2) 149.21 -31.388 + (*,25, 2) 149.26 -31.340 + (*,26, 2) 149.29 -31.305 + (*,27, 2) 149.47 -31.289 + (*,28, 2) 149.53 -31.302 + (*,29, 2) 149.48 -31.278 + (*,30, 2) 149.45 -31.352 + (*,31, 2) 149.71 -31.372 + (*,32, 2) 149.82 -31.414 + (*,33, 2) 149.68 -31.310 + (*,34, 2) 149.84 -31.323 + (*,35, 2) 150.11 -31.284 + (*,36, 2) 150.12 -31.295 + (*,37, 2) 150.21 -31.355 + (*,38, 2) 150.04 -31.432 + (*,39, 2) 150.40 -31.449 + (*,40, 2) 150.44 -31.230 + (*,41, 2) 150.44 -31.349 + (*,42, 2) 150.49 -31.350 + (*,43, 2) 150.54 -31.353 + (*,44, 2) 150.84 -31.460 + (*,45, 2) 150.73 -31.394 + (*,46, 2) 150.87 -31.427 + (*,47, 2) 150.67 -31.278 + (*,48, 2) 150.85 -31.339 + (*,49, 2) 151.08 -31.337 + (*,50, 2) 151.02 -31.377 + (*,51, 2) 151.34 -31.281 + (*,52, 2) 151.16 -31.432 + (*,53, 2) 151.22 -31.295 + (*,54, 2) 151.28 -31.426 + (*,55, 2) 151.57 -31.397 + (*,56, 2) 151.39 -31.268 + (*,57, 2) 151.47 -31.389 + (*,58, 2) 151.47 -31.352 + (*,59, 2) 151.74 -31.336 + (*,60, 2) 151.72 -31.348 + (*,61, 2) 151.74 -31.249 + (*,62, 2) 152.01 -31.298 + (*,63, 2) 152.03 -31.383 + (*,64, 2) 152.05 -31.318 + (*,65, 2) 152.07 -31.288 + (*,66, 2) 152.19 -31.388 + (*,67, 2) 152.26 -31.343 + (*,68, 2) 152.23 -31.384 + (*,69, 2) 152.37 -31.289 + (*,70, 2) 152.61 -31.380 + (*, 1, 3) 147.44 -31.323 + (*, 2, 3) 147.38 -31.229 + (*, 3, 3) 147.51 -31.286 + (*, 4, 3) 147.76 -31.179 + (*, 5, 3) 147.88 -31.280 + (*, 6, 3) 147.82 -31.271 + (*, 7, 3) 147.92 -31.283 + (*, 8, 3) 148.01 -31.330 + (*, 9, 3) 148.15 -31.176 + (*,10, 3) 148.23 -31.316 + (*,11, 3) 148.18 -31.270 + (*,12, 3) 148.51 -31.241 + (*,13, 3) 148.33 -31.312 + (*,14, 3) 148.43 -31.283 + (*,15, 3) 148.51 -31.236 + (*,16, 3) 148.47 -31.302 + (*,17, 3) 148.77 -31.291 + (*,18, 3) 148.78 -31.251 + (*,19, 3) 148.66 -31.287 + (*,20, 3) 148.67 -31.362 + (*,21, 3) 148.93 -31.345 + (*,22, 3) 149.02 -31.284 + (*,23, 3) 149.17 -31.227 + (*,24, 3) 149.14 -31.315 + (*,25, 3) 149.14 -31.231 + (*,26, 3) 149.35 -31.233 + (*,27, 3) 149.33 -31.321 + (*,28, 3) 149.56 -31.374 + (*,29, 3) 149.47 -31.311 + (*,30, 3) 149.74 -31.303 + (*,31, 3) 149.63 -31.270 + (*,32, 3) 149.73 -31.251 + (*,33, 3) 149.91 -31.321 + (*,34, 3) 149.91 -31.320 + (*,35, 3) 149.87 -31.257 + (*,36, 3) 149.90 -31.308 + (*,37, 3) 150.21 -31.273 + (*,38, 3) 150.12 -31.255 + (*,39, 3) 150.35 -31.258 + (*,40, 3) 150.18 -31.266 + (*,41, 3) 150.28 -31.242 + (*,42, 3) 150.47 -31.314 + (*,43, 3) 150.47 -31.229 + (*,44, 3) 150.56 -31.379 + (*,45, 3) 150.80 -31.242 + (*,46, 3) 150.80 -31.345 + (*,47, 3) 150.85 -31.265 + (*,48, 3) 150.90 -31.282 + (*,49, 3) 150.86 -31.256 + (*,50, 3) 151.11 -31.236 + (*,51, 3) 151.22 -31.236 + (*,52, 3) 151.03 -31.301 + (*,53, 3) 151.27 -31.311 + (*,54, 3) 151.33 -31.224 + (*,55, 3) 151.43 -31.268 + (*,56, 3) 151.53 -31.236 + (*,57, 3) 151.41 -31.211 + (*,58, 3) 151.52 -31.362 + (*,59, 3) 151.81 -31.318 + (*,60, 3) 151.93 -31.330 + (*,61, 3) 151.94 -31.308 + (*,62, 3) 151.71 -31.307 + (*,63, 3) 152.25 -31.314 + (*,64, 3) 152.23 -31.271 + (*,65, 3) 152.13 -31.346 + (*,66, 3) 152.13 -31.331 + (*,67, 3) 152.21 -31.292 + (*,68, 3) 152.25 -31.300 + (*,69, 3) 152.45 -31.376 + (*,70, 3) 152.49 -31.230 + (*, 1, 4) 147.42 -31.165 + (*, 2, 4) 147.49 -31.209 + (*, 3, 4) 147.61 -31.202 + (*, 4, 4) 147.57 -31.247 + (*, 5, 4) 147.88 -31.324 + (*, 6, 4) 147.85 -31.101 + (*, 7, 4) 148.06 -31.209 + (*, 8, 4) 148.01 -31.195 + (*, 9, 4) 148.09 -31.165 + (*,10, 4) 148.11 -31.164 + (*,11, 4) 148.45 -31.212 + (*,12, 4) 148.34 -31.156 + (*,13, 4) 148.34 -31.249 + (*,14, 4) 148.52 -31.109 + (*,15, 4) 148.56 -31.203 + (*,16, 4) 148.58 -31.215 + (*,17, 4) 148.63 -31.282 + (*,18, 4) 148.68 -31.243 + (*,19, 4) 148.85 -31.265 + (*,20, 4) 148.88 -31.254 + (*,21, 4) 148.71 -31.281 + (*,22, 4) 149.11 -31.176 + (*,23, 4) 149.05 -31.161 + (*,24, 4) 149.05 -31.223 + (*,25, 4) 149.16 -31.224 + (*,26, 4) 149.30 -31.203 + (*,27, 4) 149.21 -31.164 + (*,28, 4) 149.42 -31.171 + (*,29, 4) 149.45 -31.243 + (*,30, 4) 149.50 -31.245 + (*,31, 4) 149.59 -31.224 + (*,32, 4) 149.64 -31.215 + (*,33, 4) 149.81 -31.196 + (*,34, 4) 149.75 -31.158 + (*,35, 4) 149.97 -31.250 + (*,36, 4) 150.13 -31.214 + (*,37, 4) 150.17 -31.266 + (*,38, 4) 149.99 -31.118 + (*,39, 4) 150.34 -31.229 + (*,40, 4) 150.30 -31.218 + (*,41, 4) 150.24 -31.229 + (*,42, 4) 150.54 -31.360 + (*,43, 4) 150.50 -31.176 + (*,44, 4) 150.68 -31.182 + (*,45, 4) 150.52 -31.188 + (*,46, 4) 150.75 -31.208 + (*,47, 4) 150.73 -31.170 + (*,48, 4) 151.05 -31.112 + (*,49, 4) 151.01 -31.120 + (*,50, 4) 151.07 -31.202 + (*,51, 4) 151.09 -31.224 + (*,52, 4) 151.09 -31.253 + (*,53, 4) 151.30 -31.164 + (*,54, 4) 151.28 -31.222 + (*,55, 4) 151.47 -31.226 + (*,56, 4) 151.54 -31.149 + (*,57, 4) 151.59 -31.233 + (*,58, 4) 151.54 -31.287 + (*,59, 4) 151.82 -31.157 + (*,60, 4) 151.93 -31.042 + (*,61, 4) 151.76 -31.180 + (*,62, 4) 151.95 -31.194 + (*,63, 4) 151.95 -31.268 + (*,64, 4) 152.03 -31.229 + (*,65, 4) 152.10 -31.307 + (*,66, 4) 152.16 -31.283 + (*,67, 4) 152.30 -31.254 + (*,68, 4) 152.28 -31.222 + (*,69, 4) 152.31 -31.169 + (*,70, 4) 152.50 -31.219 + (*, 1, 5) 147.38 -31.115 + (*, 2, 5) 147.51 -31.154 + (*, 3, 5) 147.68 -31.037 + (*, 4, 5) 147.70 -31.165 + (*, 5, 5) 147.84 -31.089 + (*, 6, 5) 147.86 -31.140 + (*, 7, 5) 147.85 -31.264 + (*, 8, 5) 147.93 -31.055 + (*, 9, 5) 147.98 -31.197 + (*,10, 5) 148.01 -31.160 + (*,11, 5) 148.40 -31.111 + (*,12, 5) 148.20 -31.184 + (*,13, 5) 148.36 -31.164 + (*,14, 5) 148.40 -31.083 + (*,15, 5) 148.52 -31.083 + (*,16, 5) 148.47 -31.119 + (*,17, 5) 148.66 -31.211 + (*,18, 5) 148.70 -31.173 + (*,19, 5) 148.65 -31.112 + (*,20, 5) 149.02 -31.030 + (*,21, 5) 149.05 -31.133 + (*,22, 5) 148.96 -31.148 + (*,23, 5) 149.00 -31.209 + (*,24, 5) 149.08 -31.137 + (*,25, 5) 149.18 -31.136 + (*,26, 5) 149.42 -31.111 + (*,27, 5) 149.18 -31.152 + (*,28, 5) 149.59 -31.165 + (*,29, 5) 149.61 -31.144 + (*,30, 5) 149.73 -31.183 + (*,31, 5) 149.58 -31.149 + (*,32, 5) 149.76 -31.138 + (*,33, 5) 149.91 -31.093 + (*,34, 5) 149.95 -31.152 + (*,35, 5) 149.88 -31.109 + (*,36, 5) 150.08 -31.167 + (*,37, 5) 150.14 -31.107 + (*,38, 5) 150.30 -31.150 + (*,39, 5) 150.14 -31.220 + (*,40, 5) 150.08 -31.249 + (*,41, 5) 150.27 -31.179 + (*,42, 5) 150.58 -31.179 + (*,43, 5) 150.52 -31.140 + (*,44, 5) 150.62 -31.113 + (*,45, 5) 150.75 -31.116 + (*,46, 5) 150.90 -31.160 + (*,47, 5) 150.87 -31.029 + (*,48, 5) 151.11 -31.176 + (*,49, 5) 151.12 -31.182 + (*,50, 5) 151.02 -31.056 + (*,51, 5) 151.16 -31.135 + (*,52, 5) 151.25 -31.104 + (*,53, 5) 151.25 -31.107 + (*,54, 5) 151.38 -31.176 + (*,55, 5) 151.58 -31.042 + (*,56, 5) 151.53 -31.089 + (*,57, 5) 151.50 -31.047 + (*,58, 5) 151.60 -31.092 + (*,59, 5) 151.52 -31.195 + (*,60, 5) 151.73 -31.164 + (*,61, 5) 151.85 -31.162 + (*,62, 5) 151.90 -31.144 + (*,63, 5) 151.99 -31.122 + (*,64, 5) 152.03 -31.238 + (*,65, 5) 151.98 -31.146 + (*,66, 5) 152.14 -31.070 + (*,67, 5) 152.31 -31.042 + (*,68, 5) 152.48 -31.139 + (*,69, 5) 152.51 -31.123 + (*,70, 5) 152.30 -31.209 + (*, 1, 6) 147.41 -31.091 + (*, 2, 6) 147.56 -31.023 + (*, 3, 6) 147.79 -31.031 + (*, 4, 6) 147.75 -31.041 + (*, 5, 6) 147.90 -30.988 + (*, 6, 6) 147.99 -31.094 + (*, 7, 6) 147.82 -31.142 + (*, 8, 6) 147.85 -31.139 + (*, 9, 6) 148.00 -31.111 + (*,10, 6) 148.23 -30.986 + (*,11, 6) 148.14 -31.045 + (*,12, 6) 148.31 -31.042 + (*,13, 6) 148.43 -31.031 + (*,14, 6) 148.56 -31.102 + (*,15, 6) 148.56 -31.020 + (*,16, 6) 148.46 -30.871 + (*,17, 6) 148.57 -31.089 + (*,18, 6) 148.61 -31.086 + (*,19, 6) 148.75 -31.042 + (*,20, 6) 148.93 -31.125 + (*,21, 6) 149.00 -31.151 + (*,22, 6) 148.84 -30.944 + (*,23, 6) 148.89 -31.112 + (*,24, 6) 149.14 -31.010 + (*,25, 6) 149.05 -31.071 + (*,26, 6) 149.28 -31.127 + (*,27, 6) 149.41 -31.007 + (*,28, 6) 149.39 -31.070 + (*,29, 6) 149.61 -31.152 + (*,30, 6) 149.69 -31.080 + (*,31, 6) 149.53 -31.047 + (*,32, 6) 149.67 -31.063 + (*,33, 6) 149.81 -31.139 + (*,34, 6) 149.91 -31.016 + (*,35, 6) 150.12 -31.137 + (*,36, 6) 150.01 -30.995 + (*,37, 6) 150.16 -31.002 + (*,38, 6) 150.20 -31.099 + (*,39, 6) 150.18 -31.007 + (*,40, 6) 150.31 -31.059 + (*,41, 6) 150.43 -31.061 + (*,42, 6) 150.42 -31.003 + (*,43, 6) 150.45 -31.038 + (*,44, 6) 150.54 -31.102 + (*,45, 6) 150.57 -31.047 + (*,46, 6) 150.74 -31.148 + (*,47, 6) 150.87 -31.100 + (*,48, 6) 150.82 -31.001 + (*,49, 6) 150.99 -31.139 + (*,50, 6) 151.31 -31.026 + (*,51, 6) 151.37 -30.941 + (*,52, 6) 151.25 -31.050 + (*,53, 6) 151.38 -31.056 + (*,54, 6) 151.25 -31.099 + (*,55, 6) 151.53 -31.121 + (*,56, 6) 151.42 -31.066 + (*,57, 6) 151.37 -30.949 + (*,58, 6) 151.59 -31.069 + (*,59, 6) 151.70 -31.103 + (*,60, 6) 151.77 -31.006 + (*,61, 6) 151.84 -31.046 + (*,62, 6) 151.89 -31.059 + (*,63, 6) 152.19 -30.948 + (*,64, 6) 151.96 -31.071 + (*,65, 6) 152.04 -31.017 + (*,66, 6) 152.08 -30.972 + (*,67, 6) 152.34 -31.108 + (*,68, 6) 152.34 -31.009 + (*,69, 6) 152.55 -31.038 + (*,70, 6) 152.51 -31.071 + (*, 1, 7) 147.70 -30.901 + (*, 2, 7) 147.41 -30.985 + (*, 3, 7) 147.67 -31.015 + (*, 4, 7) 147.56 -31.006 + (*, 5, 7) 147.96 -31.035 + (*, 6, 7) 147.87 -30.997 + (*, 7, 7) 147.79 -31.058 + (*, 8, 7) 148.12 -31.026 + (*, 9, 7) 148.02 -30.974 + (*,10, 7) 148.08 -30.897 + (*,11, 7) 148.17 -30.972 + (*,12, 7) 148.49 -30.962 + (*,13, 7) 148.41 -31.083 + (*,14, 7) 148.25 -31.013 + (*,15, 7) 148.62 -30.929 + (*,16, 7) 148.67 -31.005 + (*,17, 7) 148.77 -30.952 + (*,18, 7) 148.84 -31.024 + (*,19, 7) 148.83 -31.070 + (*,20, 7) 148.95 -31.008 + (*,21, 7) 148.92 -31.050 + (*,22, 7) 149.03 -30.967 + (*,23, 7) 149.10 -31.001 + (*,24, 7) 149.02 -30.901 + (*,25, 7) 149.24 -31.010 + (*,26, 7) 149.19 -30.994 + (*,27, 7) 149.38 -31.011 + (*,28, 7) 149.32 -31.024 + (*,29, 7) 149.55 -31.048 + (*,30, 7) 149.61 -30.986 + (*,31, 7) 149.73 -30.958 + (*,32, 7) 149.77 -30.983 + (*,33, 7) 149.92 -31.025 + (*,34, 7) 150.03 -31.055 + (*,35, 7) 149.85 -31.031 + (*,36, 7) 150.20 -31.000 + (*,37, 7) 150.23 -30.990 + (*,38, 7) 150.38 -30.997 + (*,39, 7) 150.25 -30.940 + (*,40, 7) 150.28 -31.086 + (*,41, 7) 150.43 -30.939 + (*,42, 7) 150.43 -30.993 + (*,43, 7) 150.50 -30.937 + (*,44, 7) 150.72 -30.998 + (*,45, 7) 150.65 -31.038 + (*,46, 7) 150.72 -31.056 + (*,47, 7) 150.94 -30.980 + (*,48, 7) 150.93 -30.998 + (*,49, 7) 150.93 -31.044 + (*,50, 7) 151.23 -30.955 + (*,51, 7) 151.14 -31.033 + (*,52, 7) 151.13 -30.986 + (*,53, 7) 151.20 -31.055 + (*,54, 7) 151.43 -30.924 + (*,55, 7) 151.32 -30.975 + (*,56, 7) 151.41 -30.965 + (*,57, 7) 151.72 -30.997 + (*,58, 7) 151.59 -30.935 + (*,59, 7) 151.76 -30.968 + (*,60, 7) 151.81 -31.029 + (*,61, 7) 151.77 -30.988 + (*,62, 7) 151.88 -31.064 + (*,63, 7) 152.09 -31.107 + (*,64, 7) 151.99 -31.014 + (*,65, 7) 152.02 -31.067 + (*,66, 7) 152.20 -31.006 + (*,67, 7) 152.31 -31.013 + (*,68, 7) 152.37 -31.003 + (*,69, 7) 152.41 -31.042 + (*,70, 7) 152.46 -30.966 + (*, 1, 8) 147.57 -30.924 + (*, 2, 8) 147.47 -30.898 + (*, 3, 8) 147.61 -30.884 + (*, 4, 8) 147.59 -30.845 + (*, 5, 8) 147.87 -30.804 + (*, 6, 8) 147.88 -30.824 + (*, 7, 8) 147.98 -30.871 + (*, 8, 8) 148.10 -30.910 + (*, 9, 8) 147.99 -30.940 + (*,10, 8) 148.22 -30.922 + (*,11, 8) 148.34 -30.886 + (*,12, 8) 148.23 -30.929 + (*,13, 8) 148.19 -30.808 + (*,14, 8) 148.58 -30.968 + (*,15, 8) 148.53 -30.898 + (*,16, 8) 148.62 -31.042 + (*,17, 8) 148.54 -30.863 + (*,18, 8) 148.63 -30.877 + (*,19, 8) 148.64 -30.939 + (*,20, 8) 148.89 -30.967 + (*,21, 8) 148.88 -31.024 + (*,22, 8) 149.14 -30.931 + (*,23, 8) 149.18 -31.009 + (*,24, 8) 149.34 -30.852 + (*,25, 8) 148.86 -30.861 + (*,26, 8) 149.28 -30.904 + (*,27, 8) 149.35 -30.864 + (*,28, 8) 149.52 -30.909 + (*,29, 8) 149.64 -30.908 + (*,30, 8) 149.61 -30.897 + (*,31, 8) 149.73 -30.869 + (*,32, 8) 149.76 -30.905 + (*,33, 8) 149.73 -30.882 + (*,34, 8) 149.85 -30.897 + (*,35, 8) 150.18 -30.917 + (*,36, 8) 150.11 -30.853 + (*,37, 8) 150.13 -30.939 + (*,38, 8) 150.18 -30.874 + (*,39, 8) 150.15 -30.931 + (*,40, 8) 150.53 -30.931 + (*,41, 8) 150.32 -30.971 + (*,42, 8) 150.47 -30.973 + (*,43, 8) 150.50 -31.006 + (*,44, 8) 150.64 -30.915 + (*,45, 8) 150.47 -30.940 + (*,46, 8) 150.83 -31.012 + (*,47, 8) 150.86 -30.944 + (*,48, 8) 150.94 -30.971 + (*,49, 8) 150.96 -30.990 + (*,50, 8) 151.24 -30.849 + (*,51, 8) 151.29 -30.838 + (*,52, 8) 151.19 -30.955 + (*,53, 8) 151.29 -30.947 + (*,54, 8) 151.37 -30.922 + (*,55, 8) 151.30 -30.938 + (*,56, 8) 151.49 -30.909 + (*,57, 8) 151.40 -30.887 + (*,58, 8) 151.56 -30.919 + (*,59, 8) 151.74 -31.009 + (*,60, 8) 152.04 -30.916 + (*,61, 8) 151.81 -30.956 + (*,62, 8) 151.89 -30.878 + (*,63, 8) 151.91 -30.874 + (*,64, 8) 151.95 -30.952 + (*,65, 8) 152.17 -30.881 + (*,66, 8) 152.27 -30.999 + (*,67, 8) 152.15 -30.865 + (*,68, 8) 152.35 -30.900 + (*,69, 8) 152.54 -30.936 + (*,70, 8) 152.48 -30.911 + (*, 1, 9) 147.55 -30.819 + (*, 2, 9) 147.63 -30.835 + (*, 3, 9) 147.75 -30.775 + (*, 4, 9) 147.71 -30.888 + (*, 5, 9) 147.87 -30.834 + (*, 6, 9) 147.98 -30.835 + (*, 7, 9) 147.91 -30.796 + (*, 8, 9) 148.10 -30.882 + (*, 9, 9) 148.15 -30.804 + (*,10, 9) 148.36 -30.873 + (*,11, 9) 148.09 -30.901 + (*,12, 9) 148.23 -30.759 + (*,13, 9) 148.35 -30.833 + (*,14, 9) 148.48 -30.836 + (*,15, 9) 148.50 -30.850 + (*,16, 9) 148.52 -30.896 + (*,17, 9) 148.57 -30.854 + (*,18, 9) 148.81 -30.814 + (*,19, 9) 148.88 -30.788 + (*,20, 9) 149.12 -30.841 + (*,21, 9) 149.08 -30.820 + (*,22, 9) 149.00 -30.871 + (*,23, 9) 149.06 -30.791 + (*,24, 9) 149.16 -30.819 + (*,25, 9) 149.13 -30.821 + (*,26, 9) 149.34 -30.852 + (*,27, 9) 149.52 -30.869 + (*,28, 9) 149.53 -30.842 + (*,29, 9) 149.52 -30.864 + (*,30, 9) 149.72 -30.836 + (*,31, 9) 149.62 -30.788 + (*,32, 9) 149.78 -30.813 + (*,33, 9) 149.84 -30.795 + (*,34, 9) 149.88 -30.851 + (*,35, 9) 150.13 -30.882 + (*,36, 9) 149.94 -30.835 + (*,37, 9) 149.81 -30.833 + (*,38, 9) 150.27 -30.754 + (*,39, 9) 150.18 -30.899 + (*,40, 9) 150.37 -30.913 + (*,41, 9) 150.38 -30.872 + (*,42, 9) 150.68 -30.864 + (*,43, 9) 150.63 -30.773 + (*,44, 9) 150.66 -30.895 + (*,45, 9) 150.88 -30.799 + (*,46, 9) 150.60 -30.889 + (*,47, 9) 150.74 -30.838 + (*,48, 9) 151.07 -30.831 + (*,49, 9) 150.87 -30.869 + (*,50, 9) 150.98 -30.887 + (*,51, 9) 151.30 -30.855 + (*,52, 9) 151.25 -30.869 + (*,53, 9) 151.34 -30.830 + (*,54, 9) 151.38 -30.781 + (*,55, 9) 151.31 -30.805 + (*,56, 9) 151.48 -30.832 + (*,57, 9) 151.47 -30.818 + (*,58, 9) 151.60 -30.788 + (*,59, 9) 151.64 -30.761 + (*,60, 9) 151.77 -30.807 + (*,61, 9) 151.88 -30.816 + (*,62, 9) 151.94 -30.907 + (*,63, 9) 151.94 -30.914 + (*,64, 9) 152.09 -30.855 + (*,65, 9) 152.23 -30.790 + (*,66, 9) 152.14 -30.810 + (*,67, 9) 152.38 -30.888 + (*,68, 9) 152.28 -30.844 + (*,69, 9) 152.42 -30.843 + (*,70, 9) 152.60 -30.819 + (*, 1,10) 147.37 -30.829 + (*, 2,10) 147.60 -30.737 + (*, 3,10) 147.81 -30.705 + (*, 4,10) 147.69 -30.774 + (*, 5,10) 147.74 -30.769 + (*, 6,10) 147.80 -30.745 + (*, 7,10) 147.97 -30.806 + (*, 8,10) 148.08 -30.716 + (*, 9,10) 148.02 -30.788 + (*,10,10) 148.23 -30.783 + (*,11,10) 148.15 -30.762 + (*,12,10) 148.38 -30.820 + (*,13,10) 148.33 -30.676 + (*,14,10) 148.47 -30.733 + (*,15,10) 148.49 -30.818 + (*,16,10) 148.45 -30.847 + (*,17,10) 148.56 -30.761 + (*,18,10) 148.62 -30.765 + (*,19,10) 148.78 -30.757 + (*,20,10) 148.90 -30.769 + (*,21,10) 149.09 -30.814 + (*,22,10) 149.12 -30.825 + (*,23,10) 149.17 -30.791 + (*,24,10) 149.28 -30.826 + (*,25,10) 149.30 -30.817 + (*,26,10) 149.49 -30.775 + (*,27,10) 149.42 -30.702 + (*,28,10) 149.42 -30.784 + (*,29,10) 149.71 -30.851 + (*,30,10) 149.54 -30.728 + (*,31,10) 149.58 -30.784 + (*,32,10) 149.71 -30.717 + (*,33,10) 149.85 -30.739 + (*,34,10) 149.88 -30.798 + (*,35,10) 150.18 -30.861 + (*,36,10) 150.02 -30.766 + (*,37,10) 150.12 -30.825 + (*,38,10) 150.25 -30.822 + (*,39,10) 150.05 -30.650 + (*,40,10) 150.27 -30.798 + (*,41,10) 150.44 -30.707 + (*,42,10) 150.33 -30.659 + (*,43,10) 150.68 -30.744 + (*,44,10) 150.60 -30.797 + (*,45,10) 150.38 -30.719 + (*,46,10) 150.78 -30.771 + (*,47,10) 150.95 -30.775 + (*,48,10) 151.10 -30.715 + (*,49,10) 151.13 -30.756 + (*,50,10) 151.25 -30.745 + (*,51,10) 151.05 -30.731 + (*,52,10) 151.19 -30.675 + (*,53,10) 151.16 -30.717 + (*,54,10) 151.42 -30.743 + (*,55,10) 151.50 -30.694 + (*,56,10) 151.43 -30.823 + (*,57,10) 151.46 -30.766 + (*,58,10) 151.73 -30.808 + (*,59,10) 151.70 -30.776 + (*,60,10) 151.80 -30.790 + (*,61,10) 151.91 -30.846 + (*,62,10) 151.81 -30.794 + (*,63,10) 152.04 -30.764 + (*,64,10) 152.00 -30.767 + (*,65,10) 152.12 -30.758 + (*,66,10) 152.30 -30.744 + (*,67,10) 152.14 -30.839 + (*,68,10) 152.29 -30.727 + (*,69,10) 152.52 -30.740 + (*,70,10) 152.63 -30.795 + (*, 1,11) 147.37 -30.629 + (*, 2,11) 147.73 -30.808 + (*, 3,11) 147.56 -30.720 + (*, 4,11) 147.80 -30.663 + (*, 5,11) 147.94 -30.602 + (*, 6,11) 147.92 -30.641 + (*, 7,11) 148.03 -30.752 + (*, 8,11) 148.01 -30.629 + (*, 9,11) 148.10 -30.723 + (*,10,11) 148.09 -30.736 + (*,11,11) 148.17 -30.708 + (*,12,11) 148.43 -30.649 + (*,13,11) 148.26 -30.691 + (*,14,11) 148.44 -30.683 + (*,15,11) 148.44 -30.636 + (*,16,11) 148.59 -30.673 + (*,17,11) 148.83 -30.631 + (*,18,11) 148.63 -30.704 + (*,19,11) 148.64 -30.643 + (*,20,11) 149.01 -30.692 + (*,21,11) 149.05 -30.666 + (*,22,11) 148.95 -30.701 + (*,23,11) 148.91 -30.723 + (*,24,11) 149.14 -30.717 + (*,25,11) 149.17 -30.677 + (*,26,11) 149.37 -30.593 + (*,27,11) 149.47 -30.647 + (*,28,11) 149.65 -30.770 + (*,29,11) 149.71 -30.783 + (*,30,11) 149.86 -30.685 + (*,31,11) 149.55 -30.736 + (*,32,11) 149.58 -30.677 + (*,33,11) 149.70 -30.711 + (*,34,11) 149.81 -30.761 + (*,35,11) 150.11 -30.706 + (*,36,11) 150.08 -30.657 + (*,37,11) 150.03 -30.707 + (*,38,11) 150.19 -30.667 + (*,39,11) 150.30 -30.713 + (*,40,11) 150.37 -30.688 + (*,41,11) 150.55 -30.632 + (*,42,11) 150.42 -30.681 + (*,43,11) 150.44 -30.731 + (*,44,11) 150.67 -30.742 + (*,45,11) 150.73 -30.829 + (*,46,11) 150.76 -30.610 + (*,47,11) 150.69 -30.654 + (*,48,11) 150.77 -30.742 + (*,49,11) 151.20 -30.755 + (*,50,11) 151.07 -30.814 + (*,51,11) 151.06 -30.655 + (*,52,11) 151.19 -30.714 + (*,53,11) 151.12 -30.705 + (*,54,11) 151.40 -30.652 + (*,55,11) 151.45 -30.700 + (*,56,11) 151.54 -30.615 + (*,57,11) 151.70 -30.606 + (*,58,11) 151.81 -30.662 + (*,59,11) 151.40 -30.731 + (*,60,11) 151.86 -30.762 + (*,61,11) 151.87 -30.622 + (*,62,11) 151.96 -30.670 + (*,63,11) 151.86 -30.653 + (*,64,11) 152.09 -30.651 + (*,65,11) 151.83 -30.756 + (*,66,11) 152.30 -30.723 + (*,67,11) 152.23 -30.733 + (*,68,11) 152.26 -30.674 + (*,69,11) 152.58 -30.653 + (*,70,11) 152.54 -30.742 + (*, 1,12) 147.66 -30.669 + (*, 2,12) 147.45 -30.599 + (*, 3,12) 147.69 -30.650 + (*, 4,12) 147.52 -30.619 + (*, 5,12) 147.69 -30.665 + (*, 6,12) 147.77 -30.590 + (*, 7,12) 147.83 -30.495 + (*, 8,12) 147.95 -30.611 + (*, 9,12) 148.08 -30.599 + (*,10,12) 148.11 -30.613 + (*,11,12) 148.25 -30.656 + (*,12,12) 148.29 -30.693 + (*,13,12) 148.48 -30.600 + (*,14,12) 148.37 -30.624 + (*,15,12) 148.46 -30.592 + (*,16,12) 148.62 -30.563 + (*,17,12) 148.74 -30.636 + (*,18,12) 148.72 -30.640 + (*,19,12) 148.77 -30.640 + (*,20,12) 148.83 -30.654 + (*,21,12) 148.83 -30.644 + (*,22,12) 148.89 -30.656 + (*,23,12) 149.12 -30.569 + (*,24,12) 148.99 -30.597 + (*,25,12) 149.21 -30.649 + (*,26,12) 149.46 -30.643 + (*,27,12) 149.55 -30.541 + (*,28,12) 149.39 -30.614 + (*,29,12) 149.59 -30.669 + (*,30,12) 149.63 -30.671 + (*,31,12) 149.54 -30.655 + (*,32,12) 149.87 -30.650 + (*,33,12) 149.80 -30.604 + (*,34,12) 149.85 -30.614 + (*,35,12) 150.12 -30.640 + (*,36,12) 150.13 -30.628 + (*,37,12) 150.28 -30.527 + (*,38,12) 150.26 -30.631 + (*,39,12) 150.30 -30.583 + (*,40,12) 150.42 -30.604 + (*,41,12) 150.21 -30.597 + (*,42,12) 150.81 -30.582 + (*,43,12) 150.57 -30.625 + (*,44,12) 150.72 -30.748 + (*,45,12) 150.64 -30.558 + (*,46,12) 150.74 -30.655 + (*,47,12) 151.11 -30.665 + (*,48,12) 150.97 -30.578 + (*,49,12) 150.90 -30.587 + (*,50,12) 151.00 -30.683 + (*,51,12) 151.01 -30.549 + (*,52,12) 151.09 -30.643 + (*,53,12) 151.31 -30.569 + (*,54,12) 151.35 -30.702 + (*,55,12) 151.28 -30.591 + (*,56,12) 151.44 -30.671 + (*,57,12) 151.40 -30.616 + (*,58,12) 151.58 -30.622 + (*,59,12) 151.75 -30.636 + (*,60,12) 152.04 -30.477 + (*,61,12) 151.96 -30.737 + (*,62,12) 152.02 -30.503 + (*,63,12) 152.01 -30.640 + (*,64,12) 152.00 -30.635 + (*,65,12) 152.06 -30.621 + (*,66,12) 152.36 -30.594 + (*,67,12) 152.11 -30.553 + (*,68,12) 152.44 -30.629 + (*,69,12) 152.36 -30.668 + (*,70,12) 152.46 -30.664 + (*, 1,13) 147.48 -30.540 + (*, 2,13) 147.51 -30.492 + (*, 3,13) 147.63 -30.563 + (*, 4,13) 147.69 -30.587 + (*, 5,13) 147.67 -30.587 + (*, 6,13) 147.82 -30.496 + (*, 7,13) 147.97 -30.581 + (*, 8,13) 148.01 -30.587 + (*, 9,13) 147.99 -30.576 + (*,10,13) 148.11 -30.543 + (*,11,13) 148.28 -30.523 + (*,12,13) 148.25 -30.650 + (*,13,13) 148.36 -30.578 + (*,14,13) 148.32 -30.506 + (*,15,13) 148.51 -30.549 + (*,16,13) 148.77 -30.522 + (*,17,13) 148.50 -30.512 + (*,18,13) 148.59 -30.572 + (*,19,13) 149.00 -30.544 + (*,20,13) 148.70 -30.617 + (*,21,13) 148.89 -30.595 + (*,22,13) 149.08 -30.645 + (*,23,13) 149.19 -30.631 + (*,24,13) 148.99 -30.553 + (*,25,13) 149.21 -30.579 + (*,26,13) 149.24 -30.603 + (*,27,13) 149.43 -30.622 + (*,28,13) 149.37 -30.499 + (*,29,13) 149.62 -30.527 + (*,30,13) 149.48 -30.577 + (*,31,13) 149.59 -30.630 + (*,32,13) 149.74 -30.566 + (*,33,13) 150.04 -30.512 + (*,34,13) 149.71 -30.531 + (*,35,13) 149.78 -30.568 + (*,36,13) 149.99 -30.626 + (*,37,13) 150.16 -30.586 + (*,38,13) 150.05 -30.593 + (*,39,13) 150.10 -30.489 + (*,40,13) 150.44 -30.522 + (*,41,13) 150.33 -30.570 + (*,42,13) 150.40 -30.570 + (*,43,13) 150.67 -30.517 + (*,44,13) 150.57 -30.489 + (*,45,13) 150.70 -30.524 + (*,46,13) 150.77 -30.580 + (*,47,13) 150.77 -30.514 + (*,48,13) 150.91 -30.548 + (*,49,13) 150.99 -30.582 + (*,50,13) 151.06 -30.583 + (*,51,13) 151.07 -30.517 + (*,52,13) 151.30 -30.525 + (*,53,13) 151.41 -30.551 + (*,54,13) 151.30 -30.464 + (*,55,13) 151.44 -30.537 + (*,56,13) 151.41 -30.609 + (*,57,13) 151.61 -30.567 + (*,58,13) 151.64 -30.531 + (*,59,13) 151.58 -30.603 + (*,60,13) 151.66 -30.496 + (*,61,13) 151.98 -30.568 + (*,62,13) 152.05 -30.625 + (*,63,13) 151.94 -30.626 + (*,64,13) 152.11 -30.447 + (*,65,13) 152.17 -30.420 + (*,66,13) 152.19 -30.588 + (*,67,13) 152.24 -30.584 + (*,68,13) 152.32 -30.522 + (*,69,13) 152.53 -30.565 + (*,70,13) 152.54 -30.548 + (*, 1,14) 147.49 -30.590 + (*, 2,14) 147.65 -30.462 + (*, 3,14) 147.64 -30.443 + (*, 4,14) 147.96 -30.455 + (*, 5,14) 147.87 -30.443 + (*, 6,14) 147.92 -30.476 + (*, 7,14) 147.96 -30.389 + (*, 8,14) 148.00 -30.442 + (*, 9,14) 148.21 -30.526 + (*,10,14) 148.11 -30.490 + (*,11,14) 148.31 -30.461 + (*,12,14) 148.42 -30.443 + (*,13,14) 148.30 -30.531 + (*,14,14) 148.43 -30.493 + (*,15,14) 148.45 -30.524 + (*,16,14) 148.42 -30.455 + (*,17,14) 148.80 -30.486 + (*,18,14) 148.69 -30.487 + (*,19,14) 148.76 -30.449 + (*,20,14) 148.90 -30.455 + (*,21,14) 148.87 -30.400 + (*,22,14) 149.06 -30.450 + (*,23,14) 149.16 -30.481 + (*,24,14) 149.41 -30.510 + (*,25,14) 149.25 -30.361 + (*,26,14) 149.26 -30.442 + (*,27,14) 149.42 -30.478 + (*,28,14) 149.45 -30.454 + (*,29,14) 149.47 -30.531 + (*,30,14) 149.68 -30.517 + (*,31,14) 149.74 -30.458 + (*,32,14) 149.80 -30.495 + (*,33,14) 149.66 -30.572 + (*,34,14) 150.01 -30.424 + (*,35,14) 150.16 -30.507 + (*,36,14) 150.04 -30.337 + (*,37,14) 150.21 -30.441 + (*,38,14) 150.14 -30.442 + (*,39,14) 150.26 -30.444 + (*,40,14) 150.29 -30.474 + (*,41,14) 150.50 -30.453 + (*,42,14) 150.50 -30.450 + (*,43,14) 150.59 -30.538 + (*,44,14) 150.67 -30.412 + (*,45,14) 150.77 -30.462 + (*,46,14) 150.77 -30.462 + (*,47,14) 150.77 -30.392 + (*,48,14) 151.01 -30.389 + (*,49,14) 150.89 -30.514 + (*,50,14) 151.24 -30.365 + (*,51,14) 151.19 -30.522 + (*,52,14) 151.15 -30.478 + (*,53,14) 151.25 -30.451 + (*,54,14) 151.32 -30.498 + (*,55,14) 151.55 -30.441 + (*,56,14) 151.62 -30.499 + (*,57,14) 151.58 -30.505 + (*,58,14) 151.60 -30.397 + (*,59,14) 151.67 -30.461 + (*,60,14) 151.71 -30.435 + (*,61,14) 151.88 -30.402 + (*,62,14) 151.84 -30.513 + (*,63,14) 151.98 -30.473 + (*,64,14) 151.98 -30.519 + (*,65,14) 152.19 -30.520 + (*,66,14) 152.07 -30.594 + (*,67,14) 152.56 -30.521 + (*,68,14) 152.34 -30.514 + (*,69,14) 152.58 -30.515 + (*,70,14) 152.57 -30.523 + (*, 1,15) 147.45 -30.443 + (*, 2,15) 147.83 -30.390 + (*, 3,15) 147.76 -30.450 + (*, 4,15) 147.67 -30.401 + (*, 5,15) 147.71 -30.437 + (*, 6,15) 147.94 -30.484 + (*, 7,15) 147.91 -30.424 + (*, 8,15) 147.85 -30.394 + (*, 9,15) 148.03 -30.443 + (*,10,15) 148.16 -30.384 + (*,11,15) 148.18 -30.335 + (*,12,15) 148.26 -30.289 + (*,13,15) 148.39 -30.382 + (*,14,15) 148.46 -30.353 + (*,15,15) 148.58 -30.413 + (*,16,15) 148.70 -30.384 + (*,17,15) 148.70 -30.342 + (*,18,15) 148.85 -30.433 + (*,19,15) 148.85 -30.424 + (*,20,15) 148.95 -30.344 + (*,21,15) 148.92 -30.402 + (*,22,15) 149.05 -30.359 + (*,23,15) 149.25 -30.451 + (*,24,15) 149.28 -30.499 + (*,25,15) 149.25 -30.386 + (*,26,15) 149.18 -30.409 + (*,27,15) 149.53 -30.360 + (*,28,15) 149.52 -30.375 + (*,29,15) 149.48 -30.418 + (*,30,15) 149.73 -30.437 + (*,31,15) 149.40 -30.374 + (*,32,15) 149.83 -30.382 + (*,33,15) 149.91 -30.414 + (*,34,15) 149.83 -30.396 + (*,35,15) 149.88 -30.348 + (*,36,15) 150.07 -30.311 + (*,37,15) 150.17 -30.395 + (*,38,15) 150.13 -30.487 + (*,39,15) 150.14 -30.444 + (*,40,15) 150.33 -30.352 + (*,41,15) 150.19 -30.314 + (*,42,15) 150.38 -30.413 + (*,43,15) 150.53 -30.384 + (*,44,15) 150.73 -30.448 + (*,45,15) 150.72 -30.366 + (*,46,15) 150.74 -30.355 + (*,47,15) 150.77 -30.432 + (*,48,15) 150.89 -30.346 + (*,49,15) 150.96 -30.353 + (*,50,15) 151.20 -30.404 + (*,51,15) 151.26 -30.414 + (*,52,15) 151.25 -30.358 + (*,53,15) 151.15 -30.341 + (*,54,15) 151.37 -30.398 + (*,55,15) 151.39 -30.392 + (*,56,15) 151.55 -30.471 + (*,57,15) 151.42 -30.437 + (*,58,15) 151.82 -30.449 + (*,59,15) 151.78 -30.357 + (*,60,15) 151.92 -30.469 + (*,61,15) 151.87 -30.382 + (*,62,15) 151.90 -30.384 + (*,63,15) 151.97 -30.413 + (*,64,15) 151.96 -30.416 + (*,65,15) 152.08 -30.416 + (*,66,15) 152.19 -30.399 + (*,67,15) 152.16 -30.389 + (*,68,15) 152.44 -30.396 + (*,69,15) 152.37 -30.442 + (*,70,15) 152.43 -30.416 + (*, 1,16) 147.60 -30.324 + (*, 2,16) 147.55 -30.276 + (*, 3,16) 147.68 -30.280 + (*, 4,16) 147.86 -30.382 + (*, 5,16) 147.89 -30.400 + (*, 6,16) 148.02 -30.385 + (*, 7,16) 147.91 -30.355 + (*, 8,16) 147.94 -30.372 + (*, 9,16) 148.02 -30.415 + (*,10,16) 148.12 -30.312 + (*,11,16) 148.20 -30.245 + (*,12,16) 148.29 -30.266 + (*,13,16) 148.30 -30.357 + (*,14,16) 148.32 -30.300 + (*,15,16) 148.58 -30.308 + (*,16,16) 148.70 -30.287 + (*,17,16) 148.64 -30.271 + (*,18,16) 148.82 -30.381 + (*,19,16) 148.80 -30.359 + (*,20,16) 148.94 -30.213 + (*,21,16) 148.95 -30.358 + (*,22,16) 148.90 -30.255 + (*,23,16) 149.21 -30.327 + (*,24,16) 149.09 -30.296 + (*,25,16) 149.28 -30.238 + (*,26,16) 149.33 -30.378 + (*,27,16) 149.59 -30.384 + (*,28,16) 149.30 -30.334 + (*,29,16) 149.54 -30.254 + (*,30,16) 149.48 -30.351 + (*,31,16) 149.77 -30.327 + (*,32,16) 149.88 -30.275 + (*,33,16) 149.85 -30.327 + (*,34,16) 149.85 -30.310 + (*,35,16) 149.98 -30.389 + (*,36,16) 150.07 -30.286 + (*,37,16) 150.15 -30.255 + (*,38,16) 150.20 -30.296 + (*,39,16) 150.05 -30.305 + (*,40,16) 150.32 -30.322 + (*,41,16) 150.36 -30.337 + (*,42,16) 150.39 -30.294 + (*,43,16) 150.59 -30.311 + (*,44,16) 150.63 -30.348 + (*,45,16) 150.67 -30.193 + (*,46,16) 150.85 -30.278 + (*,47,16) 150.82 -30.376 + (*,48,16) 150.83 -30.350 + (*,49,16) 151.00 -30.292 + (*,50,16) 151.06 -30.276 + (*,51,16) 151.26 -30.384 + (*,52,16) 151.18 -30.368 + (*,53,16) 151.24 -30.352 + (*,54,16) 151.46 -30.339 + (*,55,16) 151.21 -30.284 + (*,56,16) 151.38 -30.365 + (*,57,16) 151.58 -30.303 + (*,58,16) 151.55 -30.267 + (*,59,16) 151.56 -30.317 + (*,60,16) 151.74 -30.274 + (*,61,16) 151.81 -30.363 + (*,62,16) 151.81 -30.322 + (*,63,16) 151.94 -30.388 + (*,64,16) 152.10 -30.322 + (*,65,16) 152.15 -30.361 + (*,66,16) 152.09 -30.248 + (*,67,16) 152.29 -30.339 + (*,68,16) 152.36 -30.310 + (*,69,16) 152.30 -30.402 + (*,70,16) 152.49 -30.385 + (*, 1,17) 147.40 -30.197 + (*, 2,17) 147.62 -30.210 + (*, 3,17) 147.56 -30.288 + (*, 4,17) 147.62 -30.207 + (*, 5,17) 147.78 -30.286 + (*, 6,17) 147.83 -30.378 + (*, 7,17) 147.85 -30.245 + (*, 8,17) 147.82 -30.217 + (*, 9,17) 148.07 -30.250 + (*,10,17) 148.14 -30.280 + (*,11,17) 148.26 -30.308 + (*,12,17) 148.30 -30.235 + (*,13,17) 148.40 -30.155 + (*,14,17) 148.46 -30.304 + (*,15,17) 148.40 -30.355 + (*,16,17) 148.60 -30.251 + (*,17,17) 148.66 -30.282 + (*,18,17) 148.65 -30.235 + (*,19,17) 148.64 -30.184 + (*,20,17) 148.88 -30.374 + (*,21,17) 148.90 -30.292 + (*,22,17) 148.91 -30.210 + (*,23,17) 149.09 -30.317 + (*,24,17) 148.94 -30.217 + (*,25,17) 149.24 -30.205 + (*,26,17) 149.38 -30.186 + (*,27,17) 149.30 -30.222 + (*,28,17) 149.66 -30.286 + (*,29,17) 149.69 -30.266 + (*,30,17) 149.79 -30.328 + (*,31,17) 149.63 -30.236 + (*,32,17) 149.69 -30.228 + (*,33,17) 149.88 -30.181 + (*,34,17) 149.88 -30.237 + (*,35,17) 150.00 -30.220 + (*,36,17) 149.96 -30.199 + (*,37,17) 150.18 -30.236 + (*,38,17) 150.35 -30.159 + (*,39,17) 150.24 -30.269 + (*,40,17) 150.13 -30.252 + (*,41,17) 150.46 -30.258 + (*,42,17) 150.46 -30.293 + (*,43,17) 150.53 -30.284 + (*,44,17) 150.67 -30.221 + (*,45,17) 150.83 -30.289 + (*,46,17) 150.76 -30.341 + (*,47,17) 150.80 -30.255 + (*,48,17) 150.92 -30.193 + (*,49,17) 150.93 -30.176 + (*,50,17) 150.97 -30.190 + (*,51,17) 151.04 -30.363 + (*,52,17) 151.04 -30.281 + (*,53,17) 151.29 -30.263 + (*,54,17) 151.26 -30.221 + (*,55,17) 151.26 -30.259 + (*,56,17) 151.50 -30.251 + (*,57,17) 151.56 -30.212 + (*,58,17) 151.68 -30.218 + (*,59,17) 151.80 -30.263 + (*,60,17) 151.91 -30.263 + (*,61,17) 151.96 -30.255 + (*,62,17) 152.20 -30.239 + (*,63,17) 151.95 -30.330 + (*,64,17) 152.16 -30.243 + (*,65,17) 152.14 -30.283 + (*,66,17) 152.14 -30.289 + (*,67,17) 152.19 -30.365 + (*,68,17) 152.28 -30.202 + (*,69,17) 152.47 -30.242 + (*,70,17) 152.64 -30.185 + (*, 1,18) 147.28 -30.162 + (*, 2,18) 147.18 -30.138 + (*, 3,18) 147.65 -30.260 + (*, 4,18) 147.81 -30.263 + (*, 5,18) 147.67 -30.191 + (*, 6,18) 147.86 -30.174 + (*, 7,18) 147.98 -30.123 + (*, 8,18) 148.25 -30.198 + (*, 9,18) 148.25 -30.271 + (*,10,18) 148.12 -30.228 + (*,11,18) 148.15 -30.141 + (*,12,18) 148.34 -30.238 + (*,13,18) 148.41 -30.184 + (*,14,18) 148.43 -30.114 + (*,15,18) 148.43 -30.267 + (*,16,18) 148.63 -30.201 + (*,17,18) 148.88 -30.235 + (*,18,18) 148.79 -30.123 + (*,19,18) 148.78 -30.105 + (*,20,18) 148.84 -30.252 + (*,21,18) 148.90 -30.248 + (*,22,18) 149.03 -30.148 + (*,23,18) 149.07 -30.188 + (*,24,18) 149.10 -30.173 + (*,25,18) 149.30 -30.220 + (*,26,18) 149.26 -30.227 + (*,27,18) 149.42 -30.195 + (*,28,18) 149.57 -30.134 + (*,29,18) 149.36 -30.183 + (*,30,18) 149.50 -30.149 + (*,31,18) 149.67 -30.211 + (*,32,18) 149.77 -30.234 + (*,33,18) 149.78 -30.113 + (*,34,18) 149.72 -30.188 + (*,35,18) 149.91 -30.240 + (*,36,18) 150.01 -30.038 + (*,37,18) 150.21 -30.222 + (*,38,18) 150.28 -30.296 + (*,39,18) 150.29 -30.104 + (*,40,18) 150.37 -30.233 + (*,41,18) 150.35 -30.198 + (*,42,18) 150.60 -30.208 + (*,43,18) 150.49 -30.056 + (*,44,18) 150.56 -30.116 + (*,45,18) 150.72 -30.155 + (*,46,18) 150.70 -30.170 + (*,47,18) 150.70 -30.138 + (*,48,18) 150.89 -30.183 + (*,49,18) 151.11 -30.170 + (*,50,18) 151.04 -30.112 + (*,51,18) 151.13 -30.186 + (*,52,18) 151.13 -30.198 + (*,53,18) 151.16 -30.251 + (*,54,18) 151.28 -30.176 + (*,55,18) 151.38 -30.157 + (*,56,18) 151.62 -30.166 + (*,57,18) 151.61 -30.168 + (*,58,18) 151.67 -30.164 + (*,59,18) 151.55 -30.147 + (*,60,18) 151.78 -30.233 + (*,61,18) 151.90 -30.184 + (*,62,18) 151.79 -30.212 + (*,63,18) 152.20 -30.244 + (*,64,18) 152.08 -30.133 + (*,65,18) 152.13 -30.188 + (*,66,18) 152.24 -30.247 + (*,67,18) 152.37 -30.237 + (*,68,18) 152.37 -30.082 + (*,69,18) 152.32 -30.169 + (*,70,18) 152.65 -30.071 + (*, 1,19) 147.56 -30.055 + (*, 2,19) 147.44 -30.169 + (*, 3,19) 147.62 -30.099 + (*, 4,19) 147.65 -30.066 + (*, 5,19) 147.66 -30.032 + (*, 6,19) 147.85 -30.099 + (*, 7,19) 147.99 -30.096 + (*, 8,19) 147.99 -30.117 + (*, 9,19) 147.90 -30.127 + (*,10,19) 148.17 -30.150 + (*,11,19) 148.29 -30.198 + (*,12,19) 148.34 -30.106 + (*,13,19) 148.28 -30.163 + (*,14,19) 148.29 -30.092 + (*,15,19) 148.63 -30.122 + (*,16,19) 148.43 -30.098 + (*,17,19) 148.81 -30.095 + (*,18,19) 148.68 -30.137 + (*,19,19) 148.78 -30.128 + (*,20,19) 148.83 -30.081 + (*,21,19) 149.00 -30.073 + (*,22,19) 148.81 -30.114 + (*,23,19) 149.00 -30.127 + (*,24,19) 149.30 -30.183 + (*,25,19) 149.21 -30.118 + (*,26,19) 149.19 -30.125 + (*,27,19) 149.51 -30.065 + (*,28,19) 149.24 -30.087 + (*,29,19) 149.42 -30.027 + (*,30,19) 149.74 -30.118 + (*,31,19) 149.72 -30.149 + (*,32,19) 149.54 -30.141 + (*,33,19) 149.81 -30.073 + (*,34,19) 149.87 -30.164 + (*,35,19) 150.03 -30.102 + (*,36,19) 149.99 -30.085 + (*,37,19) 150.30 -30.159 + (*,38,19) 150.13 -30.055 + (*,39,19) 150.12 -30.172 + (*,40,19) 150.29 -30.035 + (*,41,19) 150.36 -30.110 + (*,42,19) 150.41 -30.085 + (*,43,19) 150.52 -30.007 + (*,44,19) 150.75 -30.018 + (*,45,19) 150.87 -30.031 + (*,46,19) 150.89 -30.059 + (*,47,19) 150.86 -30.149 + (*,48,19) 150.97 -30.097 + (*,49,19) 150.93 -30.064 + (*,50,19) 151.09 -30.101 + (*,51,19) 151.14 -30.133 + (*,52,19) 151.20 -30.060 + (*,53,19) 151.46 -30.197 + (*,54,19) 151.26 -30.056 + (*,55,19) 151.20 -30.145 + (*,56,19) 151.44 -30.070 + (*,57,19) 151.56 -30.112 + (*,58,19) 151.69 -30.175 + (*,59,19) 151.79 -30.081 + (*,60,19) 151.75 -30.142 + (*,61,19) 151.87 -30.083 + (*,62,19) 151.90 -30.155 + (*,63,19) 151.95 -30.140 + (*,64,19) 152.05 -30.047 + (*,65,19) 152.12 -30.138 + (*,66,19) 151.95 -30.080 + (*,67,19) 152.28 -30.086 + (*,68,19) 152.15 -30.020 + (*,69,19) 152.40 -30.037 + (*,70,19) 152.50 -30.115 + (*, 1,20) 147.31 -30.213 + (*, 2,20) 147.74 -30.020 + (*, 3,20) 147.64 -30.104 + (*, 4,20) 147.76 -30.057 + (*, 5,20) 147.52 -29.955 + (*, 6,20) 147.86 -30.021 + (*, 7,20) 148.01 -30.076 + (*, 8,20) 148.04 -29.910 + (*, 9,20) 148.07 -29.944 + (*,10,20) 148.42 -30.043 + (*,11,20) 148.27 -30.047 + (*,12,20) 148.31 -30.009 + (*,13,20) 148.39 -30.070 + (*,14,20) 148.43 -30.080 + (*,15,20) 148.34 -30.004 + (*,16,20) 148.57 -29.940 + (*,17,20) 148.65 -30.030 + (*,18,20) 148.78 -30.037 + (*,19,20) 148.83 -29.993 + (*,20,20) 148.93 -29.991 + (*,21,20) 149.11 -29.937 + (*,22,20) 148.89 -30.125 + (*,23,20) 148.99 -30.033 + (*,24,20) 149.13 -30.066 + (*,25,20) 149.16 -30.047 + (*,26,20) 149.18 -30.089 + (*,27,20) 149.30 -30.087 + (*,28,20) 149.51 -29.943 + (*,29,20) 149.56 -30.063 + (*,30,20) 149.71 -30.171 + (*,31,20) 149.67 -30.139 + (*,32,20) 149.81 -30.002 + (*,33,20) 149.93 -29.996 + (*,34,20) 149.76 -29.974 + (*,35,20) 149.94 -30.087 + (*,36,20) 150.09 -30.068 + (*,37,20) 150.11 -29.987 + (*,38,20) 150.27 -30.008 + (*,39,20) 150.14 -30.026 + (*,40,20) 150.31 -30.039 + (*,41,20) 150.25 -30.026 + (*,42,20) 150.55 -30.020 + (*,43,20) 150.41 -30.042 + (*,44,20) 150.71 -30.069 + (*,45,20) 150.77 -30.067 + (*,46,20) 150.71 -30.112 + (*,47,20) 150.81 -30.050 + (*,48,20) 150.92 -30.021 + (*,49,20) 150.95 -30.024 + (*,50,20) 151.12 -30.062 + (*,51,20) 151.27 -30.034 + (*,52,20) 151.13 -30.105 + (*,53,20) 151.27 -30.046 + (*,54,20) 151.23 -30.026 + (*,55,20) 151.38 -29.970 + (*,56,20) 151.58 -30.027 + (*,57,20) 151.66 -29.986 + (*,58,20) 151.68 -30.072 + (*,59,20) 151.66 -29.952 + (*,60,20) 151.73 -29.973 + (*,61,20) 151.62 -30.050 + (*,62,20) 152.02 -30.018 + (*,63,20) 151.95 -30.063 + (*,64,20) 152.16 -30.075 + (*,65,20) 152.17 -30.089 + (*,66,20) 152.27 -30.076 + (*,67,20) 152.36 -30.089 + (*,68,20) 152.53 -30.083 + (*,69,20) 152.44 -30.077 + (*,70,20) 152.51 -30.022 + (*, 1,21) 147.38 -29.958 + (*, 2,21) 147.60 -30.023 + (*, 3,21) 147.54 -29.995 + (*, 4,21) 147.84 -29.942 + (*, 5,21) 147.82 -30.029 + (*, 6,21) 147.88 -29.965 + (*, 7,21) 147.86 -29.907 + (*, 8,21) 148.08 -29.945 + (*, 9,21) 148.00 -29.875 + (*,10,21) 148.23 -29.907 + (*,11,21) 148.33 -29.969 + (*,12,21) 148.51 -29.905 + (*,13,21) 148.46 -29.940 + (*,14,21) 148.38 -29.954 + (*,15,21) 148.43 -29.950 + (*,16,21) 148.54 -29.922 + (*,17,21) 148.59 -30.023 + (*,18,21) 148.93 -29.917 + (*,19,21) 148.89 -29.951 + (*,20,21) 148.87 -29.940 + (*,21,21) 148.97 -29.980 + (*,22,21) 149.16 -29.923 + (*,23,21) 149.27 -29.936 + (*,24,21) 149.05 -29.977 + (*,25,21) 149.22 -29.925 + (*,26,21) 149.22 -29.970 + (*,27,21) 149.32 -30.004 + (*,28,21) 149.50 -29.964 + (*,29,21) 149.49 -29.974 + (*,30,21) 149.57 -29.991 + (*,31,21) 149.91 -29.961 + (*,32,21) 149.64 -29.889 + (*,33,21) 149.55 -29.950 + (*,34,21) 149.87 -29.988 + (*,35,21) 149.92 -30.062 + (*,36,21) 150.04 -29.986 + (*,37,21) 149.87 -29.898 + (*,38,21) 150.11 -29.872 + (*,39,21) 150.11 -29.906 + (*,40,21) 150.34 -30.040 + (*,41,21) 150.39 -29.915 + (*,42,21) 150.65 -29.910 + (*,43,21) 150.43 -29.976 + (*,44,21) 150.57 -29.975 + (*,45,21) 150.65 -29.937 + (*,46,21) 150.64 -29.999 + (*,47,21) 150.80 -30.032 + (*,48,21) 150.69 -29.867 + (*,49,21) 150.94 -30.006 + (*,50,21) 151.06 -29.964 + (*,51,21) 151.23 -29.994 + (*,52,21) 151.27 -29.858 + (*,53,21) 151.10 -29.960 + (*,54,21) 151.48 -30.008 + (*,55,21) 151.45 -29.920 + (*,56,21) 151.42 -30.010 + (*,57,21) 151.73 -29.964 + (*,58,21) 151.48 -29.962 + (*,59,21) 151.61 -29.963 + (*,60,21) 151.71 -29.911 + (*,61,21) 151.83 -29.957 + (*,62,21) 151.90 -30.019 + (*,63,21) 152.11 -29.990 + (*,64,21) 152.17 -29.911 + (*,65,21) 152.21 -29.957 + (*,66,21) 152.31 -29.989 + (*,67,21) 152.38 -29.965 + (*,68,21) 152.41 -29.975 + (*,69,21) 152.51 -29.922 + (*,70,21) 152.45 -30.085 + (*, 1,22) 147.49 -29.878 + (*, 2,22) 147.50 -29.958 + (*, 3,22) 147.58 -29.807 + (*, 4,22) 147.80 -29.897 + (*, 5,22) 147.68 -29.861 + (*, 6,22) 147.67 -29.822 + (*, 7,22) 147.94 -29.952 + (*, 8,22) 148.09 -29.804 + (*, 9,22) 148.21 -29.865 + (*,10,22) 148.21 -29.980 + (*,11,22) 148.09 -29.838 + (*,12,22) 148.47 -29.890 + (*,13,22) 148.31 -29.863 + (*,14,22) 148.52 -29.941 + (*,15,22) 148.48 -29.881 + (*,16,22) 148.63 -29.868 + (*,17,22) 148.65 -29.899 + (*,18,22) 148.78 -29.936 + (*,19,22) 148.89 -29.864 + (*,20,22) 148.85 -29.837 + (*,21,22) 148.95 -29.863 + (*,22,22) 148.96 -29.873 + (*,23,22) 149.03 -29.932 + (*,24,22) 149.15 -29.901 + (*,25,22) 149.15 -29.910 + (*,26,22) 149.34 -29.825 + (*,27,22) 149.32 -29.967 + (*,28,22) 149.45 -29.856 + (*,29,22) 149.39 -29.911 + (*,30,22) 149.56 -29.876 + (*,31,22) 149.44 -29.955 + (*,32,22) 149.83 -29.871 + (*,33,22) 149.79 -29.857 + (*,34,22) 149.84 -30.006 + (*,35,22) 149.96 -29.849 + (*,36,22) 150.05 -29.919 + (*,37,22) 150.38 -29.867 + (*,38,22) 150.10 -29.924 + (*,39,22) 150.25 -29.887 + (*,40,22) 150.27 -29.832 + (*,41,22) 150.44 -29.892 + (*,42,22) 150.46 -29.934 + (*,43,22) 150.67 -29.944 + (*,44,22) 150.56 -29.851 + (*,45,22) 150.84 -29.864 + (*,46,22) 150.56 -29.936 + (*,47,22) 150.88 -29.932 + (*,48,22) 151.02 -29.863 + (*,49,22) 150.96 -29.852 + (*,50,22) 150.91 -29.877 + (*,51,22) 151.24 -29.958 + (*,52,22) 151.11 -29.843 + (*,53,22) 151.31 -29.953 + (*,54,22) 151.36 -29.974 + (*,55,22) 151.47 -29.926 + (*,56,22) 151.53 -29.885 + (*,57,22) 151.68 -29.930 + (*,58,22) 151.61 -29.829 + (*,59,22) 151.92 -29.871 + (*,60,22) 151.57 -29.832 + (*,61,22) 151.77 -29.891 + (*,62,22) 151.99 -29.907 + (*,63,22) 151.93 -29.887 + (*,64,22) 152.07 -29.877 + (*,65,22) 152.11 -29.939 + (*,66,22) 152.23 -29.917 + (*,67,22) 152.29 -29.892 + (*,68,22) 152.12 -29.885 + (*,69,22) 152.42 -29.918 + (*,70,22) 152.51 -29.817 + (*, 1,23) 147.51 -29.841 + (*, 2,23) 147.67 -29.772 + (*, 3,23) 147.80 -29.820 + (*, 4,23) 147.60 -29.717 + (*, 5,23) 147.80 -29.784 + (*, 6,23) 147.88 -29.713 + (*, 7,23) 147.73 -29.869 + (*, 8,23) 147.88 -29.869 + (*, 9,23) 148.27 -29.881 + (*,10,23) 148.22 -29.790 + (*,11,23) 148.24 -29.884 + (*,12,23) 148.38 -29.822 + (*,13,23) 148.29 -29.876 + (*,14,23) 148.50 -29.725 + (*,15,23) 148.64 -29.818 + (*,16,23) 148.73 -29.852 + (*,17,23) 148.50 -29.779 + (*,18,23) 148.46 -29.823 + (*,19,23) 148.93 -29.832 + (*,20,23) 148.98 -29.829 + (*,21,23) 148.90 -29.836 + (*,22,23) 149.09 -29.790 + (*,23,23) 149.30 -29.819 + (*,24,23) 149.08 -29.687 + (*,25,23) 149.02 -29.835 + (*,26,23) 149.34 -29.819 + (*,27,23) 149.36 -29.875 + (*,28,23) 149.47 -29.827 + (*,29,23) 149.55 -29.794 + (*,30,23) 149.86 -29.751 + (*,31,23) 149.75 -29.849 + (*,32,23) 149.68 -29.741 + (*,33,23) 149.81 -29.765 + (*,34,23) 149.83 -29.876 + (*,35,23) 149.90 -29.838 + (*,36,23) 150.04 -29.838 + (*,37,23) 150.07 -29.810 + (*,38,23) 150.28 -29.853 + (*,39,23) 150.22 -29.824 + (*,40,23) 150.31 -29.713 + (*,41,23) 150.41 -29.829 + (*,42,23) 150.44 -29.823 + (*,43,23) 150.62 -29.859 + (*,44,23) 150.64 -29.881 + (*,45,23) 150.71 -29.882 + (*,46,23) 150.75 -29.780 + (*,47,23) 150.81 -29.933 + (*,48,23) 150.77 -29.784 + (*,49,23) 151.05 -29.902 + (*,50,23) 150.94 -29.900 + (*,51,23) 151.11 -29.868 + (*,52,23) 151.26 -29.829 + (*,53,23) 151.48 -29.810 + (*,54,23) 151.60 -29.778 + (*,55,23) 151.43 -29.803 + (*,56,23) 151.44 -29.759 + (*,57,23) 151.36 -29.742 + (*,58,23) 151.65 -29.770 + (*,59,23) 151.60 -29.852 + (*,60,23) 151.77 -29.856 + (*,61,23) 151.87 -29.908 + (*,62,23) 151.77 -29.816 + (*,63,23) 152.03 -29.829 + (*,64,23) 152.18 -29.874 + (*,65,23) 152.08 -29.865 + (*,66,23) 152.30 -29.795 + (*,67,23) 152.26 -29.766 + (*,68,23) 152.37 -29.780 + (*,69,23) 152.38 -29.851 + (*,70,23) 152.41 -29.832 + (*, 1,24) 147.47 -29.771 + (*, 2,24) 147.60 -29.773 + (*, 3,24) 147.77 -29.872 + (*, 4,24) 147.74 -29.776 + (*, 5,24) 147.73 -29.701 + (*, 6,24) 147.85 -29.668 + (*, 7,24) 147.85 -29.753 + (*, 8,24) 148.14 -29.725 + (*, 9,24) 148.17 -29.786 + (*,10,24) 148.18 -29.776 + (*,11,24) 148.11 -29.728 + (*,12,24) 148.33 -29.735 + (*,13,24) 148.38 -29.697 + (*,14,24) 148.59 -29.811 + (*,15,24) 148.55 -29.806 + (*,16,24) 148.71 -29.756 + (*,17,24) 148.74 -29.714 + (*,18,24) 148.72 -29.784 + (*,19,24) 148.82 -29.768 + (*,20,24) 148.88 -29.754 + (*,21,24) 148.86 -29.779 + (*,22,24) 148.91 -29.711 + (*,23,24) 149.02 -29.751 + (*,24,24) 149.16 -29.799 + (*,25,24) 149.31 -29.686 + (*,26,24) 149.46 -29.765 + (*,27,24) 149.53 -29.791 + (*,28,24) 149.30 -29.698 + (*,29,24) 149.31 -29.807 + (*,30,24) 149.67 -29.837 + (*,31,24) 149.80 -29.794 + (*,32,24) 149.63 -29.713 + (*,33,24) 149.72 -29.742 + (*,34,24) 149.79 -29.763 + (*,35,24) 150.00 -29.739 + (*,36,24) 150.08 -29.700 + (*,37,24) 150.29 -29.773 + (*,38,24) 150.29 -29.820 + (*,39,24) 150.25 -29.687 + (*,40,24) 150.52 -29.747 + (*,41,24) 150.36 -29.709 + (*,42,24) 150.30 -29.806 + (*,43,24) 150.60 -29.839 + (*,44,24) 150.49 -29.677 + (*,45,24) 150.55 -29.719 + (*,46,24) 150.68 -29.725 + (*,47,24) 150.71 -29.748 + (*,48,24) 150.78 -29.786 + (*,49,24) 151.10 -29.758 + (*,50,24) 150.97 -29.696 + (*,51,24) 151.07 -29.723 + (*,52,24) 151.17 -29.747 + (*,53,24) 151.35 -29.744 + (*,54,24) 151.36 -29.812 + (*,55,24) 151.38 -29.682 + (*,56,24) 151.50 -29.815 + (*,57,24) 151.63 -29.739 + (*,58,24) 151.49 -29.787 + (*,59,24) 151.92 -29.781 + (*,60,24) 151.81 -29.798 + (*,61,24) 151.98 -29.753 + (*,62,24) 151.90 -29.792 + (*,63,24) 152.00 -29.697 + (*,64,24) 152.06 -29.785 + (*,65,24) 152.06 -29.833 + (*,66,24) 152.22 -29.803 + (*,67,24) 152.24 -29.806 + (*,68,24) 152.64 -29.721 + (*,69,24) 152.35 -29.729 + (*,70,24) 152.57 -29.754 + (*, 1,25) 147.49 -29.588 + (*, 2,25) 147.41 -29.726 + (*, 3,25) 147.87 -29.711 + (*, 4,25) 147.67 -29.635 + (*, 5,25) 147.76 -29.555 + (*, 6,25) 147.93 -29.634 + (*, 7,25) 147.83 -29.631 + (*, 8,25) 148.01 -29.611 + (*, 9,25) 148.08 -29.710 + (*,10,25) 148.14 -29.676 + (*,11,25) 148.25 -29.683 + (*,12,25) 148.43 -29.682 + (*,13,25) 148.57 -29.745 + (*,14,25) 148.40 -29.625 + (*,15,25) 148.77 -29.647 + (*,16,25) 148.58 -29.697 + (*,17,25) 148.82 -29.767 + (*,18,25) 148.60 -29.699 + (*,19,25) 148.87 -29.709 + (*,20,25) 148.96 -29.767 + (*,21,25) 148.93 -29.724 + (*,22,25) 148.98 -29.636 + (*,23,25) 149.13 -29.673 + (*,24,25) 149.23 -29.645 + (*,25,25) 149.24 -29.687 + (*,26,25) 149.27 -29.739 + (*,27,25) 149.47 -29.724 + (*,28,25) 149.45 -29.703 + (*,29,25) 149.71 -29.681 + (*,30,25) 149.55 -29.733 + (*,31,25) 149.61 -29.685 + (*,32,25) 149.77 -29.672 + (*,33,25) 149.93 -29.742 + (*,34,25) 149.84 -29.619 + (*,35,25) 149.88 -29.706 + (*,36,25) 149.76 -29.726 + (*,37,25) 150.04 -29.593 + (*,38,25) 150.21 -29.675 + (*,39,25) 150.33 -29.652 + (*,40,25) 150.43 -29.671 + (*,41,25) 150.45 -29.659 + (*,42,25) 150.50 -29.695 + (*,43,25) 150.68 -29.681 + (*,44,25) 150.49 -29.595 + (*,45,25) 150.76 -29.670 + (*,46,25) 150.81 -29.676 + (*,47,25) 150.94 -29.690 + (*,48,25) 150.98 -29.588 + (*,49,25) 151.10 -29.647 + (*,50,25) 151.22 -29.615 + (*,51,25) 151.22 -29.643 + (*,52,25) 151.16 -29.704 + (*,53,25) 151.37 -29.584 + (*,54,25) 151.51 -29.609 + (*,55,25) 151.45 -29.659 + (*,56,25) 151.63 -29.581 + (*,57,25) 151.39 -29.677 + (*,58,25) 151.47 -29.700 + (*,59,25) 151.60 -29.744 + (*,60,25) 151.77 -29.715 + (*,61,25) 151.87 -29.664 + (*,62,25) 151.77 -29.683 + (*,63,25) 152.03 -29.660 + (*,64,25) 152.00 -29.622 + (*,65,25) 152.08 -29.636 + (*,66,25) 152.12 -29.726 + (*,67,25) 152.31 -29.605 + (*,68,25) 152.39 -29.731 + (*,69,25) 152.35 -29.638 + (*,70,25) 152.47 -29.664 + (*, 1,26) 147.47 -29.596 + (*, 2,26) 147.43 -29.489 + (*, 3,26) 147.79 -29.587 + (*, 4,26) 147.87 -29.644 + (*, 5,26) 147.68 -29.542 + (*, 6,26) 147.82 -29.536 + (*, 7,26) 147.80 -29.542 + (*, 8,26) 147.97 -29.564 + (*, 9,26) 148.27 -29.592 + (*,10,26) 148.24 -29.583 + (*,11,26) 148.18 -29.664 + (*,12,26) 148.23 -29.528 + (*,13,26) 148.52 -29.576 + (*,14,26) 148.54 -29.499 + (*,15,26) 148.54 -29.516 + (*,16,26) 148.60 -29.575 + (*,17,26) 148.70 -29.643 + (*,18,26) 148.92 -29.617 + (*,19,26) 148.72 -29.617 + (*,20,26) 148.70 -29.608 + (*,21,26) 148.91 -29.653 + (*,22,26) 149.17 -29.564 + (*,23,26) 149.15 -29.537 + (*,24,26) 149.30 -29.662 + (*,25,26) 149.24 -29.647 + (*,26,26) 149.15 -29.570 + (*,27,26) 149.59 -29.537 + (*,28,26) 149.52 -29.590 + (*,29,26) 149.48 -29.627 + (*,30,26) 149.50 -29.632 + (*,31,26) 149.87 -29.646 + (*,32,26) 149.80 -29.527 + (*,33,26) 149.79 -29.614 + (*,34,26) 149.94 -29.606 + (*,35,26) 149.98 -29.572 + (*,36,26) 149.93 -29.623 + (*,37,26) 150.11 -29.583 + (*,38,26) 150.14 -29.609 + (*,39,26) 150.26 -29.647 + (*,40,26) 150.32 -29.513 + (*,41,26) 150.00 -29.557 + (*,42,26) 150.47 -29.545 + (*,43,26) 150.48 -29.619 + (*,44,26) 150.62 -29.539 + (*,45,26) 150.77 -29.553 + (*,46,26) 150.60 -29.525 + (*,47,26) 150.91 -29.656 + (*,48,26) 150.90 -29.674 + (*,49,26) 150.89 -29.663 + (*,50,26) 151.05 -29.654 + (*,51,26) 151.31 -29.600 + (*,52,26) 151.27 -29.691 + (*,53,26) 151.12 -29.661 + (*,54,26) 151.41 -29.595 + (*,55,26) 151.25 -29.587 + (*,56,26) 151.58 -29.565 + (*,57,26) 151.49 -29.534 + (*,58,26) 151.62 -29.618 + (*,59,26) 151.65 -29.561 + (*,60,26) 151.81 -29.601 + (*,61,26) 151.84 -29.642 + (*,62,26) 151.79 -29.586 + (*,63,26) 151.94 -29.565 + (*,64,26) 152.08 -29.627 + (*,65,26) 152.00 -29.618 + (*,66,26) 152.03 -29.569 + (*,67,26) 152.30 -29.586 + (*,68,26) 152.10 -29.636 + (*,69,26) 152.38 -29.619 + (*,70,26) 152.67 -29.592 + (*, 1,27) 147.55 -29.626 + (*, 2,27) 147.45 -29.567 + (*, 3,27) 147.44 -29.581 + (*, 4,27) 147.64 -29.599 + (*, 5,27) 147.66 -29.553 + (*, 6,27) 147.91 -29.592 + (*, 7,27) 147.92 -29.564 + (*, 8,27) 147.97 -29.483 + (*, 9,27) 148.10 -29.527 + (*,10,27) 148.19 -29.570 + (*,11,27) 148.36 -29.464 + (*,12,27) 148.25 -29.555 + (*,13,27) 148.39 -29.535 + (*,14,27) 148.41 -29.545 + (*,15,27) 148.75 -29.498 + (*,16,27) 148.66 -29.580 + (*,17,27) 148.74 -29.447 + (*,18,27) 148.67 -29.529 + (*,19,27) 148.73 -29.535 + (*,20,27) 148.74 -29.538 + (*,21,27) 148.88 -29.521 + (*,22,27) 149.07 -29.538 + (*,23,27) 148.98 -29.484 + (*,24,27) 149.23 -29.528 + (*,25,27) 149.33 -29.472 + (*,26,27) 149.42 -29.595 + (*,27,27) 149.46 -29.416 + (*,28,27) 149.43 -29.526 + (*,29,27) 149.37 -29.489 + (*,30,27) 149.43 -29.558 + (*,31,27) 149.64 -29.604 + (*,32,27) 149.64 -29.441 + (*,33,27) 149.83 -29.510 + (*,34,27) 150.00 -29.337 + (*,35,27) 149.85 -29.565 + (*,36,27) 150.04 -29.506 + (*,37,27) 149.91 -29.481 + (*,38,27) 150.31 -29.525 + (*,39,27) 150.29 -29.483 + (*,40,27) 150.40 -29.517 + (*,41,27) 150.28 -29.526 + (*,42,27) 150.46 -29.524 + (*,43,27) 150.52 -29.569 + (*,44,27) 150.69 -29.584 + (*,45,27) 150.73 -29.413 + (*,46,27) 150.74 -29.446 + (*,47,27) 150.66 -29.579 + (*,48,27) 151.02 -29.586 + (*,49,27) 150.97 -29.522 + (*,50,27) 150.95 -29.529 + (*,51,27) 151.21 -29.446 + (*,52,27) 151.13 -29.464 + (*,53,27) 151.29 -29.555 + (*,54,27) 151.30 -29.492 + (*,55,27) 151.40 -29.525 + (*,56,27) 151.32 -29.622 + (*,57,27) 151.49 -29.626 + (*,58,27) 151.81 -29.542 + (*,59,27) 151.65 -29.543 + (*,60,27) 151.87 -29.584 + (*,61,27) 151.74 -29.591 + (*,62,27) 151.84 -29.460 + (*,63,27) 151.94 -29.557 + (*,64,27) 151.96 -29.463 + (*,65,27) 152.04 -29.577 + (*,66,27) 152.36 -29.566 + (*,67,27) 152.29 -29.547 + (*,68,27) 152.36 -29.529 + (*,69,27) 152.50 -29.522 + (*,70,27) 152.53 -29.592 + (*, 1,28) 147.51 -29.455 + (*, 2,28) 147.40 -29.469 + (*, 3,28) 147.51 -29.425 + (*, 4,28) 147.79 -29.464 + (*, 5,28) 147.84 -29.464 + (*, 6,28) 147.84 -29.447 + (*, 7,28) 147.99 -29.409 + (*, 8,28) 148.13 -29.506 + (*, 9,28) 148.22 -29.495 + (*,10,28) 148.09 -29.406 + (*,11,28) 148.07 -29.443 + (*,12,28) 148.17 -29.412 + (*,13,28) 148.51 -29.469 + (*,14,28) 148.37 -29.453 + (*,15,28) 148.30 -29.519 + (*,16,28) 148.58 -29.496 + (*,17,28) 148.75 -29.461 + (*,18,28) 148.85 -29.452 + (*,19,28) 148.73 -29.449 + (*,20,28) 148.86 -29.509 + (*,21,28) 148.96 -29.523 + (*,22,28) 149.17 -29.420 + (*,23,28) 149.05 -29.400 + (*,24,28) 149.12 -29.468 + (*,25,28) 149.12 -29.455 + (*,26,28) 149.43 -29.505 + (*,27,28) 149.43 -29.507 + (*,28,28) 149.24 -29.516 + (*,29,28) 149.48 -29.420 + (*,30,28) 149.52 -29.441 + (*,31,28) 149.83 -29.388 + (*,32,28) 149.79 -29.423 + (*,33,28) 149.78 -29.376 + (*,34,28) 150.06 -29.536 + (*,35,28) 149.89 -29.553 + (*,36,28) 150.11 -29.345 + (*,37,28) 150.08 -29.354 + (*,38,28) 150.06 -29.559 + (*,39,28) 150.24 -29.498 + (*,40,28) 150.31 -29.498 + (*,41,28) 150.29 -29.502 + (*,42,28) 150.36 -29.483 + (*,43,28) 150.48 -29.449 + (*,44,28) 150.50 -29.477 + (*,45,28) 150.64 -29.494 + (*,46,28) 150.62 -29.447 + (*,47,28) 150.85 -29.420 + (*,48,28) 150.83 -29.464 + (*,49,28) 150.89 -29.487 + (*,50,28) 150.98 -29.472 + (*,51,28) 151.25 -29.471 + (*,52,28) 151.19 -29.472 + (*,53,28) 151.21 -29.506 + (*,54,28) 151.36 -29.473 + (*,55,28) 151.48 -29.441 + (*,56,28) 151.72 -29.404 + (*,57,28) 151.30 -29.423 + (*,58,28) 151.60 -29.473 + (*,59,28) 151.60 -29.431 + (*,60,28) 151.90 -29.425 + (*,61,28) 151.80 -29.472 + (*,62,28) 152.05 -29.482 + (*,63,28) 151.80 -29.482 + (*,64,28) 152.22 -29.427 + (*,65,28) 152.07 -29.526 + (*,66,28) 152.37 -29.400 + (*,67,28) 152.33 -29.347 + (*,68,28) 152.24 -29.389 + (*,69,28) 152.42 -29.414 + (*,70,28) 152.39 -29.523 + (*, 1,29) 147.67 -29.379 + (*, 2,29) 147.73 -29.380 + (*, 3,29) 147.54 -29.306 + (*, 4,29) 147.84 -29.454 + (*, 5,29) 147.70 -29.444 + (*, 6,29) 147.81 -29.325 + (*, 7,29) 148.04 -29.364 + (*, 8,29) 147.99 -29.397 + (*, 9,29) 148.19 -29.405 + (*,10,29) 148.11 -29.263 + (*,11,29) 148.18 -29.345 + (*,12,29) 148.32 -29.382 + (*,13,29) 148.33 -29.380 + (*,14,29) 148.29 -29.440 + (*,15,29) 148.49 -29.360 + (*,16,29) 148.65 -29.463 + (*,17,29) 148.57 -29.336 + (*,18,29) 148.59 -29.356 + (*,19,29) 148.75 -29.405 + (*,20,29) 148.79 -29.376 + (*,21,29) 148.97 -29.347 + (*,22,29) 149.08 -29.303 + (*,23,29) 149.14 -29.457 + (*,24,29) 149.24 -29.299 + (*,25,29) 149.31 -29.332 + (*,26,29) 149.19 -29.365 + (*,27,29) 149.27 -29.369 + (*,28,29) 149.49 -29.318 + (*,29,29) 149.58 -29.387 + (*,30,29) 149.49 -29.402 + (*,31,29) 149.66 -29.371 + (*,32,29) 149.71 -29.382 + (*,33,29) 149.94 -29.363 + (*,34,29) 150.12 -29.427 + (*,35,29) 149.96 -29.405 + (*,36,29) 149.97 -29.367 + (*,37,29) 150.18 -29.317 + (*,38,29) 150.21 -29.375 + (*,39,29) 150.30 -29.413 + (*,40,29) 150.16 -29.362 + (*,41,29) 150.52 -29.334 + (*,42,29) 150.42 -29.354 + (*,43,29) 150.67 -29.362 + (*,44,29) 150.56 -29.393 + (*,45,29) 150.59 -29.437 + (*,46,29) 150.79 -29.388 + (*,47,29) 150.88 -29.436 + (*,48,29) 150.81 -29.446 + (*,49,29) 151.10 -29.428 + (*,50,29) 150.81 -29.376 + (*,51,29) 151.30 -29.279 + (*,52,29) 151.25 -29.324 + (*,53,29) 151.28 -29.441 + (*,54,29) 151.37 -29.418 + (*,55,29) 151.61 -29.241 + (*,56,29) 151.55 -29.345 + (*,57,29) 151.52 -29.470 + (*,58,29) 151.35 -29.233 + (*,59,29) 151.78 -29.365 + (*,60,29) 151.77 -29.356 + (*,61,29) 151.87 -29.406 + (*,62,29) 152.20 -29.512 + (*,63,29) 152.12 -29.280 + (*,64,29) 152.01 -29.380 + (*,65,29) 152.24 -29.411 + (*,66,29) 152.22 -29.409 + (*,67,29) 152.13 -29.309 + (*,68,29) 152.30 -29.419 + (*,69,29) 152.44 -29.347 + (*,70,29) 152.65 -29.359 + (*, 1,30) 147.54 -29.354 + (*, 2,30) 147.51 -29.205 + (*, 3,30) 147.73 -29.297 + (*, 4,30) 147.71 -29.300 + (*, 5,30) 147.73 -29.320 + (*, 6,30) 147.96 -29.284 + (*, 7,30) 147.93 -29.367 + (*, 8,30) 147.99 -29.150 + (*, 9,30) 148.13 -29.299 + (*,10,30) 148.35 -29.277 + (*,11,30) 148.27 -29.274 + (*,12,30) 148.39 -29.329 + (*,13,30) 148.50 -29.255 + (*,14,30) 148.38 -29.298 + (*,15,30) 148.56 -29.344 + (*,16,30) 148.61 -29.353 + (*,17,30) 148.85 -29.347 + (*,18,30) 148.72 -29.317 + (*,19,30) 148.84 -29.292 + (*,20,30) 148.87 -29.368 + (*,21,30) 148.96 -29.365 + (*,22,30) 148.97 -29.241 + (*,23,30) 149.11 -29.366 + (*,24,30) 148.98 -29.241 + (*,25,30) 149.38 -29.266 + (*,26,30) 149.29 -29.368 + (*,27,30) 149.32 -29.379 + (*,28,30) 149.42 -29.365 + (*,29,30) 149.57 -29.311 + (*,30,30) 149.60 -29.346 + (*,31,30) 149.82 -29.308 + (*,32,30) 149.66 -29.415 + (*,33,30) 149.80 -29.348 + (*,34,30) 149.76 -29.327 + (*,35,30) 149.98 -29.302 + (*,36,30) 149.99 -29.325 + (*,37,30) 150.13 -29.326 + (*,38,30) 150.25 -29.323 + (*,39,30) 150.22 -29.238 + (*,40,30) 150.33 -29.203 + (*,41,30) 150.43 -29.302 + (*,42,30) 150.43 -29.323 + (*,43,30) 150.51 -29.366 + (*,44,30) 150.47 -29.272 + (*,45,30) 150.66 -29.331 + (*,46,30) 150.81 -29.250 + (*,47,30) 150.91 -29.273 + (*,48,30) 151.16 -29.343 + (*,49,30) 150.89 -29.273 + (*,50,30) 151.05 -29.371 + (*,51,30) 151.23 -29.285 + (*,52,30) 151.07 -29.322 + (*,53,30) 151.39 -29.293 + (*,54,30) 151.31 -29.284 + (*,55,30) 151.43 -29.394 + (*,56,30) 151.49 -29.284 + (*,57,30) 151.53 -29.322 + (*,58,30) 151.55 -29.239 + (*,59,30) 151.68 -29.299 + (*,60,30) 151.84 -29.309 + (*,61,30) 152.05 -29.271 + (*,62,30) 152.08 -29.296 + (*,63,30) 151.96 -29.351 + (*,64,30) 152.02 -29.265 + (*,65,30) 152.10 -29.250 + (*,66,30) 152.18 -29.329 + (*,67,30) 152.17 -29.274 + (*,68,30) 152.30 -29.371 + (*,69,30) 152.41 -29.323 + (*,70,30) 152.47 -29.338 + (*, 1,31) 147.44 -29.348 + (*, 2,31) 147.30 -29.201 + (*, 3,31) 147.69 -29.290 + (*, 4,31) 147.83 -29.210 + (*, 5,31) 147.81 -29.217 + (*, 6,31) 147.88 -29.288 + (*, 7,31) 148.13 -29.257 + (*, 8,31) 148.21 -29.176 + (*, 9,31) 148.06 -29.182 + (*,10,31) 148.17 -29.215 + (*,11,31) 148.26 -29.291 + (*,12,31) 148.31 -29.153 + (*,13,31) 148.33 -29.224 + (*,14,31) 148.44 -29.286 + (*,15,31) 148.56 -29.158 + (*,16,31) 148.42 -29.208 + (*,17,31) 148.64 -29.288 + (*,18,31) 148.66 -29.231 + (*,19,31) 148.67 -29.172 + (*,20,31) 148.85 -29.232 + (*,21,31) 148.98 -29.188 + (*,22,31) 149.05 -29.267 + (*,23,31) 149.06 -29.186 + (*,24,31) 149.17 -29.284 + (*,25,31) 149.09 -29.231 + (*,26,31) 149.27 -29.188 + (*,27,31) 149.34 -29.190 + (*,28,31) 149.62 -29.221 + (*,29,31) 149.40 -29.238 + (*,30,31) 149.68 -29.225 + (*,31,31) 149.96 -29.212 + (*,32,31) 149.76 -29.238 + (*,33,31) 149.69 -29.209 + (*,34,31) 149.76 -29.240 + (*,35,31) 149.83 -29.154 + (*,36,31) 150.25 -29.227 + (*,37,31) 150.17 -29.227 + (*,38,31) 150.12 -29.269 + (*,39,31) 150.34 -29.199 + (*,40,31) 150.48 -29.248 + (*,41,31) 150.46 -29.224 + (*,42,31) 150.46 -29.157 + (*,43,31) 150.48 -29.206 + (*,44,31) 150.65 -29.224 + (*,45,31) 150.73 -29.219 + (*,46,31) 150.69 -29.176 + (*,47,31) 150.79 -29.268 + (*,48,31) 150.82 -29.280 + (*,49,31) 150.93 -29.246 + (*,50,31) 151.05 -29.210 + (*,51,31) 151.14 -29.292 + (*,52,31) 150.94 -29.141 + (*,53,31) 151.38 -29.200 + (*,54,31) 151.17 -29.180 + (*,55,31) 151.31 -29.178 + (*,56,31) 151.50 -29.186 + (*,57,31) 151.44 -29.284 + (*,58,31) 151.76 -29.230 + (*,59,31) 151.60 -29.247 + (*,60,31) 151.90 -29.214 + (*,61,31) 151.75 -29.288 + (*,62,31) 152.12 -29.154 + (*,63,31) 151.96 -29.304 + (*,64,31) 152.11 -29.224 + (*,65,31) 152.27 -29.256 + (*,66,31) 152.43 -29.223 + (*,67,31) 152.26 -29.266 + (*,68,31) 152.41 -29.200 + (*,69,31) 152.50 -29.252 + (*,70,31) 152.58 -29.376 + (*, 1,32) 147.51 -29.103 + (*, 2,32) 147.53 -29.177 + (*, 3,32) 147.77 -29.133 + (*, 4,32) 147.86 -29.101 + (*, 5,32) 147.67 -29.130 + (*, 6,32) 147.92 -29.121 + (*, 7,32) 147.96 -29.240 + (*, 8,32) 147.99 -29.117 + (*, 9,32) 148.14 -29.240 + (*,10,32) 148.28 -29.184 + (*,11,32) 148.19 -29.119 + (*,12,32) 148.22 -29.198 + (*,13,32) 148.35 -29.140 + (*,14,32) 148.46 -29.143 + (*,15,32) 148.62 -29.107 + (*,16,32) 148.65 -29.153 + (*,17,32) 148.78 -29.234 + (*,18,32) 148.73 -29.192 + (*,19,32) 148.84 -29.045 + (*,20,32) 148.85 -29.208 + (*,21,32) 148.94 -29.189 + (*,22,32) 149.13 -29.089 + (*,23,32) 149.20 -29.117 + (*,24,32) 149.06 -29.117 + (*,25,32) 149.23 -29.163 + (*,26,32) 149.30 -29.183 + (*,27,32) 149.36 -29.171 + (*,28,32) 149.38 -29.165 + (*,29,32) 149.65 -29.240 + (*,30,32) 149.72 -29.120 + (*,31,32) 149.54 -29.090 + (*,32,32) 150.02 -29.231 + (*,33,32) 149.69 -29.147 + (*,34,32) 149.94 -29.226 + (*,35,32) 150.06 -29.142 + (*,36,32) 149.92 -29.168 + (*,37,32) 150.16 -29.112 + (*,38,32) 150.12 -29.128 + (*,39,32) 150.23 -29.134 + (*,40,32) 150.30 -29.161 + (*,41,32) 150.51 -29.161 + (*,42,32) 150.27 -29.070 + (*,43,32) 150.61 -29.208 + (*,44,32) 150.60 -29.181 + (*,45,32) 150.64 -29.166 + (*,46,32) 150.91 -29.164 + (*,47,32) 150.74 -29.120 + (*,48,32) 150.96 -29.189 + (*,49,32) 150.96 -29.150 + (*,50,32) 150.86 -29.203 + (*,51,32) 151.00 -29.165 + (*,52,32) 151.24 -29.207 + (*,53,32) 151.23 -29.170 + (*,54,32) 151.33 -29.226 + (*,55,32) 151.47 -29.012 + (*,56,32) 151.47 -29.149 + (*,57,32) 151.48 -29.246 + (*,58,32) 151.50 -29.137 + (*,59,32) 151.94 -29.182 + (*,60,32) 151.68 -29.255 + (*,61,32) 151.85 -29.168 + (*,62,32) 151.73 -29.183 + (*,63,32) 152.06 -29.163 + (*,64,32) 152.07 -29.165 + (*,65,32) 152.23 -29.170 + (*,66,32) 152.15 -29.109 + (*,67,32) 152.25 -29.205 + (*,68,32) 152.23 -29.103 + (*,69,32) 152.54 -29.228 + (*,70,32) 152.44 -29.217 + (*, 1,33) 147.41 -29.112 + (*, 2,33) 147.62 -29.066 + (*, 3,33) 147.53 -29.130 + (*, 4,33) 147.88 -29.072 + (*, 5,33) 147.86 -29.058 + (*, 6,33) 147.70 -29.122 + (*, 7,33) 148.03 -29.101 + (*, 8,33) 148.08 -29.085 + (*, 9,33) 148.12 -29.088 + (*,10,33) 148.21 -29.049 + (*,11,33) 148.15 -29.110 + (*,12,33) 148.37 -29.083 + (*,13,33) 148.30 -29.173 + (*,14,33) 148.41 -29.107 + (*,15,33) 148.64 -29.126 + (*,16,33) 148.60 -29.045 + (*,17,33) 148.62 -29.028 + (*,18,33) 148.67 -29.086 + (*,19,33) 148.80 -29.098 + (*,20,33) 148.88 -29.114 + (*,21,33) 148.88 -29.055 + (*,22,33) 149.06 -29.078 + (*,23,33) 148.88 -29.096 + (*,24,33) 149.30 -28.991 + (*,25,33) 149.19 -28.978 + (*,26,33) 149.46 -29.068 + (*,27,33) 149.42 -29.134 + (*,28,33) 149.76 -29.087 + (*,29,33) 149.50 -29.127 + (*,30,33) 149.47 -29.095 + (*,31,33) 149.67 -29.161 + (*,32,33) 149.96 -29.120 + (*,33,33) 149.71 -29.000 + (*,34,33) 149.93 -29.092 + (*,35,33) 150.14 -29.066 + (*,36,33) 150.23 -29.167 + (*,37,33) 150.19 -29.076 + (*,38,33) 150.14 -29.052 + (*,39,33) 150.41 -29.074 + (*,40,33) 150.27 -29.055 + (*,41,33) 150.46 -29.104 + (*,42,33) 150.58 -29.053 + (*,43,33) 150.68 -29.018 + (*,44,33) 150.49 -28.963 + (*,45,33) 150.74 -29.094 + (*,46,33) 150.72 -29.091 + (*,47,33) 150.74 -29.065 + (*,48,33) 151.16 -29.076 + (*,49,33) 150.90 -29.174 + (*,50,33) 151.01 -28.963 + (*,51,33) 151.05 -29.123 + (*,52,33) 151.23 -29.042 + (*,53,33) 151.24 -29.051 + (*,54,33) 151.34 -29.071 + (*,55,33) 151.57 -29.057 + (*,56,33) 151.33 -29.123 + (*,57,33) 151.61 -29.113 + (*,58,33) 151.49 -29.068 + (*,59,33) 151.76 -29.042 + (*,60,33) 151.67 -29.104 + (*,61,33) 151.84 -29.102 + (*,62,33) 151.99 -29.209 + (*,63,33) 152.02 -29.072 + (*,64,33) 152.07 -29.082 + (*,65,33) 152.03 -29.054 + (*,66,33) 152.27 -29.083 + (*,67,33) 152.24 -29.109 + (*,68,33) 152.52 -29.081 + (*,69,33) 152.24 -29.142 + (*,70,33) 152.56 -29.059 + (*, 1,34) 147.48 -28.936 + (*, 2,34) 147.57 -28.980 + (*, 3,34) 147.60 -28.902 + (*, 4,34) 147.93 -29.067 + (*, 5,34) 147.66 -29.049 + (*, 6,34) 147.87 -29.021 + (*, 7,34) 147.79 -28.983 + (*, 8,34) 148.13 -29.062 + (*, 9,34) 148.22 -29.044 + (*,10,34) 147.96 -29.022 + (*,11,34) 148.15 -29.075 + (*,12,34) 148.34 -28.984 + (*,13,34) 148.32 -28.905 + (*,14,34) 148.43 -28.931 + (*,15,34) 148.54 -28.931 + (*,16,34) 148.61 -29.024 + (*,17,34) 148.52 -28.956 + (*,18,34) 148.64 -29.003 + (*,19,34) 148.76 -28.932 + (*,20,34) 148.89 -29.073 + (*,21,34) 149.08 -28.934 + (*,22,34) 149.05 -29.050 + (*,23,34) 149.00 -29.011 + (*,24,34) 149.41 -28.983 + (*,25,34) 149.35 -28.909 + (*,26,34) 149.42 -28.986 + (*,27,34) 149.29 -29.065 + (*,28,34) 149.41 -28.926 + (*,29,34) 149.56 -29.040 + (*,30,34) 149.56 -28.999 + (*,31,34) 149.62 -29.093 + (*,32,34) 149.88 -29.023 + (*,33,34) 149.83 -28.989 + (*,34,34) 149.94 -29.057 + (*,35,34) 149.98 -29.000 + (*,36,34) 150.15 -29.067 + (*,37,34) 149.93 -29.085 + (*,38,34) 150.19 -29.042 + (*,39,34) 150.09 -28.950 + (*,40,34) 150.45 -29.011 + (*,41,34) 150.43 -28.993 + (*,42,34) 150.51 -28.985 + (*,43,34) 150.42 -29.041 + (*,44,34) 150.46 -29.062 + (*,45,34) 150.61 -29.031 + (*,46,34) 150.56 -29.024 + (*,47,34) 150.65 -29.033 + (*,48,34) 150.81 -29.008 + (*,49,34) 150.90 -29.023 + (*,50,34) 150.91 -29.015 + (*,51,34) 151.24 -28.951 + (*,52,34) 151.06 -29.151 + (*,53,34) 151.34 -29.050 + (*,54,34) 151.18 -29.028 + (*,55,34) 151.32 -29.132 + (*,56,34) 151.59 -28.973 + (*,57,34) 151.58 -28.975 + (*,58,34) 151.62 -29.043 + (*,59,34) 151.73 -29.054 + (*,60,34) 151.79 -29.059 + (*,61,34) 151.91 -29.021 + (*,62,34) 151.95 -28.984 + (*,63,34) 151.95 -28.965 + (*,64,34) 152.09 -29.009 + (*,65,34) 152.06 -28.944 + (*,66,34) 152.21 -28.955 + (*,67,34) 152.18 -29.042 + (*,68,34) 152.36 -29.004 + (*,69,34) 152.51 -29.079 + (*,70,34) 152.42 -29.004 + (*, 1,35) 147.72 -28.939 + (*, 2,35) 147.58 -28.910 + (*, 3,35) 147.66 -28.955 + (*, 4,35) 147.70 -28.916 + (*, 5,35) 147.77 -28.984 + (*, 6,35) 147.99 -28.896 + (*, 7,35) 147.85 -28.899 + (*, 8,35) 147.91 -28.938 + (*, 9,35) 148.03 -29.003 + (*,10,35) 148.15 -28.981 + (*,11,35) 148.12 -28.943 + (*,12,35) 148.23 -28.885 + (*,13,35) 148.51 -28.968 + (*,14,35) 148.56 -28.977 + (*,15,35) 148.35 -28.934 + (*,16,35) 148.53 -28.942 + (*,17,35) 148.82 -28.939 + (*,18,35) 148.82 -29.008 + (*,19,35) 148.51 -28.907 + (*,20,35) 149.03 -28.932 + (*,21,35) 148.95 -29.030 + (*,22,35) 148.96 -28.915 + (*,23,35) 149.00 -28.902 + (*,24,35) 149.16 -28.926 + (*,25,35) 149.17 -28.906 + (*,26,35) 149.26 -28.909 + (*,27,35) 149.42 -28.913 + (*,28,35) 149.37 -29.006 + (*,29,35) 149.48 -28.971 + (*,30,35) 149.84 -28.924 + (*,31,35) 149.72 -28.957 + (*,32,35) 149.76 -28.917 + (*,33,35) 149.77 -28.927 + (*,34,35) 150.15 -28.990 + (*,35,35) 149.96 -28.959 + (*,36,35) 149.85 -28.903 + (*,37,35) 150.00 -28.903 + (*,38,35) 150.31 -28.887 + (*,39,35) 150.18 -28.955 + (*,40,35) 150.31 -29.031 + (*,41,35) 150.43 -28.919 + (*,42,35) 150.48 -28.918 + (*,43,35) 150.51 -28.888 + (*,44,35) 150.60 -28.948 + (*,45,35) 150.63 -28.779 + (*,46,35) 150.78 -28.913 + (*,47,35) 150.90 -28.906 + (*,48,35) 150.72 -28.972 + (*,49,35) 151.06 -28.903 + (*,50,35) 151.16 -28.898 + (*,51,35) 151.14 -28.910 + (*,52,35) 151.27 -29.012 + (*,53,35) 151.26 -28.903 + (*,54,35) 151.44 -28.845 + (*,55,35) 151.30 -28.955 + (*,56,35) 151.50 -29.015 + (*,57,35) 151.58 -28.962 + (*,58,35) 151.67 -28.923 + (*,59,35) 151.75 -28.904 + (*,60,35) 151.79 -28.862 + (*,61,35) 151.78 -28.920 + (*,62,35) 151.84 -28.997 + (*,63,35) 151.93 -28.909 + (*,64,35) 152.08 -28.879 + (*,65,35) 152.27 -28.992 + (*,66,35) 152.08 -28.922 + (*,67,35) 152.17 -28.980 + (*,68,35) 152.48 -28.972 + (*,69,35) 152.68 -28.955 + (*,70,35) 152.63 -28.878 + (*, 1,36) 147.63 -28.854 + (*, 2,36) 147.59 -28.949 + (*, 3,36) 147.61 -28.823 + (*, 4,36) 147.47 -28.847 + (*, 5,36) 147.90 -28.897 + (*, 6,36) 147.90 -28.861 + (*, 7,36) 147.93 -28.885 + (*, 8,36) 148.01 -28.841 + (*, 9,36) 148.24 -28.920 + (*,10,36) 148.10 -28.849 + (*,11,36) 148.18 -28.966 + (*,12,36) 148.29 -28.884 + (*,13,36) 148.29 -28.932 + (*,14,36) 148.46 -28.860 + (*,15,36) 148.55 -28.786 + (*,16,36) 148.72 -28.845 + (*,17,36) 148.68 -28.926 + (*,18,36) 148.71 -28.905 + (*,19,36) 148.73 -28.889 + (*,20,36) 148.84 -28.824 + (*,21,36) 149.06 -28.928 + (*,22,36) 149.14 -28.802 + (*,23,36) 149.17 -28.878 + (*,24,36) 149.15 -28.825 + (*,25,36) 149.33 -28.872 + (*,26,36) 149.37 -28.895 + (*,27,36) 149.32 -28.879 + (*,28,36) 149.52 -28.821 + (*,29,36) 149.54 -28.832 + (*,30,36) 149.67 -28.806 + (*,31,36) 149.67 -28.893 + (*,32,36) 149.61 -28.914 + (*,33,36) 149.77 -28.888 + (*,34,36) 150.02 -28.803 + (*,35,36) 149.92 -28.907 + (*,36,36) 150.07 -28.837 + (*,37,36) 150.09 -28.851 + (*,38,36) 150.21 -28.801 + (*,39,36) 150.31 -28.902 + (*,40,36) 150.33 -28.896 + (*,41,36) 150.61 -28.895 + (*,42,36) 150.56 -28.895 + (*,43,36) 150.35 -28.873 + (*,44,36) 150.55 -28.878 + (*,45,36) 150.80 -28.818 + (*,46,36) 150.72 -28.897 + (*,47,36) 150.75 -28.819 + (*,48,36) 151.09 -28.866 + (*,49,36) 150.71 -28.841 + (*,50,36) 151.20 -28.797 + (*,51,36) 151.05 -28.905 + (*,52,36) 151.31 -28.816 + (*,53,36) 151.28 -28.908 + (*,54,36) 151.23 -28.867 + (*,55,36) 151.38 -28.817 + (*,56,36) 151.63 -28.756 + (*,57,36) 151.55 -28.821 + (*,58,36) 151.56 -28.836 + (*,59,36) 151.63 -28.926 + (*,60,36) 151.75 -28.848 + (*,61,36) 151.82 -28.829 + (*,62,36) 151.91 -28.866 + (*,63,36) 152.18 -28.871 + (*,64,36) 152.19 -28.858 + (*,65,36) 152.14 -28.853 + (*,66,36) 152.15 -28.819 + (*,67,36) 152.23 -28.892 + (*,68,36) 152.38 -28.878 + (*,69,36) 152.39 -28.881 + (*,70,36) 152.56 -28.919 + (*, 1,37) 147.52 -28.753 + (*, 2,37) 147.56 -28.792 + (*, 3,37) 147.61 -28.780 + (*, 4,37) 147.77 -28.913 + (*, 5,37) 147.81 -28.767 + (*, 6,37) 147.56 -28.758 + (*, 7,37) 148.01 -28.900 + (*, 8,37) 147.96 -28.793 + (*, 9,37) 147.93 -28.818 + (*,10,37) 148.37 -28.791 + (*,11,37) 148.29 -28.790 + (*,12,37) 148.42 -28.781 + (*,13,37) 148.40 -28.805 + (*,14,37) 148.27 -28.849 + (*,15,37) 148.39 -28.745 + (*,16,37) 148.53 -28.796 + (*,17,37) 148.56 -28.813 + (*,18,37) 148.54 -28.774 + (*,19,37) 148.88 -28.817 + (*,20,37) 148.97 -28.765 + (*,21,37) 148.88 -28.747 + (*,22,37) 149.00 -28.786 + (*,23,37) 149.05 -28.823 + (*,24,37) 149.16 -28.795 + (*,25,37) 149.37 -28.763 + (*,26,37) 149.33 -28.803 + (*,27,37) 149.44 -28.898 + (*,28,37) 149.54 -28.804 + (*,29,37) 149.35 -28.911 + (*,30,37) 149.72 -28.719 + (*,31,37) 149.61 -28.958 + (*,32,37) 149.56 -28.814 + (*,33,37) 149.77 -28.770 + (*,34,37) 149.91 -28.758 + (*,35,37) 149.96 -28.789 + (*,36,37) 150.06 -28.805 + (*,37,37) 150.00 -28.769 + (*,38,37) 150.16 -28.737 + (*,39,37) 150.38 -28.800 + (*,40,37) 150.24 -28.800 + (*,41,37) 150.29 -28.828 + (*,42,37) 150.55 -28.785 + (*,43,37) 150.55 -28.847 + (*,44,37) 150.53 -28.785 + (*,45,37) 150.66 -28.713 + (*,46,37) 150.86 -28.857 + (*,47,37) 150.85 -28.721 + (*,48,37) 150.85 -28.755 + (*,49,37) 151.00 -28.838 + (*,50,37) 151.02 -28.788 + (*,51,37) 151.00 -28.798 + (*,52,37) 151.21 -28.743 + (*,53,37) 151.37 -28.881 + (*,54,37) 151.28 -28.870 + (*,55,37) 151.58 -28.803 + (*,56,37) 151.33 -28.846 + (*,57,37) 151.54 -28.753 + (*,58,37) 151.59 -28.800 + (*,59,37) 151.83 -28.742 + (*,60,37) 151.76 -28.791 + (*,61,37) 151.93 -28.729 + (*,62,37) 151.82 -28.852 + (*,63,37) 151.87 -28.884 + (*,64,37) 152.18 -28.789 + (*,65,37) 152.25 -28.821 + (*,66,37) 152.11 -28.808 + (*,67,37) 152.36 -28.784 + (*,68,37) 152.39 -28.803 + (*,69,37) 152.60 -28.819 + (*,70,37) 152.58 -28.848 + (*, 1,38) 147.59 -28.752 + (*, 2,38) 147.49 -28.764 + (*, 3,38) 147.62 -28.691 + (*, 4,38) 147.79 -28.706 + (*, 5,38) 147.85 -28.696 + (*, 6,38) 147.78 -28.719 + (*, 7,38) 147.96 -28.831 + (*, 8,38) 148.02 -28.719 + (*, 9,38) 148.11 -28.813 + (*,10,38) 148.23 -28.679 + (*,11,38) 148.26 -28.714 + (*,12,38) 148.21 -28.653 + (*,13,38) 148.37 -28.731 + (*,14,38) 148.46 -28.710 + (*,15,38) 148.49 -28.683 + (*,16,38) 148.40 -28.727 + (*,17,38) 148.71 -28.708 + (*,18,38) 148.88 -28.711 + (*,19,38) 148.90 -28.734 + (*,20,38) 148.78 -28.771 + (*,21,38) 149.02 -28.698 + (*,22,38) 148.98 -28.720 + (*,23,38) 149.03 -28.745 + (*,24,38) 149.19 -28.724 + (*,25,38) 149.20 -28.709 + (*,26,38) 149.39 -28.751 + (*,27,38) 149.23 -28.663 + (*,28,38) 149.44 -28.674 + (*,29,38) 149.42 -28.703 + (*,30,38) 149.57 -28.760 + (*,31,38) 149.52 -28.674 + (*,32,38) 149.86 -28.711 + (*,33,38) 149.89 -28.791 + (*,34,38) 149.86 -28.777 + (*,35,38) 149.81 -28.722 + (*,36,38) 150.12 -28.707 + (*,37,38) 149.94 -28.679 + (*,38,38) 150.26 -28.669 + (*,39,38) 150.24 -28.681 + (*,40,38) 150.42 -28.688 + (*,41,38) 150.36 -28.723 + (*,42,38) 150.70 -28.693 + (*,43,38) 150.46 -28.679 + (*,44,38) 150.46 -28.608 + (*,45,38) 150.80 -28.632 + (*,46,38) 150.83 -28.712 + (*,47,38) 151.00 -28.754 + (*,48,38) 150.91 -28.638 + (*,49,38) 150.81 -28.814 + (*,50,38) 151.05 -28.641 + (*,51,38) 151.02 -28.669 + (*,52,38) 151.08 -28.733 + (*,53,38) 151.18 -28.751 + (*,54,38) 151.30 -28.722 + (*,55,38) 151.19 -28.675 + (*,56,38) 151.46 -28.729 + (*,57,38) 151.72 -28.683 + (*,58,38) 151.71 -28.771 + (*,59,38) 151.63 -28.686 + (*,60,38) 151.87 -28.679 + (*,61,38) 151.87 -28.753 + (*,62,38) 151.97 -28.711 + (*,63,38) 151.92 -28.725 + (*,64,38) 152.05 -28.726 + (*,65,38) 152.21 -28.719 + (*,66,38) 152.14 -28.827 + (*,67,38) 152.38 -28.715 + (*,68,38) 152.52 -28.731 + (*,69,38) 152.53 -28.677 + (*,70,38) 152.44 -28.702 + (*, 1,39) 147.52 -28.680 + (*, 2,39) 147.55 -28.552 + (*, 3,39) 147.67 -28.642 + (*, 4,39) 147.73 -28.607 + (*, 5,39) 147.88 -28.683 + (*, 6,39) 147.77 -28.774 + (*, 7,39) 147.87 -28.633 + (*, 8,39) 148.01 -28.565 + (*, 9,39) 148.27 -28.683 + (*,10,39) 148.18 -28.522 + (*,11,39) 148.08 -28.630 + (*,12,39) 148.28 -28.672 + (*,13,39) 148.50 -28.691 + (*,14,39) 148.44 -28.716 + (*,15,39) 148.46 -28.651 + (*,16,39) 148.70 -28.610 + (*,17,39) 148.78 -28.606 + (*,18,39) 148.63 -28.516 + (*,19,39) 148.74 -28.654 + (*,20,39) 148.65 -28.685 + (*,21,39) 148.82 -28.617 + (*,22,39) 149.04 -28.713 + (*,23,39) 149.11 -28.617 + (*,24,39) 149.12 -28.734 + (*,25,39) 149.26 -28.646 + (*,26,39) 149.24 -28.664 + (*,27,39) 149.37 -28.654 + (*,28,39) 149.34 -28.641 + (*,29,39) 149.47 -28.675 + (*,30,39) 149.61 -28.652 + (*,31,39) 149.48 -28.660 + (*,32,39) 149.69 -28.619 + (*,33,39) 149.85 -28.597 + (*,34,39) 149.73 -28.713 + (*,35,39) 149.96 -28.701 + (*,36,39) 150.15 -28.725 + (*,37,39) 150.08 -28.659 + (*,38,39) 150.02 -28.703 + (*,39,39) 150.26 -28.619 + (*,40,39) 150.42 -28.625 + (*,41,39) 150.23 -28.646 + (*,42,39) 150.48 -28.657 + (*,43,39) 150.48 -28.567 + (*,44,39) 150.64 -28.676 + (*,45,39) 150.73 -28.682 + (*,46,39) 150.73 -28.749 + (*,47,39) 150.84 -28.669 + (*,48,39) 150.89 -28.679 + (*,49,39) 151.08 -28.644 + (*,50,39) 151.01 -28.658 + (*,51,39) 151.22 -28.694 + (*,52,39) 151.14 -28.687 + (*,53,39) 151.47 -28.543 + (*,54,39) 151.42 -28.649 + (*,55,39) 151.42 -28.742 + (*,56,39) 151.33 -28.641 + (*,57,39) 151.37 -28.615 + (*,58,39) 151.58 -28.680 + (*,59,39) 151.72 -28.635 + (*,60,39) 151.97 -28.644 + (*,61,39) 151.91 -28.577 + (*,62,39) 151.81 -28.664 + (*,63,39) 152.01 -28.642 + (*,64,39) 152.24 -28.614 + (*,65,39) 152.05 -28.636 + (*,66,39) 152.23 -28.594 + (*,67,39) 152.30 -28.622 + (*,68,39) 152.41 -28.629 + (*,69,39) 152.40 -28.664 + (*,70,39) 152.45 -28.565 + (*, 1,40) 147.63 -28.520 + (*, 2,40) 147.57 -28.594 + (*, 3,40) 147.71 -28.646 + (*, 4,40) 147.65 -28.523 + (*, 5,40) 147.92 -28.610 + (*, 6,40) 147.90 -28.576 + (*, 7,40) 147.91 -28.569 + (*, 8,40) 148.06 -28.579 + (*, 9,40) 148.11 -28.532 + (*,10,40) 148.26 -28.592 + (*,11,40) 148.16 -28.603 + (*,12,40) 148.44 -28.543 + (*,13,40) 148.43 -28.560 + (*,14,40) 148.53 -28.687 + (*,15,40) 148.73 -28.560 + (*,16,40) 148.52 -28.565 + (*,17,40) 148.51 -28.649 + (*,18,40) 148.76 -28.547 + (*,19,40) 148.73 -28.621 + (*,20,40) 148.87 -28.591 + (*,21,40) 148.88 -28.590 + (*,22,40) 149.13 -28.506 + (*,23,40) 148.95 -28.566 + (*,24,40) 149.24 -28.523 + (*,25,40) 149.33 -28.548 + (*,26,40) 149.05 -28.555 + (*,27,40) 149.27 -28.586 + (*,28,40) 149.47 -28.545 + (*,29,40) 149.64 -28.625 + (*,30,40) 149.74 -28.537 + (*,31,40) 149.79 -28.552 + (*,32,40) 149.92 -28.573 + (*,33,40) 149.82 -28.599 + (*,34,40) 149.79 -28.617 + (*,35,40) 150.01 -28.562 + (*,36,40) 150.13 -28.493 + (*,37,40) 150.37 -28.538 + (*,38,40) 149.96 -28.621 + (*,39,40) 150.34 -28.521 + (*,40,40) 150.40 -28.595 + (*,41,40) 150.33 -28.623 + (*,42,40) 150.46 -28.558 + (*,43,40) 150.46 -28.533 + (*,44,40) 150.61 -28.561 + (*,45,40) 150.74 -28.551 + (*,46,40) 150.71 -28.627 + (*,47,40) 150.76 -28.649 + (*,48,40) 151.11 -28.608 + (*,49,40) 151.19 -28.623 + (*,50,40) 150.95 -28.583 + (*,51,40) 151.12 -28.464 + (*,52,40) 151.11 -28.621 + (*,53,40) 151.22 -28.498 + (*,54,40) 151.43 -28.668 + (*,55,40) 151.34 -28.531 + (*,56,40) 151.38 -28.599 + (*,57,40) 151.66 -28.584 + (*,58,40) 151.57 -28.652 + (*,59,40) 151.63 -28.520 + (*,60,40) 151.65 -28.647 + (*,61,40) 151.78 -28.461 + (*,62,40) 152.10 -28.577 + (*,63,40) 152.04 -28.595 + (*,64,40) 152.11 -28.581 + (*,65,40) 152.13 -28.627 + (*,66,40) 152.36 -28.606 + (*,67,40) 152.23 -28.563 + (*,68,40) 152.27 -28.616 + (*,69,40) 152.40 -28.564 + (*,70,40) 152.52 -28.568 + nc: 2800 + sense: 0x
+ 1 1 + p0: 0x
+ 0 0 + delta: 0x
+ 0.0000 0.0000 + extrema: 0x
+ (*,*, 1) 147.57 -31.525 -> 152.52 -31.299 + (*,*, 2) 147.32 -31.483 -> 152.64 -31.230 + (*,*, 3) 147.38 -31.379 -> 152.50 -31.176 + (*,*, 4) 147.41 -31.360 -> 152.52 -31.042 + (*,*, 5) 147.36 -31.264 -> 152.51 -31.029 + (*,*, 6) 147.39 -31.152 -> 152.55 -30.871 + (*,*, 7) 147.41 -31.107 -> 152.47 -30.891 + (*,*, 8) 147.47 -31.042 -> 152.54 -30.804 + (*,*, 9) 147.54 -30.914 -> 152.62 -30.754 + (*,*,10) 147.34 -30.861 -> 152.64 -30.650 + (*,*,11) 147.33 -30.829 -> 152.58 -30.593 + (*,*,12) 147.45 -30.748 -> 152.47 -30.477 + (*,*,13) 147.47 -30.650 -> 152.55 -30.420 + (*,*,14) 147.47 -30.606 -> 152.58 -30.337 + (*,*,15) 147.40 -30.499 -> 152.44 -30.289 + (*,*,16) 147.55 -30.415 -> 152.51 -30.193 + (*,*,17) 147.37 -30.378 -> 152.66 -30.155 + (*,*,18) 147.18 -30.296 -> 152.69 -30.038 + (*,*,19) 147.44 -30.198 -> 152.51 -30.007 + (*,*,20) 147.25 -30.237 -> 152.53 -29.910 + (*,*,21) 147.35 -30.105 -> 152.51 -29.858 + (*,*,22) 147.49 -30.006 -> 152.52 -29.804 + (*,*,23) 147.49 -29.933 -> 152.41 -29.687 + (*,*,24) 147.45 -29.872 -> 152.64 -29.668 + (*,*,25) 147.41 -29.767 -> 152.48 -29.555 + (*,*,26) 147.43 -29.691 -> 152.70 -29.489 + (*,*,27) 147.44 -29.633 -> 152.53 -29.337 + (*,*,28) 147.40 -29.559 -> 152.42 -29.345 + (*,*,29) 147.54 -29.512 -> 152.67 -29.233 + (*,*,30) 147.51 -29.415 -> 152.47 -29.150 + (*,*,31) 147.30 -29.392 -> 152.59 -29.141 + (*,*,32) 147.51 -29.255 -> 152.54 -29.012 + (*,*,33) 147.38 -29.209 -> 152.60 -28.963 + (*,*,34) 147.47 -29.151 -> 152.51 -28.902 + (*,*,35) 147.58 -29.031 -> 152.68 -28.779 + (*,*,36) 147.47 -28.966 -> 152.58 -28.756 + (*,*,37) 147.51 -28.958 -> 152.60 -28.713 + (*,*,38) 147.49 -28.831 -> 152.53 -28.608 + (*,*,39) 147.51 -28.774 -> 152.46 -28.516 + (*,*,40) 147.57 -28.687 -> 152.54 -28.461 + err: 0x0 + m_flag: 137 + m_M: 2 + m_N: 0 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_indxs[1]: 0x
(= index[1]) + m_coord: 0x
(= coord) + +tab[1].* + flag: 137 + M: 1 + K: 0x
+ 8 + map: 0x
+ 2 + crval: 0x
+ 0.50000 + index: 0x
+ index[0]: 0x
+ 0.50000 1.5000 1.5000 2.5000 2.5000 + 3.5000 3.5000 4.5000 + coord: 0x
+ (*,1) 0.21106 + (*,2) 0.21076 + (*,3) 2.0000e-06 + (*,4) 2.2000e-06 + (*,5) 5.0000e-07 + (*,6) 6.5000e-07 + (*,7) 1.2400e-09 + (*,8) 2.4800e-09 + nc: 8 + sense: 0x
+ 1 + p0: 0x
+ 0 + delta: 0x
+ 0.0000 + extrema: 0x
+ (*,*) 1.2400e-09-> 0.21121 + err: 0x0 + m_flag: 137 + m_M: 1 + m_N: 0 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_coord: 0x
(= coord) + +tab[2].* + flag: 137 + M: 1 + K: 0x
+ 8 + map: 0x
+ 3 + crval: 0x
+ 0.0000 + index: 0x
+ index[0]: 0x
+ 0.0000 1.0000 1.0000 2.0000 2.0000 + 3.0000 3.0000 4.0000 + coord: 0x
+ (*,1) 1997.8 + (*,2) 1997.8 + (*,3) 1993.3 + (*,4) 1993.3 + (*,5) 2001.6 + (*,6) 2001.6 + (*,7) 2002.2 + (*,8) 2002.2 + nc: 8 + sense: 0x
+ 1 + p0: 0x
+ 0 + delta: 0x
+ 0.0000 + extrema: 0x
+ (*,*) 1993.3 -> 2002.2 + err: 0x0 + m_flag: 137 + m_M: 1 + m_N: 0 + m_K: 0x
(= K) + m_map: 0x
(= map) + m_crval: 0x
(= crval) + m_index: 0x
(= index) + m_indxs[0]: 0x
(= index[0]) + m_coord: 0x
(= coord) + + lin.* + flag: 137 + naxis: 4 + crpix: 0x
+ 129.00 65.000 0.50000 1.0000 + pc: 0x
+ pc[0][]: 0.99619 0.087156 0.0000 0.0000 + pc[1][]: -0.087156 0.99619 0.0000 0.0000 + pc[2][]: 0.0000 0.0000 1.0000 0.0000 + pc[3][]: 0.0000 0.0000 1.0000 1.0000 + cdelt: 0x
+ 1.0000 1.0000 1.0000 1.0000 + dispre: 0x0 + disseq: 0x0 +piximg[0][]: 0.99619 0.087156 0.0000 0.0000 +piximg[1][]: -0.087156 0.99619 0.0000 0.0000 +piximg[2][]: 0.0000 0.0000 1.0000 0.0000 +piximg[3][]: 0.0000 0.0000 1.0000 1.0000 +imgpix[0][]: 0.99619 -0.087156 0.0000 0.0000 +imgpix[1][]: 0.087156 0.99619 0.0000 0.0000 +imgpix[2][]: 0.0000 0.0000 1.0000 0.0000 +imgpix[3][]: 0.0000 0.0000 -1.0000 1.0000 + i_naxis: 4 + unity: 0 + affine: 1 + simple: 0 + err: 0x0 + m_flag: 0 + m_naxis: 0 + m_crpix: 0x0 + m_pc: 0x0 + m_cdelt: 0x0 + m_dispre: 0x0 + m_disseq: 0x0 + + cel.* + flag: 0 + offset: 0 + phi0: UNDEFINED + theta0: UNDEFINED + ref: 0.0000 0.0000 9.8765e+107 90.000 + prj: (see below) + euler: 0.0000 0.0000 0.0000 0.0000 0.0000 + latpreq: -1 (UNDEFINED) + isolat: 0 + err: 0x0 + + prj.* + flag: 0 + code: " " + r0: 0.000000 + pv: (not used) + phi0: UNDEFINED + theta0: UNDEFINED + bounds: 7 + + name: "undefined" + category: 0 (undefined) + pvrange: 0 + simplezen: 0 + equiareal: 0 + conformal: 0 + global: 0 + divergent: 0 + x0: 0.000000 + y0: 0.000000 + err: 0x0 + w[]: 0.0000 0.0000 0.0000 0.0000 0.0000 + 0.0000 0.0000 0.0000 0.0000 0.0000 + m: 0 + n: 0 + prjx2s: 0x0 + prjs2x: 0x0 + + spc.* + flag: 0 + type: " " + code: " " + crval: UNDEFINED + restfrq: 0.000000 + restwav: 0.000000 + pv: (not used) + w: 0.0000 0.0000 0.0000 (remainder unused) + isGrism: 0 + err: 0x0 + spxX2P: 0x0 + spxP2S: 0x0 + spxS2P: 0x0 + spxP2X: 0x0 diff --git a/deps/wcslib/Fortran/test/wcsleep_f.c b/deps/wcslib/Fortran/test/wcsleep_f.c new file mode 100644 index 0000000..f2f248d --- /dev/null +++ b/deps/wcslib/Fortran/test/wcsleep_f.c @@ -0,0 +1,23 @@ +//---------------------------------------------------------------------------- +// Utility routine for the WCSLIB Fortran test programs that draw plots, to +// pause for the specified number of milliseconds between plots. Whihout a +// pause they just become a blur. Required because the Fortran SLEEP() +// function takes a whole number of seconds, which slows the test suite too +// much. +// +// $Id: wcsleep_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +//---------------------------------------------------------------------------- + +// Needed to get nanosleep() from time.h. +#define _POSIX_C_SOURCE 199309L + +#include + + +int wcsleep_ (const int *millisec) + +{ + // Scale milliseconds to nanoseconds. + struct timespec nano = {(time_t)0, (*millisec)*1000000L}; + return nanosleep(&nano, 0x0); +} diff --git a/deps/wcslib/Fortran/wcs.inc b/deps/wcslib/Fortran/wcs.inc new file mode 100644 index 0000000..698528f --- /dev/null +++ b/deps/wcslib/Fortran/wcs.inc @@ -0,0 +1,229 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcs.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL WCSPUT, WCSPTC, WCSPTD, WCSPTI, + : WCSGET, WCSGTC, WCSGTD, WCSGTI, + : WCSNPV, WCSNPS, WCSINI, WCSINIT, WCSSUB, WCSCOMPARE, + : WCSFREE, WCSTRIM, WCSSIZE, AUXSIZE, WCSENQ, WCSPRT, + : WCSPERR, WCSBCHK, WCSSET, WCSP2S, WCSS2P, WCSMIX, + : WCSCCS, WCSSPTR, WCSCOPY + + INTEGER WCSPUT, WCSPTC, WCSPTD, WCSPTI, + : WCSGET, WCSGTC, WCSGTD, WCSGTI, + : WCSNPV, WCSNPS, WCSINI, WCSINIT, WCSSUB, WCSCOMPARE, + : WCSFREE, WCSTRIM, WCSSIZE, AUXSIZE, WCSENQ, WCSPRT, + : WCSPERR, WCSBCHK, WCSSET, WCSP2S, WCSS2P, WCSMIX, + : WCSCCS, WCSSPTR, WCSCOPY + +* Note that the Fortran API differs from that of the C function. + EXTERNAL WCSLIB_VERSION + +* Length of the WCSPRM data structure (INTEGER array) on 64-bit +* machines. Only needs to be 624 on 32-bit machines. + INTEGER WCSLEN + PARAMETER (WCSLEN = 690) + +* Codes for WCS data structure elements used by WCSPUT and WCSGET. + INTEGER WCS_FLAG, WCS_NAXIS, WCS_CRPIX, WCS_PC, WCS_CDELT, + : WCS_CRVAL, WCS_CUNIT, WCS_CTYPE, WCS_LONPOLE, + : WCS_LATPOLE, WCS_RESTFRQ, WCS_RESTWAV, WCS_NPV, + : WCS_NPVMAX, WCS_PV, WCS_NPS, WCS_NPSMAX, WCS_PS, WCS_CD, + : WCS_CROTA, WCS_ALTLIN, WCS_VELREF, WCS_ALT, WCS_COLNUM, + : WCS_COLAX, WCS_CNAME, WCS_CRDER, WCS_CSYER, WCS_CZPHS, + : WCS_CPERI, WCS_WCSNAME, WCS_TIMESYS, WCS_TREFPOS, + : WCS_TREFDIR, WCS_PLEPHEM, WCS_TIMEUNIT, WCS_DATEREF, + : WCS_MJDREF, WCS_TIMEOFFS, WCS_DATEOBS, WCS_DATEBEG, + : WCS_DATEAVG, WCS_DATEEND, WCS_MJDOBS, WCS_MJDBEG, + : WCS_MJDAVG, WCS_MJDEND, WCS_JEPOCH, WCS_BEPOCH, + : WCS_TSTART, WCS_TSTOP, WCS_XPOSURE, WCS_TELAPSE, + : WCS_TIMSYER, WCS_TIMRDER, WCS_TIMEDEL, WCS_TIMEPIXR, + : WCS_OBSGEO, WCS_OBSORBIT, WCS_RADESYS, WCS_EQUINOX, + : WCS_SPECSYS, WCS_SSYSOBS, WCS_VELOSYS, WCS_ZSOURCE, + : WCS_SSYSSRC, WCS_VELANGL, WCS_RSUN_REF, WCS_DSUN_OBS, + : WCS_CRLN_OBS, WCS_HGLN_OBS, WCS_HGLT_OBS, + : WCS_A_RADIUS, WCS_B_RADIUS, WCS_C_RADIUS, + : WCS_BLON_OBS, WCS_BLAT_OBS, WCS_BDIS_OBS + + PARAMETER (WCS_FLAG = 100) + PARAMETER (WCS_NAXIS = 101) + PARAMETER (WCS_CRPIX = 102) + PARAMETER (WCS_PC = 103) + PARAMETER (WCS_CDELT = 104) + PARAMETER (WCS_CRVAL = 105) + PARAMETER (WCS_CUNIT = 106) + PARAMETER (WCS_CTYPE = 107) + PARAMETER (WCS_LONPOLE = 108) + PARAMETER (WCS_LATPOLE = 109) + PARAMETER (WCS_RESTFRQ = 110) + PARAMETER (WCS_RESTWAV = 111) + PARAMETER (WCS_NPV = 112) + PARAMETER (WCS_NPVMAX = 113) + PARAMETER (WCS_PV = 114) + PARAMETER (WCS_NPS = 115) + PARAMETER (WCS_NPSMAX = 116) + PARAMETER (WCS_PS = 117) + PARAMETER (WCS_CD = 118) + PARAMETER (WCS_CROTA = 119) + PARAMETER (WCS_ALTLIN = 120) + PARAMETER (WCS_VELREF = 121) + + PARAMETER (WCS_ALT = 122) + PARAMETER (WCS_COLNUM = 123) + PARAMETER (WCS_COLAX = 124) + + PARAMETER (WCS_CNAME = 125) + PARAMETER (WCS_CRDER = 126) + PARAMETER (WCS_CSYER = 127) + PARAMETER (WCS_CZPHS = 128) + PARAMETER (WCS_CPERI = 129) + + PARAMETER (WCS_WCSNAME = 130) + + PARAMETER (WCS_TIMESYS = 131) + PARAMETER (WCS_TREFPOS = 132) + PARAMETER (WCS_TREFDIR = 133) + PARAMETER (WCS_PLEPHEM = 134) + PARAMETER (WCS_TIMEUNIT = 135) + PARAMETER (WCS_DATEREF = 136) + PARAMETER (WCS_MJDREF = 137) + PARAMETER (WCS_TIMEOFFS = 138) + + PARAMETER (WCS_DATEOBS = 139) + PARAMETER (WCS_DATEBEG = 140) + PARAMETER (WCS_DATEAVG = 141) + PARAMETER (WCS_DATEEND = 142) + PARAMETER (WCS_MJDOBS = 143) + PARAMETER (WCS_MJDBEG = 144) + PARAMETER (WCS_MJDAVG = 145) + PARAMETER (WCS_MJDEND = 146) + PARAMETER (WCS_JEPOCH = 147) + PARAMETER (WCS_BEPOCH = 148) + PARAMETER (WCS_TSTART = 149) + PARAMETER (WCS_TSTOP = 150) + PARAMETER (WCS_XPOSURE = 151) + PARAMETER (WCS_TELAPSE = 152) + + PARAMETER (WCS_TIMSYER = 153) + PARAMETER (WCS_TIMRDER = 154) + PARAMETER (WCS_TIMEDEL = 155) + PARAMETER (WCS_TIMEPIXR = 156) + + PARAMETER (WCS_OBSGEO = 157) + PARAMETER (WCS_OBSORBIT = 158) + PARAMETER (WCS_RADESYS = 159) + PARAMETER (WCS_EQUINOX = 160) + PARAMETER (WCS_SPECSYS = 161) + PARAMETER (WCS_SSYSOBS = 162) + PARAMETER (WCS_VELOSYS = 163) + PARAMETER (WCS_ZSOURCE = 164) + PARAMETER (WCS_SSYSSRC = 165) + PARAMETER (WCS_VELANGL = 166) + + PARAMETER (WCS_RSUN_REF = 167) + PARAMETER (WCS_DSUN_OBS = 168) + PARAMETER (WCS_CRLN_OBS = 169) + PARAMETER (WCS_HGLN_OBS = 170) + PARAMETER (WCS_HGLT_OBS = 171) + PARAMETER (WCS_A_RADIUS = 172) + PARAMETER (WCS_B_RADIUS = 173) + PARAMETER (WCS_C_RADIUS = 174) + PARAMETER (WCS_BLON_OBS = 175) + PARAMETER (WCS_BLAT_OBS = 176) + PARAMETER (WCS_BDIS_OBS = 177) + +* Codes for WCS data structure elements used by WCSGET (only). + INTEGER WCS_NTAB, WCS_NWTB, WCS_TAB, WCS_WTB, WCS_LNGTYP, + : WCS_LATTYP, WCS_LNG, WCS_LAT, WCS_SPEC, WCS_TIME, + : WCS_CUBEFACE, WCS_TYPES, WCS_LIN, WCS_CEL, WCS_SPC, + : WCS_ERR + + PARAMETER (WCS_NTAB = 200) + PARAMETER (WCS_NWTB = 201) + PARAMETER (WCS_TAB = 202) + PARAMETER (WCS_WTB = 203) + PARAMETER (WCS_LNGTYP = 204) + PARAMETER (WCS_LATTYP = 205) + PARAMETER (WCS_LNG = 206) + PARAMETER (WCS_LAT = 207) + PARAMETER (WCS_SPEC = 208) + PARAMETER (WCS_TIME = 209) + PARAMETER (WCS_CUBEFACE = 210) + PARAMETER (WCS_TYPES = 211) + PARAMETER (WCS_LIN = 212) + PARAMETER (WCS_CEL = 213) + PARAMETER (WCS_SPC = 214) + PARAMETER (WCS_ERR = 215) + +* Flag bits for WCSSUB's AXES argument. + INTEGER WCSSUB_LONGITUDE, WCSSUB_LATITUDE, WCSSUB_CUBEFACE, + : WCSSUB_CELESTIAL, WCSSUB_SPECTRAL, WCSSUB_STOKES + + PARAMETER (WCSSUB_LONGITUDE = 4096 + 1) + PARAMETER (WCSSUB_LATITUDE = 4096 + 2) + PARAMETER (WCSSUB_CUBEFACE = 4096 + 4) + PARAMETER (WCSSUB_CELESTIAL = 4096 + 7) + PARAMETER (WCSSUB_SPECTRAL = 4096 + 8) + PARAMETER (WCSSUB_STOKES = 4096 + 16) + +* Flag bits for WCSCOMPARE's CMP argument. + INTEGER WCSCOMPARE_ANCILLARY, WCSCOMPARE_TILING, WCSCOMPARE_CRPIX + + PARAMETER (WCSCOMPARE_ANCILLARY = 1) + PARAMETER (WCSCOMPARE_TILING = 2) + PARAMETER (WCSCOMPARE_CRPIX = 4) + +* Codes used by WCSENQ. + INTEGER WCSENQ_MEM, WCSENQ_SET, WCSENQ_BYP, WCSENQ_CHK + + PARAMETER (WCSENQ_MEM = 1) + PARAMETER (WCSENQ_SET = 2) + PARAMETER (WCSENQ_BYP = 4) + PARAMETER (WCSENQ_CHK = 8) + +* Error codes and messages. + INTEGER WCSERR_SUCCESS, WCSERR_NULL_POINTER, WCSERR_MEMORY, + : WCSERR_SINGULAR_MTX, WCSERR_BAD_CTYPE, WCSERR_BAD_PARAM, + : WCSERR_BAD_COORD_TRANS, WCSERR_ILL_COORD_TRANS, + : WCSERR_BAD_PIX, WCSERR_BAD_WORLD, + : WCSERR_BAD_WORLD_COORD, WCSERR_NO_SOLUTION, + : WCSERR_BAD_SUBIMAGE, WCSERR_NON_SEPARABLE + + PARAMETER (WCSERR_SUCCESS = 0) + PARAMETER (WCSERR_NULL_POINTER = 1) + PARAMETER (WCSERR_MEMORY = 2) + PARAMETER (WCSERR_SINGULAR_MTX = 3) + PARAMETER (WCSERR_BAD_CTYPE = 4) + PARAMETER (WCSERR_BAD_PARAM = 5) + PARAMETER (WCSERR_BAD_COORD_TRANS = 6) + PARAMETER (WCSERR_ILL_COORD_TRANS = 7) + PARAMETER (WCSERR_BAD_PIX = 8) + PARAMETER (WCSERR_BAD_WORLD = 9) + PARAMETER (WCSERR_BAD_WORLD_COORD = 10) + PARAMETER (WCSERR_NO_SOLUTION = 11) + PARAMETER (WCSERR_BAD_SUBIMAGE = 12) + PARAMETER (WCSERR_NON_SEPARABLE = 13) + + CHARACTER WCS_ERRMSG(0:13)*80 + COMMON /WCS_DATA/ WCS_ERRMSG diff --git a/deps/wcslib/Fortran/wcs_bindc.f90 b/deps/wcslib/Fortran/wcs_bindc.f90 new file mode 100644 index 0000000..8c768a7 --- /dev/null +++ b/deps/wcslib/Fortran/wcs_bindc.f90 @@ -0,0 +1,134 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: wcs_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION WCSPTC (WCS, WHAT, VALUE, I, J) + INTEGER :: WCS(*), WHAT + CHARACTER :: VALUE(*) + INTEGER :: I, J + + INTERFACE + INTEGER(C_INT) FUNCTION WCSPTC_C (WCS, WHAT, VALUE, I, J) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: WCS(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + INTEGER(C_INT) :: I, J + END FUNCTION WCSPTC_C + END INTERFACE + + WCSPTC = WCSPTC_C (WCS, WHAT, VALUE, I, J) +END FUNCTION WCSPTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSGTC (WCS, WHAT, VALUE) + INTEGER :: WCS(*), WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSGTC_C (WCS, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: WCS(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION WCSGTC_C + END INTERFACE + + WCSGTC = WCSGTC_C (WCS, WHAT, VALUE) +END FUNCTION WCSGTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSPERR (WCS, PREFIX) + INTEGER :: WCS(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSPERR_C (WCS, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: WCS(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION WCSPERR_C + END INTERFACE + + WCSPERR = WCSPERR_C (WCS, PREFIX) +END FUNCTION WCSPERR + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSCCS (WCS, LNG2P1, LAT2P1, LNG1P2, CLNG, CLAT, RADESYS, & + EQUINOX, ALT) + INTEGER :: WCS(*) + DOUBLE PRECISION :: LNG2P1, LAT2P1, LNG1P2 + CHARACTER :: CLNG(4), CLAT(4), RADESYS(71) + DOUBLE PRECISION :: EQUINOX + CHARACTER :: ALT(1) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSCCS_C (WCS, LNG2P1, LAT2P1, LNG1P2, CLNG, & + CLAT, RADESYS, EQUINOX, ALT) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: WCS(*) + REAL(C_DOUBLE) :: LNG2P1, LAT2P1, LNG1P2 + CHARACTER(KIND=C_CHAR, LEN=1) :: CLNG(4), CLAT(4), RADESYS(71) + REAL(C_DOUBLE) :: EQUINOX + CHARACTER(KIND=C_CHAR, LEN=1) :: ALT(1) + END FUNCTION WCSCCS_C + END INTERFACE + + WCSCCS = WCSCCS_C (WCS, LNG2P1, LAT2P1, LNG1P2, CLNG, CLAT, RADESYS, & + EQUINOX, ALT) +END FUNCTION WCSCCS + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSSPTR (WCS, I, CTYPE) + INTEGER :: WCS(*), I + CHARACTER :: CTYPE(8) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSSPTR_C (WCS, I, CTYPE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: WCS(*), I + CHARACTER(KIND=C_CHAR, LEN=1) :: CTYPE(8) + END FUNCTION WCSSPTR_C + END INTERFACE + + WCSSPTR = WCSSPTR_C (WCS, I, CTYPE) +END FUNCTION WCSSPTR + +!----------------------------------------------------------------------------- + +SUBROUTINE WCSLIB_VERSION (WCSVER, NCHR) + CHARACTER :: WCSVER(*) + INTEGER :: NCHR + + INTERFACE + SUBROUTINE WCSLIB_VERSION_C (WCSVER, NCHR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: WCSVER(*) + INTEGER(C_INT) :: NCHR + END SUBROUTINE WCSLIB_VERSION_C + END INTERFACE + + CALL WCSLIB_VERSION_C (WCSVER, NCHR) +END SUBROUTINE WCSLIB_VERSION diff --git a/deps/wcslib/Fortran/wcs_data.f b/deps/wcslib/Fortran/wcs_data.f new file mode 100644 index 0000000..f6d77f5 --- /dev/null +++ b/deps/wcslib/Fortran/wcs_data.f @@ -0,0 +1,47 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcs_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA WCS_BLOCK_DATA + + CHARACTER WCS_ERRMSG(0:13)*80 + + COMMON /WCS_DATA/ WCS_ERRMSG + + DATA WCS_ERRMSG / + : 'Success', + : 'Null wcsprm pointer passed', + : 'Memory allocation failed', + : 'Linear transformation matrix is singular', + : 'Inconsistent or unrecognized coordinate axis type', + : 'Invalid parameter value', + : 'Unrecognized coordinate transformation parameter', + : 'Ill-conditioned coordinate transformation parameter', + : 'One or more of the pixel coordinates were invalid', + : 'One or more of the world coordinates were invalid', + : 'Invalid world coordinate', + : 'No solution found in the specified interval', + : 'Invalid subimage specification', + : 'Non-separable subimage coordinate system'/ + + END diff --git a/deps/wcslib/Fortran/wcs_f.c b/deps/wcslib/Fortran/wcs_f.c new file mode 100644 index 0000000..b1c1b87 --- /dev/null +++ b/deps/wcslib/Fortran/wcs_f.c @@ -0,0 +1,1200 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcs_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include +#include + +#include +#include +#include +#include + +// Fortran name mangling. +#include +#define wcsput_ F77_FUNC(wcsput, WCSPUT) +#define wcsptc_ F77_FUNC(wcsptc, WCSPTC) +#define wcsptd_ F77_FUNC(wcsptd, WCSPTD) +#define wcspti_ F77_FUNC(wcspti, WCSPTI) +#define wcsget_ F77_FUNC(wcsget, WCSGET) +#define wcsgtc_ F77_FUNC(wcsgtc, WCSGTC) +#define wcsgtd_ F77_FUNC(wcsgtd, WCSGTD) +#define wcsgti_ F77_FUNC(wcsgti, WCSGTI) + +#define wcsnpv_ F77_FUNC(wcsnpv, WCSNPV) +#define wcsnps_ F77_FUNC(wcsnps, WCSNPS) +#define wcsini_ F77_FUNC(wcsini, WCSINI) +#define wcsinit_ F77_FUNC(wcsinit, WCSINIT) +#define wcssub_ F77_FUNC(wcssub, WCSSUB) +#define wcscompare_ F77_FUNC(wcscompare, WCSCOMPARE) +#define wcsfree_ F77_FUNC(wcsfree, WCSFREE) +#define wcstrim_ F77_FUNC(wcstrim, WCSTRIM) +#define wcssize_ F77_FUNC(wcssize, WCSSIZE) +#define auxsize_ F77_FUNC(auxsize, AUXSIZE) +#define wcsenq_ F77_FUNC(wcsenq, WCSENQ) +#define wcsprt_ F77_FUNC(wcsprt, WCSPRT) +#define wcsperr_ F77_FUNC(wcsperr, WCSPERR) +#define wcsbchk_ F77_FUNC(wcsbchk, WCSBCHK) +#define wcsset_ F77_FUNC(wcsset, WCSSET) +#define wcsp2s_ F77_FUNC(wcsp2s, WCSP2S) +#define wcss2p_ F77_FUNC(wcss2p, WCSS2P) +#define wcsmix_ F77_FUNC(wcsmix, WCSMIX) +#define wcsccs_ F77_FUNC(wcsccs, WCSCCS) +#define wcssptr_ F77_FUNC(wcssptr, WCSSPTR) +#define wcscopy_ F77_FUNC(wcscopy, WCSCOPY) +#define wcslib_version_ F77_FUNC(wcslib_version, WCSLIB_VERSION) + +#ifdef BINDC + #undef wcsptc_ + #define wcsptc_ wcsptc_c + + #undef wcsgtc_ + #define wcsgtc_ wcsgtc_c + + #undef wcsperr_ + #define wcsperr_ wcsperr_c + + #undef wcsccs_ + #define wcsccs_ wcsccs_c + + #undef wcssptr_ + #define wcssptr_ wcssptr_c + + #undef wcslib_version_ + #define wcslib_version_ wcslib_version_c +#endif + +// Must match the value set in wcs.inc. +#define WCS_FLAG 100 +#define WCS_NAXIS 101 +#define WCS_CRPIX 102 +#define WCS_PC 103 +#define WCS_CDELT 104 +#define WCS_CRVAL 105 +#define WCS_CUNIT 106 +#define WCS_CTYPE 107 +#define WCS_LONPOLE 108 +#define WCS_LATPOLE 109 +#define WCS_RESTFRQ 110 +#define WCS_RESTWAV 111 +#define WCS_NPV 112 +#define WCS_NPVMAX 113 +#define WCS_PV 114 +#define WCS_NPS 115 +#define WCS_NPSMAX 116 +#define WCS_PS 117 +#define WCS_CD 118 +#define WCS_CROTA 119 +#define WCS_ALTLIN 120 +#define WCS_VELREF 121 + +#define WCS_ALT 122 +#define WCS_COLNUM 123 +#define WCS_COLAX 124 + +#define WCS_CNAME 125 +#define WCS_CRDER 126 +#define WCS_CSYER 127 +#define WCS_CZPHS 128 +#define WCS_CPERI 129 + +#define WCS_WCSNAME 130 + +#define WCS_TIMESYS 131 +#define WCS_TREFPOS 132 +#define WCS_TREFDIR 133 +#define WCS_PLEPHEM 134 +#define WCS_TIMEUNIT 135 +#define WCS_DATEREF 136 +#define WCS_MJDREF 137 +#define WCS_TIMEOFFS 138 + +#define WCS_DATEOBS 139 +#define WCS_DATEBEG 140 +#define WCS_DATEAVG 141 +#define WCS_DATEEND 142 +#define WCS_MJDOBS 143 +#define WCS_MJDBEG 144 +#define WCS_MJDAVG 145 +#define WCS_MJDEND 146 +#define WCS_JEPOCH 147 +#define WCS_BEPOCH 148 +#define WCS_TSTART 149 +#define WCS_TSTOP 150 +#define WCS_XPOSURE 151 +#define WCS_TELAPSE 152 + +#define WCS_TIMSYER 153 +#define WCS_TIMRDER 154 +#define WCS_TIMEDEL 155 +#define WCS_TIMEPIXR 156 + +#define WCS_OBSGEO 157 +#define WCS_OBSORBIT 158 +#define WCS_RADESYS 159 +#define WCS_EQUINOX 160 +#define WCS_SPECSYS 161 +#define WCS_SSYSOBS 162 +#define WCS_VELOSYS 163 +#define WCS_ZSOURCE 164 +#define WCS_SSYSSRC 165 +#define WCS_VELANGL 166 + +#define WCS_RSUN_REF 167 +#define WCS_DSUN_OBS 168 +#define WCS_CRLN_OBS 169 +#define WCS_HGLN_OBS 170 +#define WCS_HGLT_OBS 171 +#define WCS_A_RADIUS 172 +#define WCS_B_RADIUS 173 +#define WCS_C_RADIUS 174 +#define WCS_BLON_OBS 175 +#define WCS_BLAT_OBS 176 +#define WCS_BDIS_OBS 177 + +#define WCS_NTAB 200 +#define WCS_NWTB 201 +#define WCS_TAB 202 +#define WCS_WTB 203 +#define WCS_LNGTYP 204 +#define WCS_LATTYP 205 +#define WCS_LNG 206 +#define WCS_LAT 207 +#define WCS_SPEC 208 +#define WCS_TIME 209 +#define WCS_CUBEFACE 210 +#define WCS_TYPES 211 +#define WCS_LIN 212 +#define WCS_CEL 213 +#define WCS_SPC 214 +#define WCS_ERR 215 + +//---------------------------------------------------------------------------- + +int wcsput_( + int *wcs, + const int *what, + const void *value, + const int *i, + const int *j) + +{ + int k; + const char *cvalp; + const int *ivalp; + const double *dvalp; + struct wcsprm *wcsp; + + // Cast pointers. + wcsp = (struct wcsprm *)wcs; + cvalp = (const char *)value; + ivalp = (const int *)value; + dvalp = (const double *)value; + + // Preserve bypass mode. + int flag = 0; + if (wcsp->flag == 1 || wcsp->flag < 0) flag = 1; + + // Convert 1-relative FITS axis numbers to 0-relative C array indices. + int i0 = *i - 1; + int j0 = *j - 1; + + switch (*what) { + case WCS_FLAG: + wcsp->flag = *ivalp; + break; + case WCS_NAXIS: + wcsp->naxis = *ivalp; + wcsp->flag = flag; + break; + case WCS_CRPIX: + wcsp->crpix[i0] = *dvalp; + wcsp->flag = flag; + break; + case WCS_PC: + k = (i0)*(wcsp->naxis) + (j0); + *(wcsp->pc+k) = *dvalp; + wcsp->flag = flag; + break; + case WCS_CDELT: + wcsp->cdelt[i0] = *dvalp; + wcsp->flag = flag; + break; + case WCS_CRVAL: + wcsp->crval[i0] = *dvalp; + wcsp->flag = flag; + break; + case WCS_CUNIT: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->cunit[i0]); + wcsp->flag = flag; + break; + case WCS_CTYPE: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->ctype[i0]); + wcsp->flag = flag; + break; + case WCS_LONPOLE: + wcsp->lonpole = *dvalp; + wcsp->flag = flag; + break; + case WCS_LATPOLE: + wcsp->latpole = *dvalp; + wcsp->flag = flag; + break; + case WCS_RESTFRQ: + wcsp->restfrq = *dvalp; + wcsp->flag = flag; + break; + case WCS_RESTWAV: + wcsp->restwav = *dvalp; + wcsp->flag = flag; + break; + case WCS_NPV: + case WCS_NPVMAX: + return 1; + break; + case WCS_PV: + (wcsp->pv + wcsp->npv)->i = *i; + (wcsp->pv + wcsp->npv)->m = *j; + (wcsp->pv + wcsp->npv)->value = *dvalp; + (wcsp->npv)++; + wcsp->flag = flag; + break; + case WCS_NPS: + case WCS_NPSMAX: + return 1; + break; + case WCS_PS: + (wcsp->ps + wcsp->nps)->i = *i; + (wcsp->ps + wcsp->nps)->m = *j; + wcsutil_strcvt(72, '\0', 0, cvalp, (wcsp->ps + wcsp->nps)->value); + (wcsp->nps)++; + wcsp->flag = flag; + break; + case WCS_CD: + k = (i0)*(wcsp->naxis) + (j0); + *(wcsp->cd+k) = *dvalp; + wcsp->flag = flag; + break; + case WCS_CROTA: + wcsp->crota[i0] = *dvalp; + wcsp->flag = flag; + break; + case WCS_ALTLIN: + wcsp->altlin = *ivalp; + wcsp->flag = flag; + break; + case WCS_VELREF: + wcsp->velref = *ivalp; + break; + + case WCS_ALT: + wcsp->alt[0] = cvalp[0]; + memset((wcsp->alt)+1, '\0', 3); + break; + case WCS_COLNUM: + wcsp->colnum = *ivalp; + break; + case WCS_COLAX: + wcsp->colax[i0] = *ivalp; + break; + + case WCS_CNAME: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->cname[i0]); + break; + case WCS_CRDER: + wcsp->crder[i0] = *dvalp; + break; + case WCS_CSYER: + wcsp->csyer[i0] = *dvalp; + break; + case WCS_CZPHS: + wcsp->czphs[i0] = *dvalp; + break; + case WCS_CPERI: + wcsp->cperi[i0] = *dvalp; + break; + + case WCS_WCSNAME: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->wcsname); + break; + + case WCS_TIMESYS: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->timesys); + break; + case WCS_TREFPOS: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->trefpos); + break; + case WCS_TREFDIR: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->trefdir); + break; + case WCS_PLEPHEM: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->plephem); + break; + case WCS_TIMEUNIT: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->timeunit); + break; + case WCS_DATEREF: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->dateref); + break; + case WCS_MJDREF: + wcsp->mjdref[i0] = *dvalp; + break; + case WCS_TIMEOFFS: + wcsp->timeoffs = *dvalp; + break; + + case WCS_DATEOBS: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->dateobs); + break; + case WCS_DATEBEG: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->datebeg); + break; + case WCS_DATEAVG: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->dateavg); + break; + case WCS_DATEEND: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->dateend); + break; + case WCS_MJDOBS: + wcsp->mjdobs = *dvalp; + break; + case WCS_MJDBEG: + wcsp->mjdbeg = *dvalp; + break; + case WCS_MJDAVG: + wcsp->mjdavg = *dvalp; + break; + case WCS_MJDEND: + wcsp->mjdend = *dvalp; + break; + case WCS_JEPOCH: + wcsp->jepoch = *dvalp; + break; + case WCS_BEPOCH: + wcsp->bepoch = *dvalp; + break; + case WCS_TSTART: + wcsp->tstart = *dvalp; + break; + case WCS_TSTOP: + wcsp->tstop = *dvalp; + break; + case WCS_XPOSURE: + wcsp->xposure = *dvalp; + break; + case WCS_TELAPSE: + wcsp->telapse = *dvalp; + break; + + case WCS_TIMSYER: + wcsp->timsyer = *dvalp; + break; + case WCS_TIMRDER: + wcsp->timrder = *dvalp; + break; + case WCS_TIMEDEL: + wcsp->timedel = *dvalp; + break; + case WCS_TIMEPIXR: + wcsp->timepixr = *dvalp; + break; + + case WCS_OBSGEO: + wcsp->obsgeo[i0] = *dvalp; + break; + case WCS_OBSORBIT: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->obsorbit); + break; + case WCS_RADESYS: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->radesys); + break; + case WCS_EQUINOX: + wcsp->equinox = *dvalp; + break; + case WCS_SPECSYS: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->specsys); + break; + case WCS_SSYSOBS: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->ssysobs); + break; + case WCS_VELOSYS: + wcsp->velosys = *dvalp; + break; + case WCS_ZSOURCE: + wcsp->zsource = *dvalp; + break; + case WCS_SSYSSRC: + wcsutil_strcvt(72, '\0', 0, cvalp, wcsp->ssyssrc); + break; + case WCS_VELANGL: + wcsp->velangl = *dvalp; + break; + + case WCS_RSUN_REF: + case WCS_DSUN_OBS: + case WCS_CRLN_OBS: + case WCS_HGLN_OBS: + case WCS_HGLT_OBS: + case WCS_A_RADIUS: + case WCS_B_RADIUS: + case WCS_C_RADIUS: + case WCS_BLON_OBS: + case WCS_BLAT_OBS: + case WCS_BDIS_OBS: + if (wcsp->aux == 0x0) { + if (wcsauxi(1, wcsp)) { + return 2; + } + } + + switch (*what) { + case WCS_RSUN_REF: + wcsp->aux->rsun_ref = *dvalp; + break; + case WCS_DSUN_OBS: + wcsp->aux->dsun_obs = *dvalp; + break; + case WCS_CRLN_OBS: + wcsp->aux->crln_obs = *dvalp; + break; + case WCS_HGLN_OBS: + wcsp->aux->hgln_obs = *dvalp; + break; + case WCS_HGLT_OBS: + wcsp->aux->hglt_obs = *dvalp; + break; + case WCS_A_RADIUS: + wcsp->aux->a_radius = *dvalp; + break; + case WCS_B_RADIUS: + wcsp->aux->b_radius = *dvalp; + break; + case WCS_C_RADIUS: + wcsp->aux->c_radius = *dvalp; + break; + case WCS_BLON_OBS: + wcsp->aux->blon_obs = *dvalp; + break; + case WCS_BLAT_OBS: + wcsp->aux->blat_obs = *dvalp; + break; + case WCS_BDIS_OBS: + wcsp->aux->bdis_obs = *dvalp; + break; + } + + break; + default: + return 1; + } + + return 0; +} + +int wcsptc_(int *wcs, const int *what, const char *value, const int *i, + const int *j) +{ + return wcsput_(wcs, what, value, i, j); +} + +int wcsptd_(int *wcs, const int *what, const double *value, const int *i, + const int *j) +{ + return wcsput_(wcs, what, value, i, j); +} + +int wcspti_(int *wcs, const int *what, const int *value, const int *i, + const int *j) +{ + return wcsput_(wcs, what, value, i, j); +} + +//---------------------------------------------------------------------------- + +int wcsget_(const int *wcs, const int *what, void *value) + +{ + // Cast pointers. + const struct wcsprm *wcsp = (const struct wcsprm *)wcs; + char *cvalp = (char *)value; + int *ivalp = (int *)value; + double *dvalp = (double *)value; + + int naxis = wcsp->naxis; + + const int *iwcsp; + switch (*what) { + case WCS_FLAG: + *ivalp = wcsp->flag; + break; + case WCS_NAXIS: + *ivalp = naxis; + break; + case WCS_CRPIX: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->crpix[i]; + } + break; + case WCS_PC: + // C row-major to FORTRAN column-major. + for (int j = 0; j < naxis; j++) { + const double *dwcsp = wcsp->pc + j; + for (int i = 0; i < naxis; i++) { + *(dvalp++) = *dwcsp; + dwcsp += naxis; + } + } + break; + case WCS_CDELT: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->cdelt[i]; + } + break; + case WCS_CRVAL: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->crval[i]; + } + break; + case WCS_CUNIT: + for (int i = 0; i < naxis; i++) { + wcsutil_strcvt(72, ' ', 0, wcsp->cunit[i], cvalp); + cvalp += 72; + } + break; + case WCS_CTYPE: + for (int i = 0; i < naxis; i++) { + wcsutil_strcvt(72, ' ', 0, wcsp->ctype[i], cvalp); + cvalp += 72; + } + break; + case WCS_LONPOLE: + *dvalp = wcsp->lonpole; + break; + case WCS_LATPOLE: + *dvalp = wcsp->latpole; + break; + case WCS_RESTFRQ: + *dvalp = wcsp->restfrq; + break; + case WCS_RESTWAV: + *dvalp = wcsp->restwav; + break; + case WCS_NPV: + *ivalp = wcsp->npv; + break; + case WCS_NPVMAX: + *ivalp = wcsp->npvmax; + break; + case WCS_PV: + for (int k = 0; k < wcsp->npv; k++) { + *(dvalp++) = (wcsp->pv + k)->i; + *(dvalp++) = (wcsp->pv + k)->m; + *(dvalp++) = (wcsp->pv + k)->value; + } + break; + case WCS_NPS: + *ivalp = wcsp->nps; + break; + case WCS_NPSMAX: + *ivalp = wcsp->npsmax; + break; + case WCS_PS: + for (int k = 0; k < wcsp->nps; k++) { + *(dvalp++) = (wcsp->ps + k)->i; + *(dvalp++) = (wcsp->ps + k)->m; + cvalp += 2*sizeof(double); + wcsutil_strcvt(72, ' ', 0, (wcsp->ps + k)->value, cvalp); + cvalp += 72; + } + break; + case WCS_CD: + // C row-major to FORTRAN column-major. + for (int j = 0; j < naxis; j++) { + const double *dwcsp = wcsp->cd + j; + for (int i = 0; i < naxis; i++) { + *(dvalp++) = *dwcsp; + dwcsp += naxis; + } + } + break; + case WCS_CROTA: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->crota[i]; + } + break; + case WCS_ALTLIN: + *ivalp = wcsp->altlin; + break; + case WCS_VELREF: + *ivalp = wcsp->velref; + break; + + case WCS_ALT: + wcsutil_strcvt(4, ' ', 0, wcsp->alt, cvalp); + break; + case WCS_COLNUM: + *ivalp = wcsp->colnum; + break; + case WCS_COLAX: + for (int i = 0; i < naxis; i++) { + *(ivalp++) = wcsp->colax[i]; + } + break; + + case WCS_CNAME: + for (int i = 0; i < naxis; i++) { + wcsutil_strcvt(72, ' ', 0, wcsp->cname[i], cvalp); + cvalp += 72; + } + break; + case WCS_CRDER: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->crder[i]; + } + break; + case WCS_CSYER: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->csyer[i]; + } + break; + case WCS_CZPHS: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->czphs[i]; + } + break; + case WCS_CPERI: + for (int i = 0; i < naxis; i++) { + *(dvalp++) = wcsp->cperi[i]; + } + break; + + case WCS_WCSNAME: + wcsutil_strcvt(72, ' ', 0, wcsp->wcsname, cvalp); + break; + + case WCS_TIMESYS: + wcsutil_strcvt(72, ' ', 0, wcsp->timesys, cvalp); + break; + case WCS_TREFPOS: + wcsutil_strcvt(72, ' ', 0, wcsp->trefpos, cvalp); + break; + case WCS_TREFDIR: + wcsutil_strcvt(72, ' ', 0, wcsp->trefdir, cvalp); + break; + case WCS_PLEPHEM: + wcsutil_strcvt(72, ' ', 0, wcsp->plephem, cvalp); + break; + case WCS_TIMEUNIT: + wcsutil_strcvt(72, ' ', 0, wcsp->timeunit, cvalp); + break; + case WCS_DATEREF: + wcsutil_strcvt(72, ' ', 0, wcsp->dateref, cvalp); + break; + case WCS_MJDREF: + *(dvalp++) = wcsp->mjdref[0]; + *(dvalp++) = wcsp->mjdref[1]; + break; + case WCS_TIMEOFFS: + *dvalp = wcsp->timeoffs; + break; + + case WCS_DATEOBS: + wcsutil_strcvt(72, ' ', 0, wcsp->dateobs, cvalp); + break; + case WCS_DATEBEG: + wcsutil_strcvt(72, ' ', 0, wcsp->datebeg, cvalp); + break; + case WCS_DATEAVG: + wcsutil_strcvt(72, ' ', 0, wcsp->dateavg, cvalp); + break; + case WCS_DATEEND: + wcsutil_strcvt(72, ' ', 0, wcsp->dateend, cvalp); + break; + case WCS_MJDOBS: + *dvalp = wcsp->mjdobs; + break; + case WCS_MJDBEG: + *dvalp = wcsp->mjdbeg; + break; + case WCS_MJDAVG: + *dvalp = wcsp->mjdavg; + break; + case WCS_MJDEND: + *dvalp = wcsp->mjdend; + break; + case WCS_JEPOCH: + *dvalp = wcsp->jepoch; + break; + case WCS_BEPOCH: + *dvalp = wcsp->bepoch; + break; + case WCS_TSTART: + *dvalp = wcsp->tstart; + break; + case WCS_TSTOP: + *dvalp = wcsp->tstop; + break; + case WCS_XPOSURE: + *dvalp = wcsp->xposure; + break; + case WCS_TELAPSE: + *dvalp = wcsp->telapse; + break; + + case WCS_TIMSYER: + *dvalp = wcsp->timsyer; + break; + case WCS_TIMRDER: + *dvalp = wcsp->timrder; + break; + case WCS_TIMEDEL: + *dvalp = wcsp->timedel; + break; + case WCS_TIMEPIXR: + *dvalp = wcsp->timepixr; + break; + + case WCS_OBSGEO: + for (int i = 0; i < 6; i++) { + *(dvalp++) = wcsp->obsgeo[i]; + } + break; + case WCS_OBSORBIT: + wcsutil_strcvt(72, ' ', 0, wcsp->obsorbit, cvalp); + break; + case WCS_RADESYS: + wcsutil_strcvt(72, ' ', 0, wcsp->radesys, cvalp); + break; + case WCS_EQUINOX: + *dvalp = wcsp->equinox; + break; + case WCS_SPECSYS: + wcsutil_strcvt(72, ' ', 0, wcsp->specsys, cvalp); + break; + case WCS_SSYSOBS: + wcsutil_strcvt(72, ' ', 0, wcsp->ssysobs, cvalp); + break; + case WCS_VELOSYS: + *dvalp = wcsp->velosys; + break; + case WCS_ZSOURCE: + *dvalp = wcsp->zsource; + break; + case WCS_SSYSSRC: + wcsutil_strcvt(72, ' ', 0, wcsp->ssyssrc, cvalp); + break; + case WCS_VELANGL: + *dvalp = wcsp->velangl; + break; + + case WCS_RSUN_REF: + *dvalp = wcsp->aux ? wcsp->aux->rsun_ref : UNDEFINED; + break; + case WCS_DSUN_OBS: + *dvalp = wcsp->aux ? wcsp->aux->dsun_obs : UNDEFINED; + break; + case WCS_CRLN_OBS: + *dvalp = wcsp->aux ? wcsp->aux->crln_obs : UNDEFINED; + break; + case WCS_HGLN_OBS: + *dvalp = wcsp->aux ? wcsp->aux->hgln_obs : UNDEFINED; + break; + case WCS_HGLT_OBS: + *dvalp = wcsp->aux ? wcsp->aux->hglt_obs : UNDEFINED; + break; + case WCS_A_RADIUS: + *dvalp = wcsp->aux ? wcsp->aux->a_radius : UNDEFINED; + break; + case WCS_B_RADIUS: + *dvalp = wcsp->aux ? wcsp->aux->b_radius : UNDEFINED; + break; + case WCS_C_RADIUS: + *dvalp = wcsp->aux ? wcsp->aux->c_radius : UNDEFINED; + break; + case WCS_BLON_OBS: + *dvalp = wcsp->aux ? wcsp->aux->blon_obs : UNDEFINED; + break; + case WCS_BLAT_OBS: + *dvalp = wcsp->aux ? wcsp->aux->blat_obs : UNDEFINED; + break; + case WCS_BDIS_OBS: + *dvalp = wcsp->aux ? wcsp->aux->bdis_obs : UNDEFINED; + break; + + case WCS_NTAB: + *ivalp = wcsp->ntab; + break; + case WCS_NWTB: + *ivalp = wcsp->nwtb; + break; + case WCS_TAB: + *(void **)value = wcsp->tab; + break; + case WCS_WTB: + *(void **)value = wcsp->wtb; + break; + case WCS_LNGTYP: + wcsutil_strcvt(4, ' ', 0, wcsp->lngtyp, cvalp); + break; + case WCS_LATTYP: + wcsutil_strcvt(4, ' ', 0, wcsp->lattyp, cvalp); + break; + case WCS_LNG: + *ivalp = wcsp->lng + 1; + break; + case WCS_LAT: + *ivalp = wcsp->lat + 1; + break; + case WCS_SPEC: + *ivalp = wcsp->spec + 1; + break; + case WCS_TIME: + *ivalp = wcsp->time + 1; + break; + case WCS_CUBEFACE: + *ivalp = wcsp->cubeface; + break; + case WCS_TYPES: + for (int i = 0; i < naxis; i++) { + *(ivalp++) = wcsp->types[i]; + } + break; + case WCS_LIN: + // Copy the contents of the linprm struct. + iwcsp = (int *)(&(wcsp->lin)); + for (size_t l = 0; l < LINLEN; l++) { + *(ivalp++) = *(iwcsp++); + } + break; + case WCS_CEL: + // Copy the contents of the celprm struct. + iwcsp = (int *)(&(wcsp->cel)); + for (size_t l = 0; l < CELLEN; l++) { + *(ivalp++) = *(iwcsp++); + } + break; + case WCS_SPC: + // Copy the contents of the spcprm struct. + iwcsp = (int *)(&(wcsp->spc)); + for (size_t l = 0; l < SPCLEN; l++) { + *(ivalp++) = *(iwcsp++); + } + break; + case WCS_ERR: + // Copy the contents of the wcserr struct. + if (wcsp->err) { + iwcsp = (int *)(wcsp->err); + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = *(iwcsp++); + } + } else { + for (size_t l = 0; l < ERRLEN; l++) { + *(ivalp++) = 0; + } + } + break; + default: + return 1; + } + + return 0; +} + +int wcsgtc_(const int *wcs, const int *what, char *value) +{ + return wcsget_(wcs, what, value); +} + +int wcsgtd_(const int *wcs, const int *what, double *value) +{ + return wcsget_(wcs, what, value); +} + +int wcsgti_(const int *wcs, const int *what, int *value) +{ + return wcsget_(wcs, what, value); +} + +//---------------------------------------------------------------------------- + +int wcsnpv_(int *npvmax) { return wcsnpv(*npvmax); } +int wcsnps_(int *npsmax) { return wcsnps(*npsmax); } + +//---------------------------------------------------------------------------- + +int wcsini_(const int *naxis, int *wcs) + +{ + return wcsini(1, *naxis, (struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int wcsinit_( + const int *naxis, + int *wcs, + int *npvmax, + int *npsmax, + int *ndpmax) + +{ + return wcsinit(1, *naxis, (struct wcsprm *)wcs, *npvmax, *npsmax, *ndpmax); +} + +//---------------------------------------------------------------------------- + +int wcssub_(const int *wcssrc, int *nsub, int axes[], int *wcsdst) + +{ + if (*nsub == -1 && *axes == -1) { + // Interpreted as a signal that a deep copy is required. + return wcssub(1, (const struct wcsprm *)wcssrc, 0x0, 0x0, + (struct wcsprm *)wcsdst); + } else { + // Beware that if *nsub == 0 it will be set on return so cannot be a + // constant argument. + return wcssub(1, (const struct wcsprm *)wcssrc, nsub, axes, + (struct wcsprm *)wcsdst); + } +} + +//---------------------------------------------------------------------------- + +int wcscompare_( + const int *cmp, + const double *tol, + const int *wcs1, + const int *wcs2, + int *equal) + +{ + return wcscompare(*cmp, *tol, (const struct wcsprm *)wcs1, + (const struct wcsprm *)wcs2, equal); +} + +//---------------------------------------------------------------------------- + +int wcsfree_(int *wcs) + +{ + return wcsfree((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int wcstrim_(int *wcs) + +{ + return wcstrim((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int wcssize_(const int *wcs, int sizes[2]) + +{ + return wcssize((const struct wcsprm *)wcs, sizes); +} + +//---------------------------------------------------------------------------- + +int auxsize_(const int *aux, int sizes[2]) + +{ + return auxsize((const struct auxprm *)aux, sizes); +} + +//---------------------------------------------------------------------------- + +int wcsenq_(const int *wcs, int *enquiry) + +{ + return wcsenq((const struct wcsprm *)wcs, *enquiry); +} + +//---------------------------------------------------------------------------- + +int wcsprt_(const int *wcs) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling WCSPRT in the Fortran code. + fflush(NULL); + + return wcsprt((const struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int wcsperr_(int *wcs, const char prefix[72]) + +{ + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + + // This may or may not force the Fortran I/O buffers to be flushed. + // If not, try CALL FLUSH(6) before calling WCSPERR in the Fortran code. + fflush(NULL); + + return wcsperr((struct wcsprm *)wcs, prefix_); +} + +//---------------------------------------------------------------------------- + +int wcsbchk_(int *wcs, int *bounds) + +{ + return wcsbchk((struct wcsprm *)wcs, *bounds); +} + +//---------------------------------------------------------------------------- + +int wcsset_(int *wcs) + +{ + return wcsset((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int wcsp2s_( + int *wcs, + const int *ncoord, + const int *nelem, + const double pixcrd[], + double imgcrd[], + double phi[], + double theta[], + double world[], + int stat[]) + +{ + return wcsp2s((struct wcsprm *)wcs, *ncoord, *nelem, pixcrd, imgcrd, phi, + theta, world, stat); +} + +//---------------------------------------------------------------------------- + +int wcss2p_( + int* wcs, + const int *ncoord, + const int *nelem, + const double world[], + double phi[], + double theta[], + double imgcrd[], + double pixcrd[], + int stat[]) + +{ + return wcss2p((struct wcsprm *)wcs, *ncoord, *nelem, world, phi, theta, + imgcrd, pixcrd, stat); +} + +//---------------------------------------------------------------------------- + +int wcsmix_( + int *wcs, + const int *mixpix, + const int *mixcel, + const double vspan[2], + const double *vstep, + int *viter, + double world[], + double phi[], + double theta[], + double imgcrd[], + double pixcrd[]) + +{ + return wcsmix((struct wcsprm *)wcs, *mixpix-1, *mixcel, vspan, *vstep, + *viter, world, phi, theta, imgcrd, pixcrd); +} + +//---------------------------------------------------------------------------- + +int wcsccs_( + int *wcs, + const double *lng2p1, + const double *lat2p1, + const double *lng1p2, + const char clng[4], + const char clat[4], + const char radesys[71], + const double *equinox, + const char alt[1]) + +{ + char clng_[5], clat_[5], radesys_[72]; + wcsutil_strcvt(4, '\0', 1, clng, clng_); + wcsutil_strcvt(4, '\0', 1, clat, clat_); + wcsutil_strcvt(71, '\0', 1, radesys, radesys_); + + int status = wcsccs((struct wcsprm *)wcs, *lng2p1, *lat2p1, *lng1p2, clng_, + clat_, radesys_, *equinox, alt); + + return status; +} + +//---------------------------------------------------------------------------- + +int wcssptr_( + int *wcs, + int *i, + char ctype[8]) + +{ + char ctype_[9]; + wcsutil_strcvt(8, ' ', 1, ctype, ctype_); + + int status = wcssptr((struct wcsprm *)wcs, i, ctype_); + + wcsutil_strcvt(8, ' ', 0, ctype_, ctype); + + return status; +} + +//---------------------------------------------------------------------------- + +int wcscopy_( + const int *wcssrc, + int *wcsdst) + +{ + return wcscopy(1, (const struct wcsprm *)wcssrc, (struct wcsprm *)wcsdst); +} + +//---------------------------------------------------------------------------- + +void wcslib_version_( + char *wcsver, + int *nchr) + +{ + wcsutil_strcvt(*nchr, ' ', 0, wcslib_version(0x0), wcsver); +} diff --git a/deps/wcslib/Fortran/wcserr.inc b/deps/wcslib/Fortran/wcserr.inc new file mode 100644 index 0000000..ee6e562 --- /dev/null +++ b/deps/wcslib/Fortran/wcserr.inc @@ -0,0 +1,49 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcserr.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL WCSERR_GET, WCSERR_GTC, WCSERR_GTI, + : WCSERR_ENABLE, WCSERR_SIZE, WCSERR_PRT, WCSERR_CLEAR + + INTEGER WCSERR_GET, WCSERR_GTC, WCSERR_GTI, + : WCSERR_ENABLE, WCSERR_SIZE, WCSERR_PRT, WCSERR_CLEAR + +* Length of the WCSERR data structure (INTEGER array) on 64-bit +* machines. Only needs to be 5 on 32-bit machines. + INTEGER ERRLEN + PARAMETER (ERRLEN = 8) + +* Codes for WCSERR data structure elements used by WCSERR_GET. + INTEGER WCSERR_STATUS, WCSERR_LINE_NO, WCSERR_FUNCTION, + : WCSERR_FILE, WCSERR_MSG + + PARAMETER (WCSERR_STATUS = 200) + PARAMETER (WCSERR_LINE_NO = 201) + PARAMETER (WCSERR_FUNCTION = 202) + PARAMETER (WCSERR_FILE = 203) + PARAMETER (WCSERR_MSG = 204) + +* Size of character variable that can hold the largest messages. + INTEGER WCSERR_MSG_LENGTH + PARAMETER (WCSERR_MSG_LENGTH = 512) diff --git a/deps/wcslib/Fortran/wcserr_bindc.f90 b/deps/wcslib/Fortran/wcserr_bindc.f90 new file mode 100644 index 0000000..57c6ab5 --- /dev/null +++ b/deps/wcslib/Fortran/wcserr_bindc.f90 @@ -0,0 +1,55 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: wcserr_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION WCSERR_GTC (ERR, WHAT, VALUE) + INTEGER :: ERR(*), WHAT + CHARACTER :: VALUE(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSERR_GTC_C (ERR, WHAT, VALUE) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: ERR(*), WHAT + CHARACTER(KIND=C_CHAR, LEN=1) :: VALUE(*) + END FUNCTION WCSERR_GTC_C + END INTERFACE + + WCSERR_GTC = WCSERR_GTC_C (ERR, WHAT, VALUE) +END FUNCTION WCSERR_GTC + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSERR_PRT (ERR, PREFIX) + INTEGER :: ERR(*) + CHARACTER :: PREFIX(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSERR_PRT_C (ERR, PREFIX) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: ERR(*) + CHARACTER(KIND=C_CHAR, LEN=1) :: PREFIX(72) + END FUNCTION WCSERR_PRT_C + END INTERFACE + + WCSERR_PRT = WCSERR_PRT_C (ERR, PREFIX) +END FUNCTION WCSERR_PRT diff --git a/deps/wcslib/Fortran/wcserr_f.c b/deps/wcslib/Fortran/wcserr_f.c new file mode 100644 index 0000000..5785d17 --- /dev/null +++ b/deps/wcslib/Fortran/wcserr_f.c @@ -0,0 +1,152 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcserr_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include +#include + +// Fortran name mangling. +#include +#define wcserr_get_ F77_FUNC(wcserr_get, WCSERR_GET) +#define wcserr_gtc_ F77_FUNC(wcserr_gtc, WCSERR_GTC) +#define wcserr_gti_ F77_FUNC(wcserr_gti, WCSERR_GTI) + +#define wcserr_enable_ F77_FUNC(wcserr_enable, WCSERR_ENABLE) +#define wcserr_size_ F77_FUNC(wcserr_size, WCSERR_SIZE) +#define wcserr_prt_ F77_FUNC(wcserr_prt, WCSERR_PRT) +#define wcserr_clear_ F77_FUNC(wcserr_clear, WCSERR_CLEAR) + +#ifdef BINDC + #undef wcserr_gtc_ + #define wcserr_gtc_ wcserr_gtc_c + + #undef wcserr_prt_ + #define wcserr_prt_ wcserr_prt_c +#endif + +// Must match the values set in wcserr.inc. +#define WCSERR_STATUS 200 +#define WCSERR_LINE_NO 201 +#define WCSERR_FUNCTION 202 +#define WCSERR_FILE 203 +#define WCSERR_MSG 204 + +#define WCSERR_MSG_LENGTH 512 + +//---------------------------------------------------------------------------- + +int wcserr_get_(const int *err, const int *what, void *value) + +{ + char *cvalp; + int *ivalp; + const struct wcserr *errp; + + // Cast pointers. + errp = (const struct wcserr *)err; + cvalp = (char *)value; + ivalp = (int *)value; + + switch (*what) { + case WCSERR_STATUS: + *ivalp = errp->status; + break; + case WCSERR_LINE_NO: + *ivalp = errp->line_no; + break; + case WCSERR_FUNCTION: + wcsutil_strcvt(72, ' ', 0, errp->function, cvalp); + break; + case WCSERR_FILE: + wcsutil_strcvt(72, ' ', 0, errp->file, cvalp); + break; + case WCSERR_MSG: + // The character variable must be of length WCSERR_MSG_LENGTH. + if (errp) { + wcsutil_strcvt(WCSERR_MSG_LENGTH, ' ', 0, errp->msg, cvalp); + } else { + wcsutil_strcvt(WCSERR_MSG_LENGTH, ' ', 0, "", cvalp); + } + break; + default: + return 1; + } + + return 0; +} + +int wcserr_gtc_(const int *err, const int *what, char *value) +{ + return wcserr_get_(err, what, value); +} + +int wcserr_gti_(const int *err, const int *what, int *value) +{ + return wcserr_get_(err, what, value); +} + +//---------------------------------------------------------------------------- + +int wcserr_enable_(const int *enable) + +{ + return wcserr_enable(*enable); +} + +//---------------------------------------------------------------------------- + +int wcserr_size_(const int *err, int sizes[2]) + +{ + return wcserr_size((const struct wcserr *)err, sizes); +} + +//---------------------------------------------------------------------------- + +// If null-terminated (using the Fortran CHAR(0) intrinsic), prefix may be of +// length less than but not exceeding 72 and trailing blanks are preserved. +// Otherwise, it must be of length 72 and trailing blanks are stripped off. + +int wcserr_prt_(const int *err, const char prefix[72]) + +{ + char prefix_[73]; + wcsutil_strcvt(72, '\0', 1, prefix, prefix_); + + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling WCSERR_PRT in the Fortran code. + fflush(NULL); + + return wcserr_prt((const struct wcserr *)err, prefix_); +} + +//---------------------------------------------------------------------------- + +int wcserr_clear_(int **errp) + +{ + return wcserr_clear((struct wcserr **)errp); +} diff --git a/deps/wcslib/Fortran/wcsfix.inc b/deps/wcslib/Fortran/wcsfix.inc new file mode 100644 index 0000000..cf157e7 --- /dev/null +++ b/deps/wcslib/Fortran/wcsfix.inc @@ -0,0 +1,66 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcsfix.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL WCSFIX, CDFIX, DATFIX, OBSFIX, UNITFIX, SPCFIX, CELFIX, + : CYLFIX, WCSPCX + + INTEGER WCSFIX, CDFIX, DATFIX, OBSFIX, UNITFIX, SPCFIX, CELFIX, + : CYLFIX, WCSPCX + +* Flag bits for the RELAX argument. + INTEGER WCSFIX_CD, WCSFIX_DAT, WCSFIX_OBS, WCSFIX_UNIT, + : WCSFIX_CEL, WCSFIX_SPC, WCSFIX_CYL, WCSFIX_NWCS + + PARAMETER (WCSFIX_CD = 1) + PARAMETER (WCSFIX_DAT = 2) + PARAMETER (WCSFIX_OBS = 3) + PARAMETER (WCSFIX_UNIT = 4) + PARAMETER (WCSFIX_CEL = 5) + PARAMETER (WCSFIX_SPC = 6) + PARAMETER (WCSFIX_CYL = 7) + PARAMETER (WCSFIX_NWCS = 7) + +* Error codes and messages. + INTEGER FIXERR_NO_CHANGE, FIXERR_SUCCESS, FIXERR_NULL_POINTER, + : FIXERR_MEMORY, FIXERR_SINGULAR_MTX, FIXERR_BAD_CTYPE, + : FIXERR_BAD_PARAM, FIXERR_BAD_COORD_TRANS, + : FIXERR_ILL_COORD_TRANS, FIXERR_BAD_CORNER_PIX, + : FIXERR_NO_REF_PIX_COORD, FIXERR_NO_REF_PIX_VAL + + PARAMETER (FIXERR_NO_CHANGE = -1) + PARAMETER (FIXERR_SUCCESS = 0) + PARAMETER (FIXERR_NULL_POINTER = 1) + PARAMETER (FIXERR_MEMORY = 2) + PARAMETER (FIXERR_SINGULAR_MTX = 3) + PARAMETER (FIXERR_BAD_CTYPE = 4) + PARAMETER (FIXERR_BAD_PARAM = 5) + PARAMETER (FIXERR_BAD_COORD_TRANS = 6) + PARAMETER (FIXERR_ILL_COORD_TRANS = 7) + PARAMETER (FIXERR_BAD_CORNER_PIX = 8) + PARAMETER (FIXERR_NO_REF_PIX_COORD = 9) + PARAMETER (FIXERR_NO_REF_PIX_VAL = 10) + + CHARACTER WCSFIX_ERRMSG(-1:10)*80 + COMMON /WCSFIX_DATA/ WCSFIX_ERRMSG diff --git a/deps/wcslib/Fortran/wcsfix_data.f b/deps/wcslib/Fortran/wcsfix_data.f new file mode 100644 index 0000000..c22e470 --- /dev/null +++ b/deps/wcslib/Fortran/wcsfix_data.f @@ -0,0 +1,45 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcsfix_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA WCSFIX_BLOCK_DATA + + CHARACTER WCSFIX_ERRMSG(-1:10)*80 + + COMMON /WCSFIX_DATA/ WCSFIX_ERRMSG + + DATA WCSFIX_ERRMSG / + : 'No change (not an error)', + : 'Success', + : 'Null wcsprm pointer passed', + : 'Memory allocation failed', + : 'Linear transformation matrix is singular', + : 'Inconsistent or unrecognized coordinate axis types', + : 'Invalid parameter value', + : 'Invalid coordinate transformation parameters', + : 'Ill-conditioned coordinate transformation parameters', + : 'All of the corner pixel coordinates are invalid', + : 'Could not determine reference pixel coordinate', + : 'Could not determine reference pixel value'/ + + END diff --git a/deps/wcslib/Fortran/wcsfix_f.c b/deps/wcslib/Fortran/wcsfix_f.c new file mode 100644 index 0000000..632372d --- /dev/null +++ b/deps/wcslib/Fortran/wcsfix_f.c @@ -0,0 +1,108 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsfix_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include + +// Fortran name mangling. +#include +#define wcsfix_ F77_FUNC(wcsfix, WCSFIX) +#define cdfix_ F77_FUNC(cdfix, CDFIX) +#define datfix_ F77_FUNC(datfix, DATFIX) +#define unitfix_ F77_FUNC(unitfix, UNITFIX) +#define celfix_ F77_FUNC(celfix, CELFIX) +#define spcfix_ F77_FUNC(spcfix, SPCFIX) +#define cylfix_ F77_FUNC(cylfix, CYLFIX) + +//---------------------------------------------------------------------------- + +int wcsfix_(int *ctrl, const int naxis[], int *wcs, int stat[]) + +{ + if (*naxis == 0) naxis = 0x0; + return wcsfix(*ctrl, naxis, (struct wcsprm *)wcs, stat); +} + +//---------------------------------------------------------------------------- + +int cdfix_(int *wcs) + +{ + return cdfix((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int datfix_(int *wcs) + +{ + return datfix((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int obsfix_(int *ctrl, int *wcs) + +{ + return obsfix(*ctrl, (struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int unitfix_(int *ctrl, int *wcs) + +{ + return unitfix(*ctrl, (struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int celfix_(int *wcs) + +{ + return celfix((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int spcfix_(int *wcs) + +{ + return spcfix((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int cylfix_(const int naxis[], int *wcs) + +{ + return cylfix(naxis, (struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int wcspcx_(int *wcs, int *dopc, int *permute, double rotn[2]) + +{ + return wcspcx((struct wcsprm *)wcs, *dopc, *permute, rotn); +} diff --git a/deps/wcslib/Fortran/wcshdr.inc b/deps/wcslib/Fortran/wcshdr.inc new file mode 100644 index 0000000..5c3c3b7 --- /dev/null +++ b/deps/wcslib/Fortran/wcshdr.inc @@ -0,0 +1,84 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcshdr.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL WCSPIH, WCSBTH, WCSTAB, WCSIDX, WCSBDX, WCSVFREE, + : WCSVCOPY + + INTEGER WCSPIH, WCSBTH, WCSTAB, WCSIDX, WCSBDX, WCSVFREE, + : WCSVCOPY + +* Flag bits for the RELAX argument. + INTEGER WCSHDR_none, WCSHDR_all, WCSHDR_reject, WCSHDR_strict + + PARAMETER (WCSHDR_none = 0) + PARAMETER (WCSHDR_all = 2**20 - 1) + PARAMETER (WCSHDR_reject = 2**28) + PARAMETER (WCSHDR_strict = 2**29) + + INTEGER WCSHDR_CROTAia, WCSHDR_EPOCHa, WCSHDR_VELREFa, + : WCSHDR_CD00i00j, WCSHDR_PC00i00j, WCSHDR_PROJPn, + : WCSHDR_CD0i_0ja, WCSHDR_PC0i_0ja, WCSHDR_PV0i_0ma, + : WCSHDR_PS0i_0ma, WCSHDR_RADECSYS, WCSHDR_VSOURCE, + : WCSHDR_DOBSn, WCSHDR_LONGKEY, WCSHDR_CNAMn, + : WCSHDR_AUXIMG, WCSHDR_ALLIMG + + PARAMETER (WCSHDR_CROTAia = 2**0) + PARAMETER (WCSHDR_EPOCHa = 2**1) + PARAMETER (WCSHDR_VELREFa = 2**2) + PARAMETER (WCSHDR_CD00i00j = 2**3) + PARAMETER (WCSHDR_PC00i00j = 2**4) + PARAMETER (WCSHDR_PROJPn = 2**5) + PARAMETER (WCSHDR_CD0i_0ja = 2**6) + PARAMETER (WCSHDR_PC0i_0ja = 2**7) + PARAMETER (WCSHDR_PV0i_0ma = 2**8) + PARAMETER (WCSHDR_PS0i_0ma = 2**9) + PARAMETER (WCSHDR_RADECSYS = 2**10) + PARAMETER (WCSHDR_VSOURCE = 2**11) + PARAMETER (WCSHDR_DOBSn = 2**12) + PARAMETER (WCSHDR_LONGKEY = 2**13) + PARAMETER (WCSHDR_CNAMn = 2**14) + PARAMETER (WCSHDR_AUXIMG = 2**15) + PARAMETER (WCSHDR_ALLIMG = 2**16) + + INTEGER WCSHDR_IMGHEAD, WCSHDR_BIMGARR, WCSHDR_PIXLIST + + PARAMETER (WCSHDR_IMGHEAD = 2**21) + PARAMETER (WCSHDR_BIMGARR = 2**22) + PARAMETER (WCSHDR_PIXLIST = 2**23) + +* Error codes and messages. + INTEGER WCSHDRERR_SUCCESS, WCSHDRERR_NULL_POINTER, + : WCSHDRERR_MEMORY, WCSHDRERR_BAD_COLUMN, + : WCSHDRERR_PARSER, WCSHDRERR_BAD_TABULAR_PARAMS + + PARAMETER (WCSHDRERR_SUCCESS = 0) + PARAMETER (WCSHDRERR_NULL_POINTER = 1) + PARAMETER (WCSHDRERR_MEMORY = 2) + PARAMETER (WCSHDRERR_BAD_COLUMN = 3) + PARAMETER (WCSHDRERR_PARSER = 4) + PARAMETER (WCSHDRERR_BAD_TABULAR_PARAMS = 5) + + CHARACTER WCSHDR_ERRMSG(0:5)*80 + COMMON /WCSHDR_DATA/ WCSHDR_ERRMSG diff --git a/deps/wcslib/Fortran/wcshdr_bindc.f90 b/deps/wcslib/Fortran/wcshdr_bindc.f90 new file mode 100644 index 0000000..31ebf5f --- /dev/null +++ b/deps/wcslib/Fortran/wcshdr_bindc.f90 @@ -0,0 +1,60 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: wcshdr_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION WCSPIH (HEADER, NKEYS, RELAX, CTRL, NREJECT, NWCS, WCSP) + CHARACTER :: HEADER(*) + INTEGER :: NKEYS, RELAX, CTRL, NREJECT, NWCS, WCSP(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSPIH_C (HEADER, NKEYS, RELAX, CTRL, NREJECT, & + NWCS, WCSP) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: HEADER(*) + INTEGER(C_INT) :: NKEYS, RELAX, CTRL, NREJECT, NWCS, WCSP(*) + END FUNCTION WCSPIH_C + END INTERFACE + + WCSPIH = WCSPIH_C (HEADER, NKEYS, RELAX, CTRL, NREJECT, NWCS, WCSP) +END FUNCTION WCSPIH + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSBTH (HEADER, NKEYS, RELAX, CTRL, KEYSEL, COLSEL, & + NREJECT, NWCS, WCSP) + CHARACTER :: HEADER(*) + INTEGER :: NKEYS, RELAX, CTRL, KEYSEL, COLSEL, NREJECT, NWCS, WCSP(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSBTH_C (HEADER, NKEYS, RELAX, CTRL, KEYSEL, & + COLSEL, NREJECT, NWCS, WCSP) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: HEADER(*) + INTEGER(C_INT) :: NKEYS, RELAX, CTRL, KEYSEL, COLSEL, NREJECT, NWCS, & + WCSP(*) + END FUNCTION WCSBTH_C + END INTERFACE + + WCSBTH = WCSBTH_C (HEADER, NKEYS, RELAX, CTRL, KEYSEL, COLSEL, NREJECT, & + NWCS, WCSP) +END FUNCTION WCSBTH diff --git a/deps/wcslib/Fortran/wcshdr_data.f b/deps/wcslib/Fortran/wcshdr_data.f new file mode 100644 index 0000000..b963a1c --- /dev/null +++ b/deps/wcslib/Fortran/wcshdr_data.f @@ -0,0 +1,39 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcshdr_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA WCSHDR_BLOCK_DATA + + CHARACTER WCSHDR_ERRMSG(0:5)*80 + + COMMON /WCSHDR_DATA/ WCSHDR_ERRMSG + + DATA WCSHDR_ERRMSG / + : 'Success', + : 'Null wcsprm pointer passed', + : 'Memory allocation failed', + : 'Invalid column selection', + : 'Fatal error returned by Flex parser', + : 'Invalid tabular parameters'/ + + END diff --git a/deps/wcslib/Fortran/wcshdr_f.c b/deps/wcslib/Fortran/wcshdr_f.c new file mode 100644 index 0000000..c207f36 --- /dev/null +++ b/deps/wcslib/Fortran/wcshdr_f.c @@ -0,0 +1,184 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcshdr_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include + +#include +#include + +// Fortran name mangling. +#include +#define wcspih_ F77_FUNC(wcspih, WCSPIH) +#define wcsbth_ F77_FUNC(wcsbth, WCSBTH) +#define wcstab_ F77_FUNC(wcstab, WCSTAB) +#define wcsidx_ F77_FUNC(wcsidx, WCSIDX) +#define wcsbdx_ F77_FUNC(wcsbdx, WCSBDX) +#define wcsvcopy_ F77_FUNC(wcsvcopy, WCSVCOPY) +#define wcsvfree_ F77_FUNC(wcsvfree, WCSVFREE) + +#ifdef BINDC + #undef wcspih_ + #define wcspih_ wcspih_c + + #undef wcsbth_ + #define wcsbth_ wcsbth_c +#endif + +//---------------------------------------------------------------------------- + +int wcspih_( + char header[], + const int *nkeys, + const int *relax, + const int *ctrl, + int *nreject, + int *nwcs, + iptr wcsp) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling WCSPIH in the Fortran code. + fflush(NULL); + + return wcspih(header, *nkeys, *relax, *ctrl, nreject, nwcs, + (struct wcsprm **)wcsp); +} + +//---------------------------------------------------------------------------- + +int wcsbth_( + char header[], + const int *nkeys, + const int *relax, + const int *ctrl, + const int *keysel, + int *colsel, + int *nreject, + int *nwcs, + iptr wcsp) + +{ + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling WCSBTH in the Fortran code. + fflush(NULL); + + return wcsbth(header, *nkeys, *relax, *ctrl, *keysel, colsel, nreject, + nwcs, (struct wcsprm **)wcsp); +} + +//---------------------------------------------------------------------------- + +int wcstab_(int *wcs) + +{ + return wcstab((struct wcsprm *)wcs); +} + +//---------------------------------------------------------------------------- + +int wcsidx_(int *nwcs, iptr wcsp, int alts[27]) + +{ + return wcsidx(*nwcs, (struct wcsprm **)wcsp, alts); +} + +//---------------------------------------------------------------------------- + +int wcsbdx_(int *nwcs, iptr wcsp, int *type, short alts[1000][28]) + +{ + return wcsbdx(*nwcs, (struct wcsprm **)wcsp, *type, alts); +} + +//---------------------------------------------------------------------------- + +int wcsvcopy_(const iptr wcspp, const int *i, int *wcs) + +{ + struct wcsprm *wcsdst, *wcssrc; + + // Do a shallow copy. + wcssrc = *((struct wcsprm **)wcspp) + *i; + wcsdst = (struct wcsprm *)wcs; + *wcsdst = *wcssrc; + + // Prevent wcsfree(wcsdst) freeing memory that is used by wcssrc. On + // the other hand, beware that wcsfree(wcssrc) will free the "given" + // members of wcsdst for which memory was allocated by wcsini(). + + // Don't take any error messages. + wcsdst->err = 0x0; + wcsdst->lin.err = 0x0; + wcsdst->cel.err = 0x0; + wcsdst->spc.err = 0x0; + wcsdst->cel.prj.err = 0x0; + + // Don't take memory allocated by wcsini()... + wcsdst->m_flag = 0; + wcsdst->m_naxis = 0; + wcsdst->m_crpix = 0x0; + wcsdst->m_pc = 0x0; + wcsdst->m_cdelt = 0x0; + wcsdst->m_crval = 0x0; + wcsdst->m_cunit = 0x0; + wcsdst->m_ctype = 0x0; + wcsdst->m_pv = 0x0; + wcsdst->m_ps = 0x0; + wcsdst->m_cd = 0x0; + wcsdst->m_crota = 0x0; + wcsdst->m_colax = 0x0; + wcsdst->m_cname = 0x0; + wcsdst->m_crder = 0x0; + wcsdst->m_csyer = 0x0; + wcsdst->m_tab = 0x0; + wcsdst->m_wtb = 0x0; + + // ...or by wcsset(). + wcsdst->types = 0x0; + wcsdst->flag = 0; + + // Don't take memory allocated by linini()... + wcsdst->lin.m_flag = 0; + wcsdst->lin.m_naxis = 0x0; + wcsdst->lin.m_crpix = 0x0; + wcsdst->lin.m_pc = 0x0; + wcsdst->lin.m_cdelt = 0x0; + wcsdst->lin.m_dispre = 0x0; + wcsdst->lin.m_disseq = 0x0; + + // ...or by linset(). + wcsdst->lin.piximg = 0x0; + wcsdst->lin.imgpix = 0x0; + wcsdst->lin.flag = 0; + + return 0; +} + +//---------------------------------------------------------------------------- + +int wcsvfree_(int *nwcs, iptr wcspp) + +{ + return wcsvfree(nwcs, (struct wcsprm **)wcspp); +} diff --git a/deps/wcslib/Fortran/wcsmath.inc b/deps/wcslib/Fortran/wcsmath.inc new file mode 100644 index 0000000..a68a5b7 --- /dev/null +++ b/deps/wcslib/Fortran/wcsmath.inc @@ -0,0 +1,27 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcsmath.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* The value used to represent an undefined parameter. + DOUBLE PRECISION UNDEFINED + PARAMETER (UNDEFINED = 987654321.0D99) diff --git a/deps/wcslib/Fortran/wcsunits.inc b/deps/wcslib/Fortran/wcsunits.inc new file mode 100644 index 0000000..be65195 --- /dev/null +++ b/deps/wcslib/Fortran/wcsunits.inc @@ -0,0 +1,88 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcsunits.inc,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + +* Functions. + EXTERNAL WCSUNITSE, WCSUTRNE, WCSULEXE + INTEGER WCSUNITSE, WCSUTRNE, WCSULEXE + +* Deprecated functions. + EXTERNAL WCSUNITS, WCSUTRN, WCSULEX + INTEGER WCSUNITS, WCSUTRN, WCSULEX + +* Array indices. + INTEGER WCSUNITS_PLANE_ANGLE, WCSUNITS_SOLID_ANGLE, + : WCSUNITS_CHARGE, WCSUNITS_MOLE, WCSUNITS_TEMPERATURE, + : WCSUNITS_LUMINTEN, WCSUNITS_MASS, WCSUNITS_LENGTH, + : WCSUNITS_TIME, WCSUNITS_BEAM, WCSUNITS_BIN, + : WCSUNITS_BIT, WCSUNITS_COUNT, WCSUNITS_MAGNITUDE, + : WCSUNITS_PIXEL, WCSUNITS_SOLRATIO, WCSUNITS_VOXEL, + : WCSUNITS_NTYPE + + PARAMETER (WCSUNITS_PLANE_ANGLE = 1) + PARAMETER (WCSUNITS_SOLID_ANGLE = 2) + PARAMETER (WCSUNITS_CHARGE = 3) + PARAMETER (WCSUNITS_MOLE = 4) + PARAMETER (WCSUNITS_TEMPERATURE = 5) + PARAMETER (WCSUNITS_LUMINTEN = 6) + PARAMETER (WCSUNITS_MASS = 7) + PARAMETER (WCSUNITS_LENGTH = 8) + PARAMETER (WCSUNITS_TIME = 9) + PARAMETER (WCSUNITS_BEAM = 10) + PARAMETER (WCSUNITS_BIN = 11) + PARAMETER (WCSUNITS_BIT = 12) + PARAMETER (WCSUNITS_COUNT = 13) + PARAMETER (WCSUNITS_MAGNITUDE = 14) + PARAMETER (WCSUNITS_PIXEL = 15) + PARAMETER (WCSUNITS_SOLRATIO = 16) + PARAMETER (WCSUNITS_VOXEL = 17) + PARAMETER (WCSUNITS_NTYPE = 17) + +* Error codes and messages. + INTEGER UNITSERR_SUCCESS, UNITSERR_BAD_NUM_MULTIPLIER, + : UNITSERR_DANGLING_BINOP, UNITSERR_BAD_INITIAL_SYMBOL, + : UNITSERR_FUNCTION_CONTEXT, UNITSERR_BAD_EXPON_SYMBOL, + : UNITSERR_UNBAL_BRACKET, UNITSERR_UNBAL_PAREN, + : UNITSERR_CONSEC_BINOPS, UNITSERR_PARSER_ERROR, + : UNITSERR_BAD_UNIT_SPEC, UNITSERR_BAD_FUNCS, + : UNITSERR_UNSAFE_TRANS + + PARAMETER (UNITSERR_SUCCESS = 0) + PARAMETER (UNITSERR_BAD_NUM_MULTIPLIER = 1) + PARAMETER (UNITSERR_DANGLING_BINOP = 2) + PARAMETER (UNITSERR_BAD_INITIAL_SYMBOL = 3) + PARAMETER (UNITSERR_FUNCTION_CONTEXT = 4) + PARAMETER (UNITSERR_BAD_EXPON_SYMBOL = 5) + PARAMETER (UNITSERR_UNBAL_BRACKET = 6) + PARAMETER (UNITSERR_UNBAL_PAREN = 7) + PARAMETER (UNITSERR_CONSEC_BINOPS = 8) + PARAMETER (UNITSERR_PARSER_ERROR = 9) + PARAMETER (UNITSERR_BAD_UNIT_SPEC = 10) + PARAMETER (UNITSERR_BAD_FUNCS = 11) + PARAMETER (UNITSERR_UNSAFE_TRANS = 12) + + CHARACTER WCSUNITS_ERRMSG(0:12)*40, + : WCSUNITS_TYPES(WCSUNITS_NTYPE)*18, + : WCSUNITS_UNITS(WCSUNITS_NTYPE)*9 + COMMON /WCSUNITS_DATA/ WCSUNITS_ERRMSG, WCSUNITS_TYPES, + : WCSUNITS_UNITS diff --git a/deps/wcslib/Fortran/wcsunits_bindc.f90 b/deps/wcslib/Fortran/wcsunits_bindc.f90 new file mode 100644 index 0000000..536176b --- /dev/null +++ b/deps/wcslib/Fortran/wcsunits_bindc.f90 @@ -0,0 +1,137 @@ +!============================================================================= +! WCSLIB 8.4 - an implementation of the FITS WCS standard. +! Copyright (C) 1995-2024, Mark Calabretta +! +! This file is part of WCSLIB. +! +! WCSLIB is free software: you can redistribute it and/or modify it under the +! terms of the GNU Lesser General Public License as published by the Free +! Software Foundation, either version 3 of the License, or (at your option) +! any later version. +! +! WCSLIB 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 Lesser General Public License for +! more details. +! +! You should have received a copy of the GNU Lesser General Public License +! along with WCSLIB. If not, see http://www.gnu.org/licenses. +! +! Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +! http://www.atnf.csiro.au/people/Mark.Calabretta +! $Id: wcsunits_bindc.f90,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +!============================================================================= + +INTEGER FUNCTION WCSUNITSE (HAVE, WANT, SCALE, OFFSET, POWER, ERR) + CHARACTER :: HAVE(72), WANT(72) + DOUBLE PRECISION :: SCALE, OFFSET, POWER + INTEGER :: ERR(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSUNITSE_C (HAVE, WANT, SCALE, OFFSET, POWER, & + ERR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: HAVE(72), WANT(72) + REAL(C_DOUBLE) :: SCALE, OFFSET, POWER + INTEGER(C_INT) :: ERR(*) + END FUNCTION WCSUNITSE_C + END INTERFACE + + WCSUNITSE = WCSUNITSE_C (HAVE, WANT, SCALE, OFFSET, POWER, ERR) +END FUNCTION WCSUNITSE + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSUNITS (HAVE, WANT, SCALE, OFFSET, POWER) + CHARACTER :: HAVE(72), WANT(72) + DOUBLE PRECISION :: SCALE, OFFSET, POWER + + INTERFACE + INTEGER(C_INT) FUNCTION WCSUNITS_C (HAVE, WANT, SCALE, OFFSET, POWER) & + BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: HAVE(72), WANT(72) + REAL(C_DOUBLE) :: SCALE, OFFSET, POWER + END FUNCTION WCSUNITS_C + END INTERFACE + + WCSUNITS = WCSUNITS_C (HAVE, WANT, SCALE, OFFSET, POWER) +END FUNCTION WCSUNITS + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSUTRNE (CTRL, UNITSTR, ERR) + INTEGER :: CTRL + CHARACTER :: UNITSTR(72) + INTEGER :: ERR(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSUTRNE_C (CTRL, UNITSTR, ERR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: CTRL + CHARACTER(KIND=C_CHAR, LEN=1) :: UNITSTR(72) + INTEGER(C_INT) :: ERR(*) + END FUNCTION WCSUTRNE_C + END INTERFACE + + WCSUTRNE = WCSUTRNE_C (CTRL, UNITSTR, ERR) +END FUNCTION WCSUTRNE + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSUTRN (CTRL, UNITSTR) + INTEGER :: CTRL + CHARACTER :: UNITSTR(72) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSUTRN_C (CTRL, UNITSTR) BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + INTEGER(C_INT) :: CTRL + CHARACTER(KIND=C_CHAR, LEN=1) :: UNITSTR(72) + END FUNCTION WCSUTRN_C + END INTERFACE + + WCSUTRN = WCSUTRN_C (CTRL, UNITSTR) +END FUNCTION WCSUTRN + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSULEXE (UNITSTR, FUNC, SCALE, UNITS, ERR) + CHARACTER :: UNITSTR(72) + INTEGER :: FUNC + DOUBLE PRECISION :: SCALE, UNITS(*) + INTEGER :: ERR(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSULEXE_C (UNITSTR, FUNC, SCALE, UNITS, ERR) & + BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: UNITSTR(72) + INTEGER(C_INT) :: FUNC + REAL(C_DOUBLE) :: SCALE, UNITS(*) + INTEGER(C_INT) :: ERR(*) + END FUNCTION WCSULEXE_C + END INTERFACE + + WCSULEXE = WCSULEXE_C (UNITSTR, FUNC, SCALE, UNITS, ERR) +END FUNCTION WCSULEXE + +!----------------------------------------------------------------------------- + +INTEGER FUNCTION WCSULEX (UNITSTR, FUNC, SCALE, UNITS) + CHARACTER :: UNITSTR(72) + INTEGER :: FUNC + DOUBLE PRECISION :: SCALE, UNITS(*) + + INTERFACE + INTEGER(C_INT) FUNCTION WCSULEX_C (UNITSTR, FUNC, SCALE, UNITS) & + BIND (C) + USE, INTRINSIC :: ISO_C_BINDING + CHARACTER(KIND=C_CHAR, LEN=1) :: UNITSTR(72) + INTEGER(C_INT) :: FUNC + REAL(C_DOUBLE) :: SCALE, UNITS(*) + END FUNCTION WCSULEX_C + END INTERFACE + + WCSULEX = WCSULEX_C (UNITSTR, FUNC, SCALE, UNITS) +END FUNCTION WCSULEX diff --git a/deps/wcslib/Fortran/wcsunits_data.f b/deps/wcslib/Fortran/wcsunits_data.f new file mode 100644 index 0000000..36ba7ae --- /dev/null +++ b/deps/wcslib/Fortran/wcsunits_data.f @@ -0,0 +1,62 @@ +*======================================================================= +* WCSLIB 8.4 - an implementation of the FITS WCS standard. +* Copyright (C) 1995-2024, Mark Calabretta +* +* This file is part of WCSLIB. +* +* WCSLIB is free software: you can redistribute it and/or modify it +* under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* WCSLIB 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 Lesser General Public +* License for more details. +* +* You should have received a copy of the GNU Lesser General Public +* License along with WCSLIB. If not, see http://www.gnu.org/licenses. +* +* Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +* http://www.atnf.csiro.au/people/Mark.Calabretta +* $Id: wcsunits_data.f,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*======================================================================= + + BLOCK DATA WCSUNITS_BLOCK_DATA + + INTEGER WCSUNITS_NTYPE + PARAMETER (WCSUNITS_NTYPE = 17) + + CHARACTER WCSUNITS_ERRMSG(0:12)*40, + : WCSUNITS_TYPES(WCSUNITS_NTYPE)*18, + : WCSUNITS_UNITS(WCSUNITS_NTYPE)*9 + + COMMON /WCSUNITS_DATA/ WCSUNITS_ERRMSG, WCSUNITS_TYPES, + : WCSUNITS_UNITS + + DATA WCSUNITS_ERRMSG / + : 'Success', + : 'Invalid numeric multiplier', + : 'Dangling binary operator', + : 'Invalid symbol in INITIAL context', + : 'Function in invalid context', + : 'Invalid symbol in EXPON context', + : 'Unbalanced bracket', + : 'Unbalanced parenthesis', + : 'Consecutive binary operators', + : 'Internal parser error', + : 'Non-conformant unit specifications', + : 'Non-conformant functions', + : 'Potentially unsafe translation'/ + + DATA WCSUNITS_TYPES / + : 'plane angle', 'solid angle', 'charge', 'mole', 'temperature', + : 'luminous intensity', 'mass', 'length', 'time', 'beam', 'bin', + : 'bit', 'count', 'stellar magnitude', 'pixel', 'solar ratio', + : 'voxel'/ + + DATA WCSUNITS_UNITS / + : 'degree', 'steradian', 'Coulomb', 'mole', 'Kelvin', 'candela', + : 'kilogram', 'metre', 'second', 8*' '/ + + END diff --git a/deps/wcslib/Fortran/wcsunits_f.c b/deps/wcslib/Fortran/wcsunits_f.c new file mode 100644 index 0000000..d4ef007 --- /dev/null +++ b/deps/wcslib/Fortran/wcsunits_f.c @@ -0,0 +1,155 @@ +/*============================================================================ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under the + terms of the GNU Lesser General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: wcsunits_f.c,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +*===========================================================================*/ + +#include +#include + +#include +#include + +// Fortran name mangling. +#include +#define wcsunitse_ F77_FUNC(wcsunitse, WCSUNITSE) +#define wcsutrne_ F77_FUNC(wcsutrne, WCSUTRNE) +#define wcsulexe_ F77_FUNC(wcsulexe, WCSULEXE) + +// Deprecated. +#define wcsunits_ F77_FUNC(wcsunits, WCSUNITS) +#define wcsutrn_ F77_FUNC(wcsutrn, WCSUTRN) +#define wcsulex_ F77_FUNC(wcsulex, WCSULEX) + +#ifdef BINDC + #undef wcsunitse_ + #define wcsunitse_ wcsunitse_c + + #undef wcsutrne_ + #define wcsutrne_ wcsutrne_c + + #undef wcsulexe_ + #define wcsulexe_ wcsulexe_c + + #undef wcsunits_ + #define wcsunits_ wcsunits_c + + #undef wcsutrn_ + #define wcsutrn_ wcsutrn_c + + #undef wcsulex_ + #define wcsulex_ wcsulex_c +#endif + +//---------------------------------------------------------------------------- + +int wcsunitse_( + const char have[72], + const char want[72], + double *scale, + double *offset, + double *power, + iptr err) + +{ + char have_[73], want_[73]; + wcsutil_strcvt(72, '\0', 1, have, have_); + wcsutil_strcvt(72, '\0', 1, want, want_); + + return wcsunitse(have_, want_, scale, offset, power, (struct wcserr **)err); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int wcsunits_( + const char have[72], + const char want[72], + double *scale, + double *offset, + double *power) + +{ + return wcsunitse_(have, want, scale, offset, power, 0x0); +} + +//---------------------------------------------------------------------------- + +int wcsutrne_( + const int *ctrl, + char unitstr[72], + iptr err) + +{ + char unitstr_[73]; + wcsutil_strcvt(72, '\0', 1, unitstr, unitstr_); + + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling WCSUTRNE in the Fortran code. + fflush(NULL); + + int status = wcsutrne(*ctrl, unitstr_, (struct wcserr **)err); + + wcsutil_strcvt(72, ' ', 0, unitstr_, unitstr); + + return status; +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int wcsutrn_( + const int *ctrl, + char unitstr[72]) + +{ + return wcsutrne_(ctrl, unitstr, 0x0); +} + +//---------------------------------------------------------------------------- + +int wcsulexe_( + const char unitstr[72], + int *func, + double *scale, + double units[WCSUNITS_NTYPE], + iptr err) + +{ + char unitstr_[73]; + wcsutil_strcvt(72, '\0', 1, unitstr, unitstr_); + + // This may or may not force the Fortran I/O buffers to be flushed. If + // not, try CALL FLUSH(6) before calling WCSULEXE in the Fortran code. + fflush(NULL); + + return wcsulexe(unitstr_, func, scale, units, (struct wcserr **)err); +} + +// : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : + +int wcsulex_( + const char unitstr[72], + int *func, + double *scale, + double units[WCSUNITS_NTYPE]) + +{ + return wcsulexe_(unitstr, func, scale, units, 0x0); +} diff --git a/deps/wcslib/GNUmakefile b/deps/wcslib/GNUmakefile new file mode 100644 index 0000000..6bde05f --- /dev/null +++ b/deps/wcslib/GNUmakefile @@ -0,0 +1,217 @@ +#----------------------------------------------------------------------------- +# GNU makefile for building WCSLIB 8.4 +# +# Summary of the main targets +# --------------------------- +# all: Do 'make all' in each subdirectory (excluding ./doxygen). +# check: Do 'make check' in each subdirectory (compile and run tests). +# tests: Do 'make tests' in each subdirectory (compile test programs but +# don't run them). +# install: Do 'make install' in each subdirectory. +# uninstall: Deletes installed files (this release only), including the +# sharable library. +# clean: Recursively delete intermediate files produced as part of the +# build, e.g. object modules, core dumps, etc. +# cleaner: Recursively clean, and also delete test executables, test +# input and output, and intermediates produced in compiling the +# programmers' manual. +# distclean (or realclean): Recursively delete all platform-dependent files +# generated during the build, preserving only the programmers' +# manual and man pages (which are normally provided pre-built). +# It is the one to use between builds for multiple platforms. +# cleanest: Like distclean, but deletes everything that can be regenerated +# from the source files, including the programmers' manual and +# man pages, but excluding 'configure'. +# show: Print the values of important variables used in this and the +# other makefiles. +# writable: Run chmod recursively to make all sources writable. +# +# Notes: +# 1) If you need to make changes then preferably modify makedefs.in instead. +# +# 2) Refer also to the makefiles in subdirectories, particularly +# C/GNUmakefile. +# +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: GNUmakefile,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- +# Get configure settings. +SUBDIR := . +include makedefs + +ifeq "$(CHECK)" "nopgplot" + TSTDIRS := $(filter-out pgsbox,$(TSTDIRS)) +endif + +.PHONY : build check chmod clean cleaner cleanest distclean install \ + realclean show tests uninstall writable + +build : + -@ for DIR in $(SUBDIRS) ; do \ + echo '' ; \ + $(TIMER) ; \ + $(MAKE) -k -C $$DIR build ; \ + done + +check tests :: show + -@ echo '' + -@ $(TIMER) + @ for DIR in $(SUBDIRS) ; do \ + echo '' ; \ + $(MAKE) -i -C $$DIR cleaner build ; \ + done + -@ echo '' + @ for DIR in $(TSTDIRS) ; do \ + echo '' ; \ + $(TIMER) ; \ + $(MAKE) -k -C $$DIR $@ ; \ + done + +check :: + -@ echo '' + -@ echo 'Summary of results for non-graphical tests' + -@ echo '------------------------------------------' + -@ cat ./*/test_results + @ if grep 'FAIL:' ./*/test_results > /dev/null ; then \ + exit 1 ; \ + else \ + exit 0 ; \ + fi + +install : + @ for DIR in $(INSTDIR) ; do \ + $(MAKE) -k -C $$DIR $@ ; \ + done + if [ ! -d "$(LIBDIR)/pkgconfig" ] ; then \ + $(INSTALL) -d -m 775 $(LIBDIR)/pkgconfig ; \ + fi + $(INSTALL) -m 444 wcslib.pc $(LIBDIR)/pkgconfig/wcslib.pc + $(INSTALL) -m 444 wcsconfig.h wcsconfig_f77.h $(INCDIR) + - if [ ! -d "$(DOCDIR)" ] ; then \ + $(INSTALL) -d -m 775 $(DOCDIR) ; \ + fi + $(INSTALL) -m 444 CHANGES COPYING* README $(DOCDIR) + $(INSTALL) -m 444 INSTALL THANKS VALIDATION $(DOCDIR) + - if [ -h $(DOCLINK) ] ; then \ + $(RM) $(DOCLINK) ; \ + fi + $(LN_S) $(notdir $(DOCDIR)) $(DOCLINK) + $(MAKE) -k -C doxygen $@ + +uninstall : + @ for DIR in $(INSTDIR) ; do \ + $(MAKE) -k -C $$DIR $@ ; \ + done + - cd $(LIBDIR) && $(RM) pkgconfig/wcslib.pc + - cd $(INCDIR) && $(RM) wcsconfig*.h + - $(RM) $(DOCLINK) + - $(RM) $(DOCDIR) + $(MAKE) -k -C doxygen $@ + +clean cleaner : + for DIR in $(SUBDIRS) doxygen ; do \ + $(MAKE) -C $$DIR $@ ; \ + done + +cleanest distclean realclean : + for DIR in $(SUBDIRS) doxygen ; do \ + $(MAKE) -C $$DIR $@ ; \ + done + - $(RM) *.log + - $(RM) -r autom4te.cache autoscan.log + - $(RM) -r api-sanity-check + - $(RM) configure~ confdefs.h conftest.* + - $(RM) config.log config.status configure.lineno + - $(RM) makedefs wcslib.pc + - $(RM) wcsconfig.h wcsconfig_*.h + - $(RM) wcslib-*.tar.gz + +show :: + -@ echo 'Subdirectories to be built...' + -@ echo ' SUBDIRS := $(SUBDIRS)' + -@ echo ' TSTDIRS := $(TSTDIRS)' + -@ echo '' + +writable : + chmod -R u+w . + +GNUmakefile : makedefs ; + +makedefs : makedefs.in config.status + -@ echo '' + -@ $(TIMER) + ./config.status + +config.status : configure + -@ echo '' + -@ $(TIMER) + -@ echo '' + -@ echo "Environment variables that affect 'configure':" + -@ echo " FLEX = $${FLEX-(undefined)}" + -@ echo " FLFLAGS = $${FLFLAGS-(undefined)}" + -@ echo " CPP = $${CPP-(undefined)}" + -@ echo " CPPFLAGS = $${CPPFLAGS-(undefined)}" + -@ echo " CC = $${CC-(undefined)}" + -@ echo " CFLAGS = $${CFLAGS-(undefined)}" + -@ echo " F77 = $${F77-(undefined)}" + -@ echo " FFLAGS = $${FFLAGS-(undefined)}" + -@ echo " BINDC = $${BINDC-(undefined)}" + -@ echo " ARFLAGS = $${ARFLAGS-(undefined)}" + -@ echo " LDFLAGS = $${LDFLAGS-(undefined)}" + -@ echo '' + ./configure --no-create + + +#----------------------------------------------------------------------------- +# These are for code management. + +.PHONY : dist + +dist : + $(MAKE) -C doxygen cleanest build + $(MAKE) -C utils man + $(MAKE) distclean + -@ echo $(WCSLIBPKG)/C/RCS > wcslib.X + -@ echo $(WCSLIBPKG)/C/flexed/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/C/test/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/doxygen/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/Fortran/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/Fortran/test/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/makedefs >> wcslib.X + -@ echo $(WCSLIBPKG)/other >> wcslib.X + -@ echo $(WCSLIBPKG)/pgsbox/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/TODO >> wcslib.X + -@ echo $(WCSLIBPKG)/utils/RCS >> wcslib.X + -@ echo $(WCSLIBPKG)/wcslib.T >> wcslib.X + -@ echo $(WCSLIBPKG)/wcslib.X >> wcslib.X + rm -f $(WCSLIBPKG).tar.bz2 + tar cf - -C .. -X wcslib.X $(WCSLIBPKG) | \ + tar t | \ + grep -v '/$$' | \ + sort > wcslib.T + rm -f wcslib.X + tar cvf $(WCSLIBPKG).tar -C .. -T wcslib.T + rm -f wcslib.T + bzip2 $(WCSLIBPKG).tar + chmod 444 $(WCSLIBPKG).tar.bz2 + +install_dist : + scp -p $(WCSLIBPKG).tar.bz2 cal103@venice:/nfs/ftp/software/wcslib/ + cp -fp $(WCSLIBPKG).tar.bz2 ~/public_html/WCS/ + mv -f $(WCSLIBPKG).tar.bz2 ../wcslib-releases/ + ssh cal103@venice "cd /nfs/ftp/software/wcslib/ && \ + rm -f wcslib.tar.bz2 && \ + ln -s $(WCSLIBPKG).tar.bz2 wcslib.tar.bz2" + cp -fp CHANGES wcslib.pdf ~/public_html/WCS/ + rsync --archive --delete html/ ~/public_html/WCS/wcslib/ + +configure : configure.ac + -@ echo '' + -@ $(TIMER) + autoconf + -@ $(RM) configure~ + +# Code development settings exported for 'configure'. +-include flavours diff --git a/deps/wcslib/INSTALL b/deps/wcslib/INSTALL new file mode 100644 index 0000000..4c9a4b6 --- /dev/null +++ b/deps/wcslib/INSTALL @@ -0,0 +1,336 @@ +------------------------------------------------------------------------------ +WCSLIB 8.4 and PGSBOX 8.4 INSTALLATION +-------------------------------------- + +WCSLIB requires an ANSI C compiler with standard ANSI C environment, that is, +a standard C library and header files as defined in Appendix B of Kernigan & +Ritchie, 2nd ed. + +If you are running a typical Linux distro and have installed WCSLIB before, +then all you should need to do is + + tar pxvf wcslib-8.4.tar.bz2 + cd wcslib-8.4 + make install + +Otherwise, read on. + +Installation of WCSLIB is handled by GNU autoconf; GNU make (referred to here +as 'gmake') must be used. The WCSLIB distribution also includes PGSBOX (refer +to the README file). To unpack the tar file, type + + bzcat wcslib-8.4.tar.bz2 | tar pvxf - + cd wcslib-8.4 + +then if you do not need to specify any configuration options, simply run + + gmake + +This will run 'configure' to generate "makedefs" which is included by the top- +level GNUmakefile and those in each subdirectory, and then build 'libwcs.a', +which includes both the C library and Fortran wrappers, and also libpgsbox.a. + +(WARNING: The build may fail with gmake 3.79, upgrade to 3.79.1 or later.) + +configure tries to determine the location of the PGPLOT and CFITSIO libraries +required by some utilities (wcsware, wcsgrid) and programs in the test suite. +If it fails to find them you can, if you wish, tailor the few variables found +at the start of "makedefs". Of course you do not need to exercise the test +suite in order to build and install the library - if configure fails to find +anything required for that it will issue an explicit error message. + +To build and exercise the test suite use + + gmake check + +To install the object libraries and header files, do + + gmake install + + +TWEAKING THE INSTALLATION DEFAULTS +---------------------------------- + +By default the library and header files are installed in the lib and include +subdirectories of /usr/local/. To change this, or any other options, run +configure separately before gmake: + + ./configure --prefix=/some/other/dir + gmake + +Use + + ./configure --help + +to list configure's options. Useful options are + + --with-pgplotinc + --with-pgplotlib + --with-cfitsioinc + --with-cfitsiolib + +Which allow additional directories to be added to the library and include +file search path. + +Installation of WCSLIB differs a little from most packages in that all +configurable makefile variables are defined in a single file, "makedefs", +which configure generates from "makedefs.in". If you need to redefine any of +the makefile variables you can modify makedefs, or preferably makedefs.in. +The makefile will automatically detect this and re-run config.status to +re-generate a new makedefs. configure also creates four header files: + + wcsconfig.h: Contains general purpose preprocessor definitions. It is + included by the other wcsconfig header files. + + wcsconfig_f77.h: By common convention the WCSLIB Fortran wrappers have + been written (in C) using function names in lower case with an + underscore ("_") suffix. wcsconfig_f77.h defines a preprocessor macro, + F77_FUNC(name,NAME), that may redefine these to suit different name + mangling schemes used by some Fortran compilers. + + wcsconfig_tests.h: Contains C preprocessor definitions for compiling the + test/demo programs. + + wcsconfig_utils.h: Contains C preprocessor macro definitions for compiling + the utility programs provided with WCSLIB. + +If you do have trouble building the library please send me config.log. + + +The INSTALL file provided with GNU autoconf 2.53 is appended without change. + + +Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +http://www.atnf.csiro.au/people/Mark.Calabretta +$Id: INSTALL,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ + +============================================================================== + +Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + 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 only 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. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. 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. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. 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. + +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 variables by setting +them in the environment. You can do that on the command line like this: + + ./configure CC=c89 CFLAGS=-O2 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 must use a version of `make' that +supports the `VPATH' variable, such as 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 `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have 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. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' 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. + + 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'. + +Optional Features +================= + + 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. + +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 `--target=TYPE' option 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 + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--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. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/deps/wcslib/README b/deps/wcslib/README new file mode 100644 index 0000000..65d50af --- /dev/null +++ b/deps/wcslib/README @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------ + WCSLIB 8.4 and PGSBOX 8.4 +------------------------------------------------------------------------------ + WCSLIB 8.4 - an implementation of the FITS WCS standard. + Copyright (C) 1995-2024, Mark Calabretta + + This file is part of WCSLIB. + + WCSLIB is free software: you can redistribute it and/or modify it under + the terms of the GNU Lesser General Public License as published by the + Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + WCSLIB 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 Lesser General Public License for + more details. + + You should have received a copy of the GNU Lesser General Public License + along with WCSLIB. If not, see http://www.gnu.org/licenses. + + Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. + http://www.atnf.csiro.au/people/Mark.Calabretta + $Id: README,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +------------------------------------------------------------------------------ + +Please refer to + + ./INSTALL ...Installation instructions. + + ./html/index.html ...The WCSLIB programmer's manual in HTML format. + ./wcslib.pdf ...The WCSLIB programmer's manual in PDF format. + + ./CHANGES ...Log of changes made to WCSLIB. + + ./THANKS ...List of contributors to WCSLIB. + + ./VALIDATION ...List of platforms on which the installation + procedures and test suite were exercised. + + ./COPYING ...A copy of the GNU General Public License, v3.0. + ./COPYING.LESSER ...A copy of the Lesser GNU General Public License. diff --git a/deps/wcslib/THANKS b/deps/wcslib/THANKS new file mode 100644 index 0000000..9e3cc52 --- /dev/null +++ b/deps/wcslib/THANKS @@ -0,0 +1,122 @@ +I would like to acknowledge the following people who have contributed +to WCSLIB and/or PGSBOX in some way since 1995 - via bug reports, +patches, suggestions for improvements, positive feedback, etc. + +Mohammad Akhlaghi (CEFCA & GNUastro) +James Allen (U. Sydney) +James M. Anderson (MPIfR) +Robbie Auld (Cardiff U.) +Klaus Banse (ESO) +David Barnes (ATNF/CSIRO) +Zaak Beekman (Homebrew maintainer for MacOSX) +David Berry (STARLINK & JAC) +Emmanuel Bertin (IAP) +David Binderman +Erik M. Bray (STScI) +Jeremy Brewer (U. Pittsburgh) +Wim Brouw (ATNF/CSIRO) +Stefan Brüns +Peter Bunclark (IoA, U. Cambridge) +Mihai Cara (STScI/Astropy) +Rodrigo Tobar Carrizo (ICRAR/UWA) +Pan Chai (GSFC/NASA) +Charles Copley +Simon Conseil (CRAL) +Neil Crighton +Cesar Enrique Garcia Dabo (ESO) +Sepideh Eskandarlou (CEFCA & GNUastro) +Marc Espie +Lindsey Davis (NOAO) +Nadezhda (Nadia) Dencheva (STScI/Astropy) +Ger van Diepen (ASTRON) +Patrick Dowler (CADC/NRC) +Michael Droettboom (STScI) +Rick Ebert (IPAC/NASA) +Ken Ebisawa (GSFC/NASA) +Sébastien Fabbro (Gentoo linux maintainer) +Octavi Fors (U. North Carolina) +Bob Garwood (NRAO) +Mosè Giordano (Julia wrappers) +Brian Glendenning (NRAO) +Eric Greisen (NRAO) +Michael Halle (AM/Harvard) +Booth Hartley (IPAC/NASA) +Phil Hodge (STScI) +Derek Homeier (Astropy) +Bryan Irby (GSFC/NASA) +Justin Jonas (Rhodes U.) +Yves Jung (ESO) +David Kaplan (KITP/UCSB) +Vishal Kasliwal (U. Pennsylvania, LSST) +Daniel S. Katz (JPL/NASA) +Neil Killeen (ATNF/CSIRO) +David King (NRAO) +Martin Kuemmel (U.-Sternwarte Muenchen) +Paul F. Kunz (SLAC/Stanford U.) +Aleksander Kurek (Jagiellonian U.) +Jonas Møller Larsen (ESO) +Dustin Lang (Perimeter Inst.) +Paddy Leahy (U. Manchester) +Jim Lewis (IoA, U. Cambridge) +Pey-Lian Lim (STScI) +Marco Lombardi (ESO) +Lars Kristian Lundin (ESO) +Robert Lupton (Princeton U.) +Craig Markwardt (GSFC/NASA) +Chiara Marmo (U. Paris-Sud) +Malte Marquarding (ATNF/CSIRO) +Jean-Baptiste Marquette (IAP) +Tom Marsh (U. Warwick) +Sean Mattingly (IPAC/NASA) +Dave McConnell (ATNF/CSIRO) +Thomas A. McGlynn (GSFC/NASA) +Bruce Merry (SARAO) +Michelle Miller (NOAO) +Jessica Mink (CfA) +David Motl (var.astro.cz) +August Muench (CfA) +Fergal Mullally (Princeton U.) +Stuart Mumford (SunPy) +Shu Niu (Purple Mountain Obs.) +Clive Page (U. Leicester) +Ralf Palsa (ESO) +Sergio Pascual (U. Complutense de Madrid, Fedora maintainer) +Bill Pence (GSFC/NASA) +Olivier Perdereau (LAL/IN2P3) +Dirk Petry (ESO) +Ray Plante (NCSA/UIUC) +Paul Price (Princeton U.) +Niruj Mohan Ramanujam (Leiden Obs) +Harold Ravlin (U. Illinois) +Cyril Richard (CNRS) +Thomas Robitaille (MPIA, STScI) +Boud Roukema (TCfA) +Keith A. Scollick (GSFC/NASA) +Arno Schoenmakers (ASTRON) +Pim Schellart (Princeton U.) +Corentin Schreiber (Oxford U.) +Eli Schwartz (Gentoo Linux maintainer) +Michael Seifert (Astropy) +Manodeep Sinha (Astropy) +Colin Slater (LSST) +Hanno Spreeuw (ASTRON) +Ole Streicher (Debian maintainer) +Julian Taylor (ESO) +Hans Terlouw (Kapteyn, Groningen) +Peter Teuben (U. Maryland) +Bill Thompson (GSFC/NASA) +Harro Verkouter (JIVE) +John C. Vernaleo (GSFC/NASA) +Martin Vogelaar (Kapteyn, Groningen) +Stephen Walton (CSUN) +Boyd Waters (NRAO) +Randall Wayth (Curtin U.) +Benjamin Alan Weaver (LBL) +Peter Weilbacher (AIP) +Matthew Whiting (ATNF/CSIRO) +Peter Williams (UCB, CfA) +Daren Scot Wilson (NRAO) +Tony Wong (ATNF/CSIRO) + + +$Id: THANKS,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ diff --git a/deps/wcslib/VALIDATION b/deps/wcslib/VALIDATION new file mode 100644 index 0000000..f8c4649 --- /dev/null +++ b/deps/wcslib/VALIDATION @@ -0,0 +1,815 @@ +Platforms on which the installation procedures and test suite were exercised. + +WCSLIB version 8.4 (2024/10/29) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 6.2 over Ubuntu 22.04 (Jammy Jellyfish) + uname -r (kernel version): 6.8.0-45-generic + gcc --version: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 + gfortran --version: GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 + +WCSLIB version 8.3 (2024/05/14) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 6.0 over Ubuntu 22.04 (Jammy Jellyfish) + uname -r (kernel version): 6.5.0-28-generic + gcc --version: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 + gfortran --version: GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 + + and + + gcc-12 --version: gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0 + gfortran-12 --version: GNU Fortran (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0 + +WCSLIB version 8.2.2 (2023/11/29) +--------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.27 over Ubuntu 22.04 (Jammy Jellyfish) + uname -r (kernel version): 5.19.0-46-generic + gcc --version: gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 + gfortran --version: GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 + +WCSLIB version 8.2 (2023/11/16) +------------------------------- + +* Dell Latitude E6530 (Intel Core i7-3740QM, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.27 over Ubuntu 22.04 (Jammy Jellyfish) + uname -r (kernel version): 5.19.0-38-generic + gcc --version: gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 + gfortran --version: GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 + +WCSLIB version 8.1 (2023/07/06) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.27 over Ubuntu 22.04 (Jammy Jellyfish) + uname -r (kernel version): 5.19.0-40-generic + gcc --version: gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 + gfortran --version: GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 + + and + + gcc-12 --version: gcc-12 (Ubuntu 12.1.0-2ubuntu1~22.04) 12.1.0 + gfortran-12 --version: GNU Fortran (Ubuntu 12.1.0-2ubuntu1~22.04) 12.1.0 + + +WCSLIB version 8.0 beta (2023/07/01) +------------------------------------ + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.27 over Ubuntu 22.04 (Jammy Jellyfish) + uname -r (kernel version): 5.19.0-40-generic + gcc --version: gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 + gfortran --version: GNU Fortran (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0 + + +WCSLIB version 7.13 (2022/10/07) +-------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.25 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-125-generic + gcc --version: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + gfortran --version: GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + + +WCSLIB version 7.12 (2022/09/09) +-------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.25 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-122-generic + gcc --version: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + gfortran --version: GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + + +WCSLIB version 7.11 (2022/04/26) +-------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.24 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-107-generic + gcc --version: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + gfortran --version: GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + + +WCSLIB version 7.10 (2022/04/24) +-------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.24 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-107-generic + gcc --version: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + gfortran --version: GNU Fortran (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0 + + +WCSLIB version 7.9 (2022/03/26) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.23 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-77-generic + gcc --version: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + gfortran --version: GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + + +WCSLIB version 7.8 (2022/03/25) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.23 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-77-generic + gcc --version: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + gfortran --version: GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + + and + + gcc --version: gcc (GCC) 11.1.0 (local build) + gfortran --version: GNU Fortran (GCC) 11.1.0 (local build) + + +WCSLIB version 7.7 (2021/07/12) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.22 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-77-generic + gcc --version: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + gfortran --version: GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + + and + + gcc --version: gcc (GCC) 11.1.0 (local build) + gfortran --version: GNU Fortran (GCC) 11.1.0 (local build) + + +WCSLIB version 7.6 (2021/04/13) +------------------------------- + +* Dell Latitude E6530 (Intel Core i7-3740QM, 4 cores, 8 processors, x86_64) + KDE Neon User Edition 5.21 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-67-generic + gcc --version: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + gfortran --version: GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + + +WCSLIB version 7.5 (2021/03/20) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.20 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-62-generic + gcc --version: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + gfortran --version: GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + + +WCSLIB version 7.4 (2021/01/31) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.20 over Ubuntu 20.04 (Focal Fossa) + uname -r (kernel version): 5.4.0-62-generic + gcc --version: gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + gfortran --version: GNU Fortran (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 + + +WCSLIB version 7.3.1 (2020/08/17) +--------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.19 over Ubuntu 18.04 (Bionic Beaver) + uname -r (kernel version): 4.15.0-112-generic + gcc --version: gcc (GCC) 9.2.0 (local build) + gfortran --version: GNU Fortran (GCC) 9.2.0 (local build) + + +WCSLIB version 7.3 (2020/06/03) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.18 over Ubuntu 18.04 (Bionic Beaver) + uname -r (kernel version): 4.15.0-88-generic + gcc --version: gcc (GCC) 9.2.0 (local build) + gfortran --version: GNU Fortran (GCC) 9.2.0 (local build) + + +WCSLIB version 7.2 (2020/03/09) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.18 over Ubuntu 18.04 (Bionic Beaver) + uname -r (kernel version): 4.15.0-88-generic + gcc --version: gcc (GCC) 9.2.0 (local build) + gfortran --version: GNU Fortran (GCC) 9.2.0 (local build) + + +WCSLIB version 7.1 (2020/01/01) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.17 over Ubuntu 18.04 (Bionic Beaver) + uname -r (kernel version): 4.15.0-70-generic + gcc --version: gcc (GCC) 9.2.0 (local build) + gfortran --version: GNU Fortran (GCC) 9.2.0 (local build) + +* Dell Latitude D610 (Intel Pentium M, 1 processor, i686) + Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.18-6-686 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + gfortran --version: GNU Fortran 95 (GCC) 4.1.2 20061115 (prerelease) + (Debian 4.1.1-21) + + +WCSLIB version 6.3 (2019/07/12) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.15 over Ubuntu 18.04 (Bionic Beaver) + uname -r (kernel version): 4.15.0-50-generic + gcc-8 --version: gcc-8 (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0 + gfortran-8 --version: GNU Fortran (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0 + + +WCSLIB version 6.1 (2018/10/19) +------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.13 over Ubuntu 18.04 (Bionic Beaver) + uname -r (kernel version): 4.15.0-29-generic + gcc --version: gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0 + gfortran --version: GNU Fortran (Ubuntu 7.3.0-16ubuntu3) 7.3.0 + +* Dell Latitude D610 (Intel Pentium M, 1 processor, i686) + Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.18-6-686 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + gfortran --version: GNU Fortran 95 (GCC) 4.1.2 20061115 (prerelease) + (Debian 4.1.1-21) + + +WCSLIB version 5.20 (2018/10/05) +-------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.13 over Ubuntu 18.04 (Bionic Beaver) + uname -r (kernel version): 4.15.0-29-generic + gcc --version: gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0 + gfortran --version: GNU Fortran (Ubuntu 7.3.0-16ubuntu3) 7.3.0 + + +WCSLIB version 5.19 (2018/07/27) +-------------------------------- + +* Dell Latitude E6530 (Intel Core i7-3740QM, 4 cores, 8 processors, x86_64) + Debian linux 8.10 (jessie) + uname -r (kernel version): 3.16.0-4-amd64 + gcc --version: gcc-8.1.0 (GCC) 8.1.0 (local build) + gfortran --version: GNU Fortran (GCC) 8.1.0 (local build) + + and + + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.18 (2018/01/10) +-------------------------------- + +* Dell Latitude XPS 15 9560 (Intel Core i7-7700HQ, 4 cores, 8 CPUs, x86_64) + KDE Neon User Edition 5.11 over Ubuntu 16.04 (Xenial Xerus) + uname -r (kernel version): 4.10.0-40-generic + gcc --version: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609 + gfortran --version: GNU Fortran (Ubuntu 5.4.0-6ubuntu1~16.04.5) 5.4.0 20160609 + + +WCSLIB version 5.17 (2017/09/18) +-------------------------------- + +* Dell Latitude E6530 (Intel Core i7-3740QM, 4 cores, 8 processors, x86_64) + Debian linux 8.9 (jessie) + uname -r (kernel version): 3.16.0-4-amd64 + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.16 (2017/01/15) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.6 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.15 (2016/04/05) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.3 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.14 (2016/02/07) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.3 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.13 (2016/01/26) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.3 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.12 (2015/11/15) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.0 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.11 (2015/10/18) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.0 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.10 (2015/10/09) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.0 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.9 (2015/07/21) +------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.0 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.8 (2015/07/08) +------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.0 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.7 (2015/06/29) +------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.0 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.6 (2015/06/14) +------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 8.0 (jessie) + uname -r (kernel version): 3.16.0-4-686-pae + gcc --version: gcc (Debian 4.9.2-10) 4.9.2 + gfortran --version: GNU Fortran (Debian 4.9.2-10) 4.9.2 + + +WCSLIB version 5.5 (2015/05/05) +------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 5.4 (2015/04/21) +------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 5.3 (2015/04/21) +------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 5.2 beta release (2015/04/15) +-------------------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + +* Dell PowerEdge R710 (Intel Xeon E5530, 8 processors, amd64) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-amd64 + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + (Non-graphical tests only.) + +* Mac Mini (Intel Core i7, 4 cores, x86_64) + MacOSX 10.9.5 (13F1066) + uname -r (kernel version): Darwin 13.4.0 + gcc --version: gcc (GCC) 4.8.3 + gfortran --version: GNU Fortran (GCC) 4.8.3 + (Non-graphical tests only.) + + +WCSLIB version 5.1 beta release (2015/04/07) +-------------------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 5.0 beta release (2015/04/05) +-------------------------------------------- + +* Dell Latitude D620 (Intel Centrino T2300, 2 processors, i686) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + +* Dell PowerEdge R710 (Intel Xeon E5530, 8 processors, amd64) + Debian linux 7.8 (wheezy) + uname -r (kernel version): 3.2.0-4-amd64 + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + (Non-graphical tests only.) + +* Dell PowerEdge R820 (Intel Xeon E5-4620, 32 processors, amd64) + Debian linux 6.0.10 (squeeze) + uname -r (kernel version): 3.2.0-0.bpo.4-amd64 + gcc --version: gcc (Debian 4.4.5-8) 4.4.5 + gfortran --version: GNU Fortran (Debian 4.4.5-8) 4.4.5 + (Non-graphical tests only.) + +* Mac Mini (Intel Core i7, 4 cores, x86_64) + MacOSX 10.9.5 (13F1066) + uname -r (kernel version): Darwin 13.4.0 + gcc --version: gcc (GCC) 4.8.3 + gfortran --version: GNU Fortran (GCC) 4.8.3 + (Non-graphical tests only.) + + +WCSLIB version 4.23 (2014/05/11) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 4.22 (2014/04/13) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +* Dell PowerEdge R710 (Intel Xeon, x86_64) running Debian linux 6.0.9 (squeeze) + uname -r (kernel version): 2.6.32-5-amd64 + gcc --version: gcc (Debian 4.4.5-8) 4.4.5 + gfortran --version: GNU Fortran (Debian 4.4.5-8) 4.4.5 + + +* Mac Mini (Intel Core 2 Duo) running MacOSX 10.6.8 (10K549) + uname -r (kernel version): 10.8.0 + gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 + (Apple Inc. build 5666) (dot 3) + gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) + (Non-graphics tests only.) + + +WCSLIB version 4.21 (2014/03/24) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 4.20 (2013/12/18) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 4.19 (2013/09/30) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 4.18 (2013/07/12) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 7.0 (wheezy) + uname -r (kernel version): 3.2.0-4-686-pae + gcc --version: gcc (Debian 4.7.2-5) 4.7.2 + gfortran --version: GNU Fortran (Debian 4.7.2-5) 4.7.2 + + +WCSLIB version 4.17 (2013/01/29) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 5.0.9 (lenny) + uname -r (kernel version): 2.6.26-2-686 + gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2 + gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 + + +WCSLIB version 4.15 (2012/09/26) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 5.0.9 (lenny) + uname -r (kernel version): 2.6.26-2-686 + gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2 + gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 + + +WCSLIB version 4.14 (2012/07/13) +-------------------------------- + +* Dell Latitude D620 (Intel Centrino, i686) running Debian linux 5.0.9 (lenny) + uname -r (kernel version): 2.6.26-2-686 + gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2 + gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 + + +* MacBook Pro (Intel Core 2 Duo) running MacOSX 10.7.3 (11D50) + uname -r (Darwin kernel version): 11.3.0 + gcc --version: i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 + (Apple Inc. build 5658) (LLVM build 2336.1.00) + gfortran --version: GNU Fortran (GCC) 4.6.1 + (Non-graphics tests only.) + + +WCSLIB version 4.13.1 (2012/03/15) +---------------------------------- + +* Dell Latitude D630 (Intel Centrino, i686) running Debian linux 5.0.9 (lenny) + uname -r (kernel version): 2.6.32-bpo.5-686 + gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2 + gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 + + +* MacBook Pro (Intel Core 2 Duo) running MacOSX 10.7.3 (11D50) + uname -r (Darwin kernel version): 11.3.0 + gcc --version: i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 + (Apple Inc. build 5658) (LLVM build 2336.1.00) + gfortran --version: GNU Fortran (GCC) 4.6.1 + (Non-graphics tests only.) + + +WCSLIB version 4.10 (2012/02/06) +-------------------------------- + +* Dell Latitude D630 (Intel Centrino, i686) running Debian linux 5.0.9 (lenny) + uname -r (kernel version): 2.6.32-bpo.5-686 + gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2 + gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 + + +WCSLIB version 4.8 (2011/08/15) +------------------------------- + +* Dell Latitude D620 (Intel Centrino Duo, i686), Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.24-1-686 (32-bit) + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) + + +* Dell PowerEdge 2950 (Intel Xeon, 8 x X5460), Debian linux 5.0.8 (lenny) + uname -r (kernel version): 2.6.26-2-amd64 (64-bit) + gcc --version: gcc (Debian 4.3.2-1.1) 4.3.2 + gfortran --version: GNU Fortran (Debian 4.3.2-1.1) 4.3.2 + + +* Marvell SheevaPlug (Feroceon 88FR131 rev 1 ARM v5L), Debian linux 6.0 + (squeeze) + uname -r (kernel version): 2.6.32-5-kirkwood + gcc --version: gcc (Debian 4.4.5-8) 4.4.5 + gfortran --version: GNU Fortran (Debian 4.4.5-8) 4.4.5 + + +* Mac mini (Intel Core 2 Duo) running MacOSX 10.6.2 (10C540) + uname -r (Darwin kernel version): 10.2.0 + gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 + (Apple Inc. build 5646) + gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) + + +* Enterprise 450 Model 2250 (Sparc, sun4u 64-bit), SunOS 5.9 (Solaris 9) + uname -r (SunOS version): 5.9 + gcc --version: gcc (GCC) 4.5.1 + gfortran --version: GNU Fortran (GCC) 4.5.1 + + +WCSLIB version 4.7 (2011/02/07) +------------------------------- + +* Dell Latitude D630 (Intel Centrino, i686) running Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.24-1-686 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) + + +* Sun SunFire V20z (AMD Opteron, x86_64) running Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.18-6-amd64 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) + + +* Enterprise 450 Model 2250 (Sparc, sun4u 64-bit), SunOS 5.9 (Solaris 9) + uname -r (SunOS version): 5.9 + gcc --version: gcc (GCC) 4.5.1 + gfortran --version: GNU Fortran (GCC) 4.5.1 + + and + + cc -V: cc: Sun WorkShop 6 update 2 C 5.3 Patch 111679-14 2004/02/20 + f77 -V: f77: Sun WorkShop 6 update 2 FORTRAN 77 5.3 Patch 111691-07 + 2004/04/23 + + +* Mac Xserve (Quad-Core Intel Xeon) running MacOSX 10.6.5 (10H575) + uname -r (Darwin kernel version): 10.5.0 + gcc --version: 4.2.1 (Apple Inc. build 5664) + gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) + + +* Mac mini (Intel Core 2 Duo) running MacOSX 10.6.2 (10C540) + uname -r (Darwin kernel version): 10.2.0 + gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 + (Apple Inc. build 5646) + gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) + + +* Mac mini (Intel Core Duo) running MacOSX 10.4.9 (8P2137) + uname -r (Darwin kernel version): 8.9.1 + gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) + g77 --version: GNU Fortran (GCC) 3.4.0 + + +WCSLIB version 4.5 (2010/07/16) +------------------------------- + +* Dell Latitude D630 (Intel Centrino, i686) running Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.24-1-686 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) + + and + + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + ifort -V: Intel(R) Fortran Compiler for 32-bit applications, Version 8.1 + Build 20041118Z Package ID: l_fc_pc_8.1.023 + + +* Mac mini (Intel Core 2 Duo, i386) running MacOSX 10.6.2 (10C540) + uname -r (Darwin kernel version): 10.2.0 + gcc --version: i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 + (Apple Inc. build 5646) + gfortran --version: GNU Fortran (GCC) 4.5.0 20100107 (experimental) + + +* Mac mini (Intel Core Duo, i386) running MacOSX 10.4.9 (8P2137) + uname -r (Darwin kernel version): 8.9.1 + gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) + g77 --version: GNU Fortran (GCC) 3.4.0 + + and + + gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) + gfortran --version: GNU Fortran (GCC) 4.3.0 20070316 (experimental) + + +* Sun SunFire V20z (AMD Opteron, x86_64) running Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.18-6-amd64 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) + + and + + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + gfortran --version: GNU Fortran 95 (GCC) 4.1.2 20061115 (prerelease) + (Debian 4.1.1-21) + + +* Sun Ultra-60 (Sparc, sun4u) running SunOS 5.6 (Solaris 2.6) + uname -r (SunOS version): 5.6 + gcc --version: 2.95.3 + g77 --version: GNU Fortran 0.5.25 20010315 (release) + + and + + cc -V: cc: Sun WorkShop 6 update 2 C 5.3 Patch 111679-14 2004/02/20 + f77 -V: f77: Sun WorkShop 6 update 2 FORTRAN 77 5.3 Patch 111691-07 + 2004/04/23 + + + +WCSLIB version 4.4 (2009/08/06) +------------------------------- + +* Dell Latitude D630 (Intel Centrino, i686) running Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.24-1-686 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) + + +* Mac mini (Intel Core Duo, i386) running MacOSX 10.4.9 (8P2137) + uname -r (Darwin kernel version): 8.9.1 + gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) + g77 --version: GNU Fortran (GCC) 3.4.0 + + and + + gcc --version: gcc (GCC) 4.3.0 20070316 (experimental) + gfortran --version: GNU Fortran (GCC) 4.3.0 20070316 (experimental) + + +* Sun SunFire V20z (AMD Opteron, x86_64) running Debian linux 4.0 (etch) + uname -r (kernel version): 2.6.18-6-amd64 + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + g77 --version: GNU Fortran (GCC) 3.4.6 (Debian 3.4.6-5) + + and + + gcc --version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) + gfortran --version: GNU Fortran 95 (GCC) 4.1.2 20061115 (prerelease) + (Debian 4.1.1-21) + + +* Sun SunBlade 1000 (Sparc, sun4u) running SunOS 5.8 (Solaris 2.8) + uname -r (SunOS version): 5.8 + gcc --version: 2.95.3 + g77 --version: GNU Fortran 0.5.25 20010315 (release) + + and + + cc -V: cc: Sun WorkShop 6 update 2 C 5.3 Patch 111679-14 2004/02/20 + f77 -V: f77: Sun WorkShop 6 update 2 FORTRAN 77 5.3 Patch 111691-07 + 2004/04/23 + +------------------------------------------------------------------------------ +$Id: VALIDATION,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ diff --git a/deps/wcslib/config.log b/deps/wcslib/config.log new file mode 100644 index 0000000..7a77188 --- /dev/null +++ b/deps/wcslib/config.log @@ -0,0 +1,2072 @@ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by WCSLIB configure 8.4, which was +generated by GNU Autoconf 2.71. Invocation command line was + + $ ./configure + +## --------- ## +## Platform. ## +## --------- ## + +hostname = Severin.local +uname -m = arm64 +uname -r = 23.5.0 +uname -s = Darwin +uname -v = Darwin Kernel Version 23.5.0: Wed May 1 20:16:51 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T8103 + +/usr/bin/uname -p = arm +/bin/uname -X = unknown + +/bin/arch = unknown +/usr/bin/arch -k = unknown +/usr/convex/getsysinfo = unknown +/usr/bin/hostinfo = Mach kernel version: + Darwin Kernel Version 23.5.0: Wed May 1 20:16:51 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T8103 +Kernel configured for up to 8 processors. +8 processors are physically available. +8 processors are logically available. +Processor type: arm64e (ARM64E) +Processors active: 0 1 2 3 4 5 6 7 +Primary memory available: 8.00 gigabytes +Default processor set: 489 tasks, 2216 threads, 8 processors +Load average: 1.48, Mach factor: 6.51 +/bin/machine = unknown +/usr/bin/oslevel = unknown +/bin/universe = unknown + +PATH: /Users/severin/Documents/GitHub/astroimsum/venv/bin/ +PATH: /Users/severin/.juliaup/bin/ +PATH: /opt/homebrew/lib/ruby/gems/3.1.0/bin/ +PATH: /opt/homebrew/opt/ruby/bin/ +PATH: /opt/homebrew/bin/ +PATH: /opt/homebrew/sbin/ +PATH: /usr/local/bin/ +PATH: /System/Cryptexes/App/usr/bin/ +PATH: /usr/bin/ +PATH: /bin/ +PATH: /usr/sbin/ +PATH: /sbin/ +PATH: /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin/ +PATH: /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin/ +PATH: /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin/ +PATH: /opt/X11/bin/ +PATH: /Library/Apple/usr/bin/ +PATH: //Library/Developer/Panda3D/bin/ +PATH: /Library/TeX/texbin/ +PATH: /Applications/Wireshark.app/Contents/MacOS/ +PATH: /Applications/VMware Fusion Tech Preview.app/Contents/Public/ +PATH: /usr/local/share/dotnet/ +PATH: ~/.dotnet/tools/ +PATH: /Library/Frameworks/Mono.framework/Versions/Current/Commands/ +PATH: /Users/severin/.local/bin/ +PATH: /Users/severin/.juliaup/bin/ +PATH: /opt/homebrew/lib/ruby/gems/3.1.0/bin/ +PATH: /opt/homebrew/opt/ruby/bin/ +PATH: /Users/severin/.cargo/bin/ +PATH: /Users/severin/.cabal/bin/ +PATH: /Users/severin/.ghcup/bin/ +PATH: /Users/severin/.cargo/bin/ + + +## ----------- ## +## Core tests. ## +## ----------- ## + +configure:2747: looking for aux files: install-sh config.guess config.sub +configure:2760: trying ./config/ +configure:2771: ./config/install-sh found +configure:2789: ./config/config.guess found +configure:2789: ./config/config.sub found +configure:2922: checking build system type +configure:2937: result: arm-apple-darwin23.5.0 +configure:2957: checking host system type +configure:2971: result: arm-apple-darwin23.5.0 +configure:3012: checking for flex +configure:3033: found /usr/bin/flex +configure:3044: result: flex +configure:3061: Using Flex version 2.6.4. +configure:3138: checking for gcc +configure:3159: found /usr/bin/gcc +configure:3170: result: gcc +configure:3523: checking for C compiler version +configure:3532: gcc --version >&5 +Apple clang version 15.0.0 (clang-1500.3.9.4) +Target: arm64-apple-darwin23.5.0 +Thread model: posix +InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin +configure:3543: $? = 0 +configure:3532: gcc -v >&5 +Apple clang version 15.0.0 (clang-1500.3.9.4) +Target: arm64-apple-darwin23.5.0 +Thread model: posix +InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin +configure:3543: $? = 0 +configure:3532: gcc -V >&5 +clang: error: argument to '-V' is missing (expected 1 value) +clang: error: no input files +configure:3543: $? = 1 +configure:3532: gcc -qversion >&5 +clang: error: unknown argument '-qversion'; did you mean '--version'? +clang: error: no input files +configure:3543: $? = 1 +configure:3532: gcc -version >&5 +clang: error: unknown argument '-version'; did you mean '--version'? +clang: error: no input files +configure:3543: $? = 1 +configure:3563: checking whether the C compiler works +configure:3585: gcc conftest.c >&5 +configure:3589: $? = 0 +configure:3639: result: yes +configure:3642: checking for C compiler default output file name +configure:3644: result: a.out +configure:3650: checking for suffix of executables +configure:3657: gcc -o conftest conftest.c >&5 +configure:3661: $? = 0 +configure:3684: result: +configure:3706: checking whether we are cross compiling +configure:3714: gcc -o conftest conftest.c >&5 +configure:3718: $? = 0 +configure:3725: ./conftest +configure:3729: $? = 0 +configure:3744: result: no +configure:3749: checking for suffix of object files +configure:3772: gcc -c conftest.c >&5 +configure:3776: $? = 0 +configure:3798: result: o +configure:3802: checking whether the compiler supports GNU C +configure:3822: gcc -c conftest.c >&5 +configure:3822: $? = 0 +configure:3832: result: yes +configure:3843: checking whether gcc accepts -g +configure:3864: gcc -c -g conftest.c >&5 +configure:3864: $? = 0 +configure:3908: result: yes +configure:3928: checking for gcc option to enable C11 features +configure:3943: gcc -c -g -O2 conftest.c >&5 +conftest.c:24:14: warning: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Wdeprecated-non-prototype] +static char *e (p, i) + ^ +1 warning generated. +configure:3943: $? = 0 +configure:3961: result: none needed +configure:4076: checking how to run the C preprocessor +configure:4102: gcc -E conftest.c +configure:4102: $? = 0 +configure:4117: gcc -E conftest.c +conftest.c:10:10: fatal error: 'ac_nonexistent.h' file not found +#include + ^~~~~~~~~~~~~~~~~~ +1 error generated. +configure:4117: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| /* end confdefs.h. */ +| #include +configure:4144: result: gcc -E +configure:4158: gcc -E conftest.c +configure:4158: $? = 0 +configure:4173: gcc -E conftest.c +conftest.c:10:10: fatal error: 'ac_nonexistent.h' file not found +#include + ^~~~~~~~~~~~~~~~~~ +1 error generated. +configure:4173: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| /* end confdefs.h. */ +| #include +configure:4256: checking for gcc +configure:4288: result: gcc +configure:4641: checking for C compiler version +configure:4650: gcc --version >&5 +Apple clang version 15.0.0 (clang-1500.3.9.4) +Target: arm64-apple-darwin23.5.0 +Thread model: posix +InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin +configure:4661: $? = 0 +configure:4650: gcc -v >&5 +Apple clang version 15.0.0 (clang-1500.3.9.4) +Target: arm64-apple-darwin23.5.0 +Thread model: posix +InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin +configure:4661: $? = 0 +configure:4650: gcc -V >&5 +clang: error: argument to '-V' is missing (expected 1 value) +clang: error: no input files +configure:4661: $? = 1 +configure:4650: gcc -qversion >&5 +clang: error: unknown argument '-qversion'; did you mean '--version'? +clang: error: no input files +configure:4661: $? = 1 +configure:4650: gcc -version >&5 +clang: error: unknown argument '-version'; did you mean '--version'? +clang: error: no input files +configure:4661: $? = 1 +configure:4665: checking whether the compiler supports GNU C +configure:4695: result: yes +configure:4706: checking whether gcc accepts -g +configure:4771: result: yes +configure:4791: checking for gcc option to enable C11 features +configure:4824: result: none needed +configure:4937: Using gcc version +configure:4945: checking for an ANSI C-conforming const +configure:5012: gcc -c -g -O2 conftest.c >&5 +configure:5012: $? = 0 +configure:5020: result: yes +configure:5032: checking for stdio.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for stdlib.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for string.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for inttypes.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for stdint.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for strings.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for sys/stat.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for sys/types.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5032: checking for unistd.h +configure:5032: gcc -c -g -O2 conftest.c >&5 +configure:5032: $? = 0 +configure:5032: result: yes +configure:5057: checking for size_t +configure:5057: gcc -c -g -O2 conftest.c >&5 +configure:5057: $? = 0 +configure:5057: gcc -c -g -O2 conftest.c >&5 +conftest.c:51:21: error: expected expression +if (sizeof ((size_t))) + ^ +1 error generated. +configure:5057: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_STDIO_H +| # include +| #endif +| #ifdef HAVE_STDLIB_H +| # include +| #endif +| #ifdef HAVE_STRING_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main (void) +| { +| if (sizeof ((size_t))) +| return 0; +| ; +| return 0; +| } +configure:5057: result: yes +configure:5079: checking for uint16_t +configure:5079: gcc -c -g -O2 conftest.c >&5 +configure:5079: $? = 0 +configure:5079: result: yes +configure:5089: checking for uint32_t +configure:5089: gcc -c -g -O2 conftest.c >&5 +configure:5089: $? = 0 +configure:5089: result: yes +configure:5107: checking for ctype.h +configure:5107: gcc -c -g -O2 conftest.c >&5 +configure:5107: $? = 0 +configure:5107: result: yes +configure:5107: checking for inttypes.h +configure:5107: result: yes +configure:5107: checking for limits.h +configure:5107: gcc -c -g -O2 conftest.c >&5 +configure:5107: $? = 0 +configure:5107: result: yes +configure:5107: checking for locale.h +configure:5107: gcc -c -g -O2 conftest.c >&5 +configure:5107: $? = 0 +configure:5107: result: yes +configure:5107: checking for math.h +configure:5107: gcc -c -g -O2 conftest.c >&5 +configure:5107: $? = 0 +configure:5107: result: yes +configure:5107: checking for setjmp.h +configure:5107: gcc -c -g -O2 conftest.c >&5 +configure:5107: $? = 0 +configure:5107: result: yes +configure:5107: checking for stdarg.h +configure:5107: gcc -c -g -O2 conftest.c >&5 +configure:5107: $? = 0 +configure:5107: result: yes +configure:5107: checking for stddef.h +configure:5107: gcc -c -g -O2 conftest.c >&5 +configure:5107: $? = 0 +configure:5107: result: yes +configure:5107: checking for stdint.h +configure:5107: result: yes +configure:5107: checking for stdio.h +configure:5107: result: yes +configure:5107: checking for stdlib.h +configure:5107: result: yes +configure:5107: checking for string.h +configure:5107: result: yes +configure:5141: checking for floor in -lm +configure:5164: gcc -o conftest -g -O2 conftest.c -lm >&5 +conftest.c:36:6: warning: incompatible redeclaration of library function 'floor' [-Wincompatible-library-redeclaration] +char floor (); + ^ +conftest.c:36:6: note: 'floor' is a builtin with type 'double (double)' +1 warning generated. +configure:5164: $? = 0 +configure:5174: result: yes +configure:5187: checking for cosd in -lsunmath +configure:5210: gcc -o conftest -g -O2 conftest.c -lsunmath -lm >&5 +ld: library 'sunmath' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:5210: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| /* 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. */ +| char cosd (); +| int +| main (void) +| { +| return cosd (); +| ; +| return 0; +| } +configure:5220: result: no +configure:5229: checking for sincos +configure:5229: gcc -o conftest -g -O2 conftest.c -lm >&5 +Undefined symbols for architecture arm64: + "_sincos", referenced from: + _main in conftest-701377.o +ld: symbol(s) not found for architecture arm64 +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:5229: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| /* end confdefs.h. */ +| /* Define sincos to an innocuous variant, in case declares sincos. +| For example, HP-UX 11i declares gettimeofday. */ +| #define sincos innocuous_sincos +| +| /* System header to define __stub macros and hopefully few prototypes, +| which can conflict with char sincos (); below. */ +| +| #include +| #undef sincos +| +| /* 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 sincos (); +| /* 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_sincos || defined __stub___sincos +| choke me +| #endif +| +| int +| main (void) +| { +| return sincos (); +| ; +| return 0; +| } +configure:5229: result: no +configure:5242: checking size of int +configure:5248: gcc -o conftest -g -O2 conftest.c -lm >&5 +configure:5248: $? = 0 +configure:5248: ./conftest +configure:5248: $? = 0 +configure:5263: result: 4 +configure:5275: checking size of long int +configure:5281: gcc -o conftest -g -O2 conftest.c -lm >&5 +configure:5281: $? = 0 +configure:5281: ./conftest +configure:5281: $? = 0 +configure:5296: result: 8 +configure:5308: checking size of long long int +configure:5314: gcc -o conftest -g -O2 conftest.c -lm >&5 +configure:5314: $? = 0 +configure:5314: ./conftest +configure:5314: $? = 0 +configure:5329: result: 8 +configure:5359: checking for printf z format modifier for size_t type +configure:5385: gcc -o conftest -g -O2 conftest.c -lm >&5 +configure:5385: $? = 0 +configure:5385: ./conftest +configure:5385: $? = 0 +configure:5390: result: yes +configure:5504: checking for gfortran +configure:5525: found /opt/homebrew/bin/gfortran +configure:5536: result: gfortran +configure:5562: checking for Fortran 77 compiler version +configure:5571: gfortran --version >&5 +GNU Fortran (Homebrew GCC 14.2.0_1) 14.2.0 +Copyright (C) 2024 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. + +configure:5582: $? = 0 +configure:5571: gfortran -v >&5 +Using built-in specs. +COLLECT_GCC=gfortran +COLLECT_LTO_WRAPPER=/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../libexec/gcc/aarch64-apple-darwin23/14/lto-wrapper +Target: aarch64-apple-darwin23 +Configured with: ../configure --prefix=/opt/homebrew/opt/gcc --libdir=/opt/homebrew/opt/gcc/lib/gcc/current --disable-nls --enable-checking=release --with-gcc-major-version-only --enable-languages=c,c++,objc,obj-c++,fortran,m2 --program-suffix=-14 --with-gmp=/opt/homebrew/opt/gmp --with-mpfr=/opt/homebrew/opt/mpfr --with-mpc=/opt/homebrew/opt/libmpc --with-isl=/opt/homebrew/opt/isl --with-zstd=/opt/homebrew/opt/zstd --with-pkgversion='Homebrew GCC 14.2.0_1' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --with-system-zlib --build=aarch64-apple-darwin23 --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 14.2.0 (Homebrew GCC 14.2.0_1) +configure:5582: $? = 0 +configure:5571: gfortran -V >&5 +gfortran: error: unrecognized command-line option '-V' +gfortran: fatal error: no input files +compilation terminated. +configure:5582: $? = 1 +configure:5571: gfortran -qversion >&5 +gfortran: error: unrecognized command-line option '-qversion'; did you mean '--version'? +gfortran: fatal error: no input files +compilation terminated. +configure:5582: $? = 1 +configure:5591: checking whether the compiler supports GNU Fortran 77 +configure:5605: gfortran -c conftest.F >&5 +configure:5605: $? = 0 +configure:5615: result: yes +configure:5623: checking whether gfortran accepts -g +configure:5635: gfortran -c -g conftest.f >&5 +configure:5635: $? = 0 +configure:5644: result: yes +configure:5698: checking whether gfortran accepts -I +configure:5713: gfortran -c -I. conftest.f >&5 +configure:5713: $? = 0 +configure:5715: result: yes +configure:5736: checking how to get verbose linking output from gfortran +configure:5747: gfortran -c -g -O2 -I. conftest.f >&5 +configure:5747: $? = 0 +configure:5766: gfortran -o conftest -g -O2 -I. -v conftest.f -lm +Using built-in specs. +Target: aarch64-apple-darwin23 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 14.2.0 (Homebrew GCC 14.2.0_1) + /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../libexec/gcc/aarch64-apple-darwin23/14/f951 conftest.f -ffixed-form -I . -fPIC -quiet -dumpbase conftest.f -dumpbase-ext .f -mmacosx-version-min=14.0.0 -mcpu=apple-m1 -mlittle-endian -mabi=lp64 -g -O2 -version -fintrinsic-modules-path /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/finclude -o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccS72INV.s +GNU Fortran (Homebrew GCC 14.2.0_1) version 14.2.0 (aarch64-apple-darwin23) + compiled by GNU C version 14.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.27-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + as -arch arm64 -v -I . -mmacosx-version-min=14.0 -o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//cc1yukAv.o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccS72INV.s +Apple clang version 15.0.0 (clang-1500.3.9.4) +Target: arm64-apple-darwin23.5.0 +Thread model: posix +InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1as -triple arm64-apple-macosx14.0.0 -filetype obj -main-file-name ccS72INV.s -target-cpu apple-m1 -target-feature +v8.5a -target-feature +crc -target-feature +lse -target-feature +rdm -target-feature +crypto -target-feature +dotprod -target-feature +fp-armv8 -target-feature +neon -target-feature +fp16fml -target-feature +ras -target-feature +rcpc -target-feature +zcm -target-feature +zcz -target-feature +fullfp16 -target-feature +sm4 -target-feature +sha3 -target-feature +sha2 -target-feature +aes -I . -fdebug-compilation-dir=/Users/severin/Documents/GitHub/astroimsum/deps/wcslib -dwarf-debug-producer "Apple clang version 15.0.0 (clang-1500.3.9.4)" -I . -dwarf-version=4 -mrelocation-model pic --mrelax-relocations -mllvm -disable-aligned-alloc-awareness=1 -o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//cc1yukAv.o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccS72INV.s +Reading specs from /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/../../../libgfortran.spec +rename spec lib to liborig + /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../libexec/gcc/aarch64-apple-darwin23/14/collect2 -demangle -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk/ -dynamic -arch arm64 -platform_version macos 14.0.0 0.0 -o conftest -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14 -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/../../.. -lemutls_w -lheapt_w /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//cc1yukAv.o -lgfortran -lgcc -lquadmath -lSystem -no_compact_unwind -rpath @loader_path -rpath /opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -rpath /opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -rpath /opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -idsym -dsym +configure:5849: result: -v +configure:5851: checking for Fortran 77 libraries of gfortran +configure:5875: gfortran -o conftest -g -O2 -I. -v conftest.f -lm +Using built-in specs. +Target: aarch64-apple-darwin23 +Thread model: posix +Supported LTO compression algorithms: zlib zstd +gcc version 14.2.0 (Homebrew GCC 14.2.0_1) + /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../libexec/gcc/aarch64-apple-darwin23/14/f951 conftest.f -ffixed-form -I . -fPIC -quiet -dumpbase conftest.f -dumpbase-ext .f -mmacosx-version-min=14.0.0 -mcpu=apple-m1 -mlittle-endian -mabi=lp64 -g -O2 -version -fintrinsic-modules-path /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/finclude -o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccdtK06o.s +GNU Fortran (Homebrew GCC 14.2.0_1) version 14.2.0 (aarch64-apple-darwin23) + compiled by GNU C version 14.2.0, GMP version 6.3.0, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.27-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + as -arch arm64 -v -I . -mmacosx-version-min=14.0 -o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccxRBR0c.o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccdtK06o.s +Apple clang version 15.0.0 (clang-1500.3.9.4) +Target: arm64-apple-darwin23.5.0 +Thread model: posix +InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1as -triple arm64-apple-macosx14.0.0 -filetype obj -main-file-name ccdtK06o.s -target-cpu apple-m1 -target-feature +v8.5a -target-feature +crc -target-feature +lse -target-feature +rdm -target-feature +crypto -target-feature +dotprod -target-feature +fp-armv8 -target-feature +neon -target-feature +fp16fml -target-feature +ras -target-feature +rcpc -target-feature +zcm -target-feature +zcz -target-feature +fullfp16 -target-feature +sm4 -target-feature +sha3 -target-feature +sha2 -target-feature +aes -I . -fdebug-compilation-dir=/Users/severin/Documents/GitHub/astroimsum/deps/wcslib -dwarf-debug-producer "Apple clang version 15.0.0 (clang-1500.3.9.4)" -I . -dwarf-version=4 -mrelocation-model pic --mrelax-relocations -mllvm -disable-aligned-alloc-awareness=1 -o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccxRBR0c.o /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccdtK06o.s +Reading specs from /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/../../../libgfortran.spec +rename spec lib to liborig + /opt/homebrew/Cellar/gcc/14.2.0_1/bin/../libexec/gcc/aarch64-apple-darwin23/14/collect2 -demangle -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk/ -dynamic -arch arm64 -platform_version macos 14.0.0 0.0 -o conftest -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14 -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/../../.. -lemutls_w -lheapt_w /var/folders/dz/rp7fw4410w79vbnkbhvd0q6m0000gn/T//ccxRBR0c.o -lgfortran -lgcc -lquadmath -lSystem -no_compact_unwind -rpath @loader_path -rpath /opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -rpath /opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -rpath /opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -idsym -dsym +configure:6091: result: -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14 -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/../../.. -lemutls_w -lheapt_w -lgfortran -lquadmath +configure:6130: checking for dummy main to link with Fortran 77 libraries +configure:6165: gcc -o conftest -g -O2 conftest.c -lm -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath >&5 +configure:6165: $? = 0 +configure:6212: result: none +configure:6244: checking for Fortran 77 name-mangling scheme +configure:6258: gfortran -c -g -O2 -I. conftest.f >&5 +configure:6258: $? = 0 +configure:6297: gcc -o conftest -g -O2 conftest.c cfortran_test.o -lm -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath >&5 +Undefined symbols for architecture arm64: + "_foobar", referenced from: + _main in conftest-81628e.o +ld: symbol(s) not found for architecture arm64 +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:6297: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| /* 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. */ +| char foobar (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return foobar (); +| ; +| return 0; +| } +configure:6297: gcc -o conftest -g -O2 conftest.c cfortran_test.o -lm -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath >&5 +configure:6297: $? = 0 +configure:6353: gcc -o conftest -g -O2 conftest.c cfortran_test.o -lm -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath >&5 +configure:6353: $? = 0 +configure:6396: result: lower case, underscore, no extra underscore +configure:6495: checking for printf$LDBLStub in -lSystemStubs +configure:6526: gcc -o conftest -g -O2 conftest.c -lSystemStubs -lm >&5 +ld: library 'SystemStubs' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:6526: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| /* 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. */ +| char printf$LDBLStub (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return printf$LDBLStub (); +| ; +| return 0; +| } +configure:6537: result: no +configure:6601: checking for ranlib +configure:6622: found /usr/bin/ranlib +configure:6633: result: ranlib +configure:6726: checking whether ln -s works +configure:6730: result: yes +configure:6752: checking for a BSD-compatible install +configure:6825: result: /opt/homebrew/bin/ginstall -c +configure:6842: End of primary configuration. + +configure:6850: Looking for libraries etc. for utilities and test suite... +configure:6858: checking for errno.h +configure:6858: gcc -c -g -O2 conftest.c >&5 +configure:6858: $? = 0 +configure:6858: result: yes +configure:6858: checking for time.h +configure:6858: gcc -c -g -O2 conftest.c >&5 +configure:6858: $? = 0 +configure:6858: result: yes +configure:6875: checking for sys/stat.h +configure:6875: result: yes +configure:6875: checking for sys/types.h +configure:6875: result: yes +configure:6875: checking for unistd.h +configure:6875: result: yes +configure:6901: checking for _LARGEFILE_SOURCE value needed for large files +configure:6929: gcc -o conftest -g -O2 conftest.c -lm >&5 +configure:6929: $? = 0 +configure:6967: result: no +configure:6994: checking for special C compiler options needed for large files +configure:7050: result: no +configure:7056: checking for _FILE_OFFSET_BITS value needed for large files +configure:7090: gcc -c -g -O2 conftest.c >&5 +configure:7090: $? = 0 +configure:7132: result: no +configure:7230: checking for off_t +configure:7230: gcc -c -g -O2 conftest.c >&5 +configure:7230: $? = 0 +configure:7230: gcc -c -g -O2 conftest.c >&5 +conftest.c:77:20: error: expected expression +if (sizeof ((off_t))) + ^ +1 error generated. +configure:7230: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include +| #ifdef HAVE_STDIO_H +| # include +| #endif +| #ifdef HAVE_STDLIB_H +| # include +| #endif +| #ifdef HAVE_STRING_H +| # include +| #endif +| #ifdef HAVE_INTTYPES_H +| # include +| #endif +| #ifdef HAVE_STDINT_H +| # include +| #endif +| #ifdef HAVE_STRINGS_H +| # include +| #endif +| #ifdef HAVE_SYS_TYPES_H +| # include +| #endif +| #ifdef HAVE_SYS_STAT_H +| # include +| #endif +| #ifdef HAVE_UNISTD_H +| # include +| #endif +| int +| main (void) +| { +| if (sizeof ((off_t))) +| return 0; +| ; +| return 0; +| } +configure:7230: result: yes +configure:7340: checking for /usr/local/cfitsio/lib +configure:7355: result: no +configure:7340: checking for /local/cfitsio/lib +configure:7355: result: no +configure:7340: checking for /usr/local/pgplot/lib +configure:7355: result: no +configure:7340: checking for /local/pgplot/lib +configure:7355: result: no +configure:7340: checking for /usr/local/lib +configure:7355: result: yes +configure:7340: checking for /local/lib +configure:7355: result: no +configure:7340: checking for /opt/local/lib +configure:7355: result: no +configure:7340: checking for /opt/SUNWspro/lib +configure:7355: result: no +configure:7340: checking for /sw/lib +configure:7355: result: no +configure:7380: checking for /usr/local/cfitsio/include/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /usr/local/cfitsio/include/fitsio.h +configure:7418: result: no +configure:7380: checking for /local/cfitsio/include/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /local/cfitsio/include/fitsio.h +configure:7418: result: no +configure:7380: checking for /usr/local/include/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /usr/local/include/fitsio.h +configure:7418: result: no +configure:7380: checking for /local/include/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /local/include/fitsio.h +configure:7418: result: no +configure:7380: checking for /opt/local/include/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /opt/local/include/fitsio.h +configure:7418: result: no +configure:7380: checking for /sw/include/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /sw/include/fitsio.h +configure:7418: result: no +configure:7380: checking for /local/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /local/fitsio.h +configure:7418: result: no +configure:7380: checking for /usr/include/cfitsio/fitsio.h +configure:7395: result: no +configure:7403: checking for /usr/include/fitsio.h +configure:7418: result: no +configure:7427: checking for recv in -lsocket +configure:7458: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lsocket -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'socket' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:7458: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* 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. */ +| char recv (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return recv (); +| ; +| return 0; +| } +configure:7468: result: no +configure:7475: checking for ffopen in -lcfitsio +configure:7506: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lcfitsio -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'cfitsio' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:7506: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* 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. */ +| char ffopen (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return ffopen (); +| ; +| return 0; +| } +configure:7516: result: no +configure:7525: WARNING: CFITSIO not found, skipping CFITSIO-dependent tests. +configure:7603: checking for /usr/local/pgplot/include/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /usr/local/pgplot/include/cpgplot.h +configure:7641: result: no +configure:7603: checking for /local/pgplot/include/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /local/pgplot/include/cpgplot.h +configure:7641: result: no +configure:7603: checking for /usr/local/include/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /usr/local/include/cpgplot.h +configure:7641: result: no +configure:7603: checking for /local/include/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /local/include/cpgplot.h +configure:7641: result: no +configure:7603: checking for /opt/local/include/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /opt/local/include/cpgplot.h +configure:7641: result: no +configure:7603: checking for /sw/include/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /sw/include/cpgplot.h +configure:7641: result: no +configure:7603: checking for /local/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /local/cpgplot.h +configure:7641: result: no +configure:7603: checking for /usr/include/pgplot/cpgplot.h +configure:7618: result: no +configure:7626: checking for /usr/include/cpgplot.h +configure:7641: result: no +configure:7655: checking for iand_ in -lM77 +configure:7686: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lM77 -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'M77' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:7686: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* 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. */ +| char iand_ (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return iand_ (); +| ; +| return 0; +| } +configure:7696: result: no +configure:7703: checking for f77_init in -lF77 +configure:7734: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lF77 -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'F77' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:7734: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* 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. */ +| char f77_init (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return f77_init (); +| ; +| return 0; +| } +configure:7744: result: no +configure:7754: checking for main in -lfrtbegin +configure:7782: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lfrtbegin -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'frtbegin' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:7782: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| +| +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return main (); +| ; +| return 0; +| } +configure:7792: result: no +configure:7799: checking for gerror_ in -lg2c +configure:7830: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lg2c -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'g2c' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:7830: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* 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. */ +| char gerror_ (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return gerror_ (); +| ; +| return 0; +| } +configure:7840: result: no +configure:7907: checking for X +configure:7953: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lX11 -lm >&5 +conftest.c:46:10: fatal error: 'X11/Xlib.h' file not found +#include + ^~~~~~~~~~~~ +1 error generated. +configure:7953: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| XrmInitialize () +| ; +| return 0; +| } +configure:8055: gcc -E conftest.c +conftest.c:46:10: fatal error: 'X11/Xlib.h' file not found +#include + ^~~~~~~~~~~~ +1 error generated. +configure:8055: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include +configure:8095: gcc -o conftest -g -O2 -L/usr/local/lib conftest.c -lX11 -lm >&5 +conftest.c:46:10: fatal error: 'X11/Xlib.h' file not found +#include + ^~~~~~~~~~~~ +1 error generated. +configure:8095: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* end confdefs.h. */ +| #include +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| XrmInitialize () +| ; +| return 0; +| } +configure:8148: result: libraries /usr/X11/lib, headers /usr/X11/include +configure:8162: checking for deflate in -lz +configure:8193: gcc -o conftest -g -O2 -L/usr/local/lib -L/usr/X11/lib conftest.c -lz -lX11 -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +configure:8193: $? = 0 +configure:8203: result: yes +configure:8210: checking for png_error in -lpng +configure:8241: gcc -o conftest -g -O2 -L/usr/local/lib -L/usr/X11/lib conftest.c -lpng -lz -lX11 -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +configure:8241: $? = 0 +configure:8251: result: yes +configure:8258: checking for pgbeg_ in -lpgplot +configure:8289: gcc -o conftest -g -O2 -L/usr/local/lib -L/usr/X11/lib conftest.c -lpgplot -lpng -lz -lX11 -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'pgplot' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:8289: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* 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. */ +| char pgbeg_ (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return pgbeg_ (); +| ; +| return 0; +| } +configure:8299: result: no +configure:8306: checking for cpgbeg in -lcpgplot +configure:8337: gcc -o conftest -g -O2 -L/usr/local/lib -L/usr/X11/lib conftest.c -lcpgplot -lpng -lz -lX11 -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath -lm -lm >&5 +ld: warning: ignoring duplicate libraries: '-lm' +ld: library 'cpgplot' not found +clang: error: linker command failed with exit code 1 (use -v to see invocation) +configure:8337: $? = 1 +configure: failed program was: +| /* confdefs.h */ +| #define PACKAGE_NAME "WCSLIB" +| #define PACKAGE_TARNAME "wcslib-8.4" +| #define PACKAGE_VERSION "8.4" +| #define PACKAGE_STRING "WCSLIB 8.4" +| #define PACKAGE_BUGREPORT "mark@calabretta.id.au" +| #define PACKAGE_URL "" +| #define WCSLIB_VERSION 8.4 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STRINGS_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define STDC_HEADERS 1 +| #define HAVE_CTYPE_H 1 +| #define HAVE_INTTYPES_H 1 +| #define HAVE_LIMITS_H 1 +| #define HAVE_LOCALE_H 1 +| #define HAVE_MATH_H 1 +| #define HAVE_SETJMP_H 1 +| #define HAVE_STDARG_H 1 +| #define HAVE_STDDEF_H 1 +| #define HAVE_STDINT_H 1 +| #define HAVE_STDIO_H 1 +| #define HAVE_STDLIB_H 1 +| #define HAVE_STRING_H 1 +| #define HAVE_LIBM 1 +| #define SIZEOF_INT 4 +| #define SIZEOF_LONG_INT 8 +| #define SIZEOF_LONG_LONG_INT 8 +| #define WCSLIB_INT64 long long int +| #define MODZ "z" +| #define F77_FUNC(name,NAME) name ## _ +| #define F77_FUNC_(name,NAME) name ## _ +| #define HAVE_ERRNO_H 1 +| #define HAVE_TIME_H 1 +| #define HAVE_SYS_STAT_H 1 +| #define HAVE_SYS_TYPES_H 1 +| #define HAVE_UNISTD_H 1 +| #define HAVE_FSEEKO 1 +| /* 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. */ +| char cpgbeg (); +| #ifdef F77_DUMMY_MAIN +| +| # ifdef __cplusplus +| extern "C" +| # endif +| int F77_DUMMY_MAIN() { return 1; } +| +| #endif +| int +| main (void) +| { +| return cpgbeg (); +| ; +| return 0; +| } +configure:8347: result: no +configure:8365: WARNING: PGPLOT not found, skipping PGPLOT-dependent tests. +configure:8426: End of auxiliary configuration. + +configure:8439: Configuring files... +configure:8559: creating ./config.status + +## ---------------------- ## +## Running config.status. ## +## ---------------------- ## + +This file was extended by WCSLIB config.status 8.4, which was +generated by GNU Autoconf 2.71. Invocation command line was + + CONFIG_FILES = + CONFIG_HEADERS = + CONFIG_LINKS = + CONFIG_COMMANDS = + $ ./config.status + +on Severin.local + +config.status:871: creating makedefs +config.status:871: creating wcslib.pc +config.status:871: creating wcsconfig.h +config.status:871: creating wcsconfig_f77.h +config.status:871: creating wcsconfig_tests.h +config.status:871: creating wcsconfig_utils.h + +## ---------------- ## +## Cache variables. ## +## ---------------- ## + +ac_cv_build=arm-apple-darwin23.5.0 +ac_cv_c_compiler_gnu=yes +ac_cv_c_const=yes +ac_cv_c_uint16_t=yes +ac_cv_c_uint32_t=yes +ac_cv_env_CC_set= +ac_cv_env_CC_value= +ac_cv_env_CFLAGS_set= +ac_cv_env_CFLAGS_value= +ac_cv_env_CPPFLAGS_set= +ac_cv_env_CPPFLAGS_value= +ac_cv_env_CPP_set= +ac_cv_env_CPP_value= +ac_cv_env_F77_set= +ac_cv_env_F77_value= +ac_cv_env_FFLAGS_set= +ac_cv_env_FFLAGS_value= +ac_cv_env_LDFLAGS_set= +ac_cv_env_LDFLAGS_value= +ac_cv_env_LIBS_set= +ac_cv_env_LIBS_value= +ac_cv_env_XMKMF_set= +ac_cv_env_XMKMF_value= +ac_cv_env_build_alias_set= +ac_cv_env_build_alias_value= +ac_cv_env_host_alias_set= +ac_cv_env_host_alias_value= +ac_cv_env_target_alias_set= +ac_cv_env_target_alias_value= +ac_cv_f77_compiler_gnu=yes +ac_cv_f77_dummy_main=none +ac_cv_f77_libs=' -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14 -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/bin/../lib/gcc/current/gcc/aarch64-apple-darwin23/14/../../.. -lemutls_w -lheapt_w -lgfortran -lquadmath' +ac_cv_f77_mangling='lower case, underscore, no extra underscore' +ac_cv_file__local_cfitsio_fitsio_h=no +ac_cv_file__local_cfitsio_include_cfitsio_fitsio_h=no +ac_cv_file__local_cfitsio_include_fitsio_h=no +ac_cv_file__local_cfitsio_lib=no +ac_cv_file__local_cpgplot_h=no +ac_cv_file__local_fitsio_h=no +ac_cv_file__local_include_cfitsio_fitsio_h=no +ac_cv_file__local_include_cpgplot_h=no +ac_cv_file__local_include_fitsio_h=no +ac_cv_file__local_include_pgplot_cpgplot_h=no +ac_cv_file__local_lib=no +ac_cv_file__local_pgplot_cpgplot_h=no +ac_cv_file__local_pgplot_include_cpgplot_h=no +ac_cv_file__local_pgplot_include_pgplot_cpgplot_h=no +ac_cv_file__local_pgplot_lib=no +ac_cv_file__opt_SUNWspro_lib=no +ac_cv_file__opt_local_include_cfitsio_fitsio_h=no +ac_cv_file__opt_local_include_cpgplot_h=no +ac_cv_file__opt_local_include_fitsio_h=no +ac_cv_file__opt_local_include_pgplot_cpgplot_h=no +ac_cv_file__opt_local_lib=no +ac_cv_file__sw_include_cfitsio_fitsio_h=no +ac_cv_file__sw_include_cpgplot_h=no +ac_cv_file__sw_include_fitsio_h=no +ac_cv_file__sw_include_pgplot_cpgplot_h=no +ac_cv_file__sw_lib=no +ac_cv_file__usr_include_cfitsio_fitsio_h=no +ac_cv_file__usr_include_cpgplot_h=no +ac_cv_file__usr_include_fitsio_h=no +ac_cv_file__usr_include_pgplot_cpgplot_h=no +ac_cv_file__usr_local_cfitsio_include_cfitsio_fitsio_h=no +ac_cv_file__usr_local_cfitsio_include_fitsio_h=no +ac_cv_file__usr_local_cfitsio_lib=no +ac_cv_file__usr_local_include_cfitsio_fitsio_h=no +ac_cv_file__usr_local_include_cpgplot_h=no +ac_cv_file__usr_local_include_fitsio_h=no +ac_cv_file__usr_local_include_pgplot_cpgplot_h=no +ac_cv_file__usr_local_lib=yes +ac_cv_file__usr_local_pgplot_include_cpgplot_h=no +ac_cv_file__usr_local_pgplot_include_pgplot_cpgplot_h=no +ac_cv_file__usr_local_pgplot_lib=no +ac_cv_fortran_dummy_main=none +ac_cv_func_sincos=no +ac_cv_have_x='have_x=yes ac_x_includes='\''/usr/X11/include'\'' ac_x_libraries='\''/usr/X11/lib'\''' +ac_cv_header_ctype_h=yes +ac_cv_header_errno_h=yes +ac_cv_header_inttypes_h=yes +ac_cv_header_limits_h=yes +ac_cv_header_locale_h=yes +ac_cv_header_math_h=yes +ac_cv_header_setjmp_h=yes +ac_cv_header_stdarg_h=yes +ac_cv_header_stddef_h=yes +ac_cv_header_stdint_h=yes +ac_cv_header_stdio_h=yes +ac_cv_header_stdlib_h=yes +ac_cv_header_string_h=yes +ac_cv_header_strings_h=yes +ac_cv_header_sys_stat_h=yes +ac_cv_header_sys_types_h=yes +ac_cv_header_time_h=yes +ac_cv_header_unistd_h=yes +ac_cv_host=arm-apple-darwin23.5.0 +ac_cv_lib_F77_f77_init=no +ac_cv_lib_M77_iand_=no +ac_cv_lib_SystemStubs_printf_LDBLStub=no +ac_cv_lib_cfitsio_ffopen=no +ac_cv_lib_cpgplot_cpgbeg=no +ac_cv_lib_frtbegin_main=no +ac_cv_lib_g2c_gerror_=no +ac_cv_lib_m_floor=yes +ac_cv_lib_pgplot_pgbeg_=no +ac_cv_lib_png_png_error=yes +ac_cv_lib_socket_recv=no +ac_cv_lib_sunmath_cosd=no +ac_cv_lib_z_deflate=yes +ac_cv_objext=o +ac_cv_path_install='/opt/homebrew/bin/ginstall -c' +ac_cv_prog_CPP='gcc -E' +ac_cv_prog_FLEX=flex +ac_cv_prog_ac_ct_CC=gcc +ac_cv_prog_ac_ct_F77=gfortran +ac_cv_prog_ac_ct_RANLIB=ranlib +ac_cv_prog_cc_c11= +ac_cv_prog_cc_g=yes +ac_cv_prog_cc_stdc= +ac_cv_prog_f77_g=yes +ac_cv_prog_f77_v=-v +ac_cv_sizeof_int=4 +ac_cv_sizeof_long_int=8 +ac_cv_sizeof_long_long_int=8 +ac_cv_sys_file_offset_bits=no +ac_cv_sys_largefile_CC=no +ac_cv_sys_largefile_source=no +ac_cv_type_off_t=yes +ac_cv_type_size_t=yes + +## ----------------- ## +## Output variables. ## +## ----------------- ## + +ARCH='arm-darwin23.5.0' +ARFLAGS='' +BINDC='' +CC='gcc' +CFITSIOINC='' +CFITSIOLIB='' +CFLAGS='-g -O2' +CPP='gcc -E' +CPPFLAGS='' +DEFS='-DHAVE_CONFIG_H' +ECHO_C='\c' +ECHO_N='' +ECHO_T='' +EXEEXT='' +EXTRA_CLEAN='' +F77='gfortran' +FFLAGS='-g -O2 -I.' +FLAVOUR='' +FLEX='flex' +FLFLAGS='-D_POSIX_C_SOURCE=1' +FLIBS='-L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath' +GCC_VERSION='' +GETWCSTAB='' +INSTALL_DATA='${INSTALL} -m 644' +INSTALL_PROGRAM='${INSTALL}' +INSTALL_SCRIPT='${INSTALL}' +INSTDIR='Fortran utils' +LDFLAGS='-L/usr/local/lib -L/usr/X11/lib' +LIBOBJS='' +LIBS='-lm ' +LIBVER='8.4' +LN_S='ln -s' +LTLIBOBJS='' +MAKEFLAGS='' +MODE='' +OBJEXT='o' +OBSLAT='0.0' +OBSLNG='0.0' +OBSTZ='0.0' +PACKAGE_BUGREPORT='mark@calabretta.id.au' +PACKAGE_NAME='WCSLIB' +PACKAGE_STRING='WCSLIB 8.4' +PACKAGE_TARNAME='wcslib-8.4' +PACKAGE_URL='' +PACKAGE_VERSION='8.4' +PATH_SEPARATOR=':' +PGPLOTINC='' +PGPLOTLIB='' +RANLIB='ranlib' +SHELL='/bin/sh' +SHRFLAGS='-fPIC' +SHRLD='$(CC) $(SHRFLAGS) -dynamiclib -single_module -compatibility_version 8 -current_version 8.4 -install_name $(SONAME)' +SHRLIB='libwcs.8.4.dylib' +SHRLN='libwcs.dylib' +SHRSFX='' +SONAME='libwcs.8.dylib' +SUBDIRS='C Fortran utils' +TSTDIRS='C Fortran' +VALGRIND='' +XMKMF='' +ac_ct_CC='gcc' +ac_ct_F77='gfortran' +bindir='${exec_prefix}/bin' +build='arm-apple-darwin23.5.0' +build_alias='' +build_cpu='arm' +build_os='darwin23.5.0' +build_vendor='apple' +datadir='${datarootdir}' +datarootdir='${prefix}/share' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +dvidir='${docdir}' +exec_prefix='${prefix}' +host='arm-apple-darwin23.5.0' +host_alias='' +host_cpu='arm' +host_os='darwin23.5.0' +host_vendor='apple' +htmldir='${docdir}' +includedir='${prefix}/include' +infodir='${datarootdir}/info' +libdir='${exec_prefix}/lib' +libexecdir='${exec_prefix}/libexec' +localedir='${datarootdir}/locale' +localstatedir='${prefix}/var' +mandir='${datarootdir}/man' +oldincludedir='/usr/include' +pdfdir='${docdir}' +prefix='/usr/local' +program_transform_name='s,x,x,' +psdir='${docdir}' +runstatedir='${localstatedir}/run' +sbindir='${exec_prefix}/sbin' +sharedstatedir='${prefix}/com' +sysconfdir='${prefix}/etc' +target_alias='' + +## ----------- ## +## confdefs.h. ## +## ----------- ## + +/* confdefs.h */ +#define PACKAGE_NAME "WCSLIB" +#define PACKAGE_TARNAME "wcslib-8.4" +#define PACKAGE_VERSION "8.4" +#define PACKAGE_STRING "WCSLIB 8.4" +#define PACKAGE_BUGREPORT "mark@calabretta.id.au" +#define PACKAGE_URL "" +#define WCSLIB_VERSION 8.4 +#define HAVE_STDIO_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_UNISTD_H 1 +#define STDC_HEADERS 1 +#define HAVE_CTYPE_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_LOCALE_H 1 +#define HAVE_MATH_H 1 +#define HAVE_SETJMP_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRING_H 1 +#define HAVE_LIBM 1 +#define SIZEOF_INT 4 +#define SIZEOF_LONG_INT 8 +#define SIZEOF_LONG_LONG_INT 8 +#define WCSLIB_INT64 long long int +#define MODZ "z" +#define F77_FUNC(name,NAME) name ## _ +#define F77_FUNC_(name,NAME) name ## _ +#define HAVE_ERRNO_H 1 +#define HAVE_TIME_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_FSEEKO 1 + +configure: exit 0 diff --git a/deps/wcslib/config.status b/deps/wcslib/config.status new file mode 100755 index 0000000..4df79b6 --- /dev/null +++ b/deps/wcslib/config.status @@ -0,0 +1,1066 @@ +#! /bin/sh +# Generated by configure. +# 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-/bin/sh} +export SHELL +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: +if test ${ZSH_VERSION+y} && (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 $as_nop + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. +as_nl=' +' +export as_nl +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + +# The user is always right. +if ${PATH_SEPARATOR+false} :; 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 + + +# 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + + + +# 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 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + printf "%s\n" "$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_nop + 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_nop + 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 || +printf "%s\n" 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 + + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. +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 + +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + +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=`printf "%s\n" "$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 || +printf "%s\n" 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. ## +## ----------------------------------- ## +# 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 WCSLIB $as_me 8.4, which was +generated by GNU Autoconf 2.71. 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` +" + +# Files that config.status was made for. +config_files=" makedefs wcslib.pc" +config_headers=" wcsconfig.h wcsconfig_f77.h wcsconfig_tests.h wcsconfig_utils.h" + +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 + +Report bugs to ." + +ac_cs_config='' +ac_cs_version="\ +WCSLIB config.status 8.4 +configured by ./configure, generated by GNU Autoconf 2.71, + with options \"$ac_cs_config\" + +Copyright (C) 2021 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='/Users/severin/Documents/GitHub/astroimsum/deps/wcslib' +srcdir='.' +INSTALL='/opt/homebrew/bin/ginstall -c' +test -n "$AWK" || AWK=awk +# 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 ) + printf "%s\n" "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + printf "%s\n" "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`printf "%s\n" "$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=`printf "%s\n" "$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 ) + printf "%s\n" "$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 + +if $ac_cs_recheck; then + set X /bin/sh './configure' $ac_configure_extra_args --no-create --no-recursion + shift + \printf "%s\n" "running CONFIG_SHELL=/bin/sh $*" >&6 + CONFIG_SHELL='/bin/sh' + export CONFIG_SHELL + exec "$@" +fi + +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + printf "%s\n" "$ac_log" +} >&5 + + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "makedefs") CONFIG_FILES="$CONFIG_FILES makedefs" ;; + "wcslib.pc") CONFIG_FILES="$CONFIG_FILES wcslib.pc" ;; + "wcsconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig.h" ;; + "wcsconfig_f77.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_f77.h" ;; + "wcsconfig_tests.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_tests.h" ;; + "wcsconfig_utils.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_utils.h" ;; + + *) 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+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers +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` +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" && +cat >>"$ac_tmp/subs1.awk" <<\_ACAWK && +S["LTLIBOBJS"]="" +S["LIBOBJS"]="" +S["EXTRA_CLEAN"]="" +S["VALGRIND"]="" +S["MODE"]="" +S["FLAVOUR"]="" +S["OBSTZ"]="0.0" +S["OBSLAT"]="0.0" +S["OBSLNG"]="0.0" +S["INSTDIR"]="Fortran utils" +S["TSTDIRS"]="C Fortran" +S["SUBDIRS"]="C Fortran utils" +S["PGPLOTLIB"]="" +S["PGPLOTINC"]="" +S["XMKMF"]="" +S["GETWCSTAB"]="" +S["CFITSIOLIB"]="" +S["CFITSIOINC"]="" +S["MAKEFLAGS"]="" +S["INSTALL_DATA"]="${INSTALL} -m 644" +S["INSTALL_SCRIPT"]="${INSTALL}" +S["INSTALL_PROGRAM"]="${INSTALL}" +S["LN_S"]="ln -s" +S["SHRLN"]="libwcs.dylib" +S["SHRSFX"]="" +S["SHRLD"]="$(CC) $(SHRFLAGS) -dynamiclib -single_module -compatibility_version 8 -current_version 8.4 -install_name $(SONAME)" +S["SHRFLAGS"]="-fPIC" +S["SONAME"]="libwcs.8.dylib" +S["SHRLIB"]="libwcs.8.4.dylib" +S["RANLIB"]="ranlib" +S["ARFLAGS"]="" +S["BINDC"]="" +S["FLIBS"]="-L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/gcc/current/gcc -L/opt/homebrew/Cellar/gcc/14.2.0_1/lib/"\ +"gcc/current/gcc/aarch64-apple-darwin23/14 -lemutls_w -lheapt_w -lgfortran -lquadmath" +S["ac_ct_F77"]="gfortran" +S["FFLAGS"]="-g -O2 -I." +S["F77"]="gfortran" +S["FLFLAGS"]="-D_POSIX_C_SOURCE=1" +S["GCC_VERSION"]="" +S["CPP"]="gcc -E" +S["OBJEXT"]="o" +S["EXEEXT"]="" +S["ac_ct_CC"]="gcc" +S["CPPFLAGS"]="" +S["LDFLAGS"]="-L/usr/local/lib -L/usr/X11/lib" +S["CFLAGS"]="-g -O2" +S["CC"]="gcc" +S["FLEX"]="flex" +S["ARCH"]="arm-darwin23.5.0" +S["host_os"]="darwin23.5.0" +S["host_vendor"]="apple" +S["host_cpu"]="arm" +S["host"]="arm-apple-darwin23.5.0" +S["build_os"]="darwin23.5.0" +S["build_vendor"]="apple" +S["build_cpu"]="arm" +S["build"]="arm-apple-darwin23.5.0" +S["LIBVER"]="8.4" +S["target_alias"]="" +S["host_alias"]="" +S["build_alias"]="" +S["LIBS"]="-lm " +S["ECHO_T"]="" +S["ECHO_N"]="" +S["ECHO_C"]="\\c" +S["DEFS"]="-DHAVE_CONFIG_H" +S["mandir"]="${datarootdir}/man" +S["localedir"]="${datarootdir}/locale" +S["libdir"]="${exec_prefix}/lib" +S["psdir"]="${docdir}" +S["pdfdir"]="${docdir}" +S["dvidir"]="${docdir}" +S["htmldir"]="${docdir}" +S["infodir"]="${datarootdir}/info" +S["docdir"]="${datarootdir}/doc/${PACKAGE_TARNAME}" +S["oldincludedir"]="/usr/include" +S["includedir"]="${prefix}/include" +S["runstatedir"]="${localstatedir}/run" +S["localstatedir"]="${prefix}/var" +S["sharedstatedir"]="${prefix}/com" +S["sysconfdir"]="${prefix}/etc" +S["datadir"]="${datarootdir}" +S["datarootdir"]="${prefix}/share" +S["libexecdir"]="${exec_prefix}/libexec" +S["sbindir"]="${exec_prefix}/sbin" +S["bindir"]="${exec_prefix}/bin" +S["program_transform_name"]="s,x,x," +S["prefix"]="/usr/local" +S["exec_prefix"]="${prefix}" +S["PACKAGE_URL"]="" +S["PACKAGE_BUGREPORT"]="mark@calabretta.id.au" +S["PACKAGE_STRING"]="WCSLIB 8.4" +S["PACKAGE_VERSION"]="8.4" +S["PACKAGE_TARNAME"]="wcslib-8.4" +S["PACKAGE_NAME"]="WCSLIB" +S["PATH_SEPARATOR"]=":" +S["SHELL"]="/bin/sh" +_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 +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 +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 { +D["PACKAGE_NAME"]=" \"WCSLIB\"" +D["PACKAGE_TARNAME"]=" \"wcslib-8.4\"" +D["PACKAGE_VERSION"]=" \"8.4\"" +D["PACKAGE_STRING"]=" \"WCSLIB 8.4\"" +D["PACKAGE_BUGREPORT"]=" \"mark@calabretta.id.au\"" +D["PACKAGE_URL"]=" \"\"" +D["WCSLIB_VERSION"]=" 8.4" +D["HAVE_STDIO_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_STRINGS_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["STDC_HEADERS"]=" 1" +D["HAVE_CTYPE_H"]=" 1" +D["HAVE_INTTYPES_H"]=" 1" +D["HAVE_LIMITS_H"]=" 1" +D["HAVE_LOCALE_H"]=" 1" +D["HAVE_MATH_H"]=" 1" +D["HAVE_SETJMP_H"]=" 1" +D["HAVE_STDARG_H"]=" 1" +D["HAVE_STDDEF_H"]=" 1" +D["HAVE_STDINT_H"]=" 1" +D["HAVE_STDIO_H"]=" 1" +D["HAVE_STDLIB_H"]=" 1" +D["HAVE_STRING_H"]=" 1" +D["HAVE_LIBM"]=" 1" +D["SIZEOF_INT"]=" 4" +D["SIZEOF_LONG_INT"]=" 8" +D["SIZEOF_LONG_LONG_INT"]=" 8" +D["WCSLIB_INT64"]=" long long int" +D["MODZ"]=" \"z\"" +P["F77_FUNC"]="(name,NAME)" +D["F77_FUNC"]=" name ## _" +P["F77_FUNC_"]="(name,NAME)" +D["F77_FUNC_"]=" name ## _" +D["HAVE_ERRNO_H"]=" 1" +D["HAVE_TIME_H"]=" 1" +D["HAVE_SYS_STAT_H"]=" 1" +D["HAVE_SYS_TYPES_H"]=" 1" +D["HAVE_UNISTD_H"]=" 1" +D["HAVE_FSEEKO"]=" 1" + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+[_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ][_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]*([\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 + 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 " +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=`printf "%s\n" "$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 '` + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`printf "%s\n" "$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 || +printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`printf "%s\n" "$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 +# 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@*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + ac_datarootdir_hack=' + s&@datadir@&${datarootdir}&g + s&@docdir@&${datarootdir}/doc/${PACKAGE_TARNAME}&g + s&@infodir@&${datarootdir}/info&g + s&@localedir@&${datarootdir}/locale&g + s&@mandir@&${datarootdir}/man&g + s&\${datarootdir}&${prefix}/share&g' ;; +esac +ac_sed_extra="/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +} + +: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 +$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"; } && + { printf "%s\n" "$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 +printf "%s\n" "$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 + { + printf "%s\n" "/* $configure_input */" >&1 \ + && 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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$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 + printf "%s\n" "/* $configure_input */" >&1 \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + + esac + +done # for ac_tag + + +as_fn_exit 0 diff --git a/deps/wcslib/config/ax_pthread.m4 b/deps/wcslib/config/ax_pthread.m4 new file mode 100644 index 0000000..9f35d13 --- /dev/null +++ b/deps/wcslib/config/ax_pthread.m4 @@ -0,0 +1,522 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_pthread.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) +# +# DESCRIPTION +# +# This macro figures out how to build C programs using POSIX threads. It +# sets the PTHREAD_LIBS output variable to the threads library and linker +# flags, and the PTHREAD_CFLAGS output variable to any special C compiler +# flags that are needed. (The user can also force certain compiler +# flags/libs to be tested by setting these environment variables.) +# +# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is +# needed for multi-threaded programs (defaults to the value of CC +# respectively CXX otherwise). (This is necessary on e.g. AIX to use the +# special cc_r/CC_r compiler alias.) +# +# NOTE: You are assumed to not only compile your program with these flags, +# but also to link with them as well. For example, you might link with +# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS +# +# If you are only building threaded programs, you may wish to use these +# variables in your default LIBS, CFLAGS, and CC: +# +# LIBS="$PTHREAD_LIBS $LIBS" +# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" +# CC="$PTHREAD_CC" +# CXX="$PTHREAD_CXX" +# +# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant +# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to +# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). +# +# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the +# PTHREAD_PRIO_INHERIT symbol is defined when compiling with +# PTHREAD_CFLAGS. +# +# ACTION-IF-FOUND is a list of shell commands to run if a threads library +# 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_PTHREAD. +# +# Please let the authors know if this macro fails on any platform, or if +# you have any other suggestions or comments. This macro was based on work +# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help +# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by +# Alejandro Forero Cuervo to the autoconf macro repository. We are also +# grateful for the helpful feedback of numerous users. +# +# Updated for Autoconf 2.68 by Daniel Richard G. +# +# LICENSE +# +# Copyright (c) 2008 Steven G. Johnson +# Copyright (c) 2011 Daniel Richard G. +# Copyright (c) 2019 Marc Stevens +# +# 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 . +# +# 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 31 + +AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) +AC_DEFUN([AX_PTHREAD], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_CC]) +AC_REQUIRE([AC_PROG_SED]) +AC_LANG_PUSH([C]) +ax_pthread_ok=no + +# We used to check for pthread.h first, but this fails if pthread.h +# requires special compiler flags (e.g. on Tru64 or Sequent). +# It gets checked for in the link test anyway. + +# First of all, check if the user has set any of the PTHREAD_LIBS, +# etcetera environment variables, and if threads linking works using +# them: +if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then + ax_pthread_save_CC="$CC" + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) + AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"]) + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) + AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) + AC_MSG_RESULT([$ax_pthread_ok]) + if test "x$ax_pthread_ok" = "xno"; then + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" + fi + CC="$ax_pthread_save_CC" + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" +fi + +# We must check for the threads library under a number of different +# names; the ordering is very important because some systems +# (e.g. DEC) have both -lpthread and -lpthreads, where one of the +# libraries is broken (non-POSIX). + +# Create a list of thread flags to try. Items with a "," contain both +# C compiler flags (before ",") and linker flags (after ","). Other items +# starting with a "-" are C compiler flags, and remaining items are +# library names, except for "none" which indicates that we try without +# any flags at all, and "pthread-config" which is a program returning +# the flags for the Pth emulation library. + +ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +# The ordering *is* (sometimes) important. Some notes on the +# individual items follow: + +# pthreads: AIX (must check this before -lpthread) +# none: in case threads are in libc; should be tried before -Kthread and +# other compiler flags to prevent continual compiler warnings +# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) +# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 +# (Note: HP C rejects this with "bad form for `-t' option") +# -pthreads: Solaris/gcc (Note: HP C also rejects) +# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it +# doesn't hurt to check since this sometimes defines pthreads and +# -D_REENTRANT too), HP C (must be checked before -lpthread, which +# is present but should not be used directly; and before -mthreads, +# because the compiler interprets this as "-mt" + "-hreads") +# -mthreads: Mingw32/gcc, Lynx/gcc +# pthread: Linux, etcetera +# --thread-safe: KAI C++ +# pthread-config: use pthread-config program (for GNU Pth library) + +case $host_os in + + freebsd*) + + # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) + # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) + + ax_pthread_flags="-kthread lthread $ax_pthread_flags" + ;; + + hpux*) + + # From the cc(1) man page: "[-mt] Sets various -D flags to enable + # multi-threading and also sets -lpthread." + + ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" + ;; + + openedition*) + + # IBM z/OS requires a feature-test macro to be defined in order to + # enable POSIX threads at all, so give the user a hint if this is + # not set. (We don't define these ourselves, as they can affect + # other portions of the system API in unpredictable ways.) + + AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], + [ +# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) + AX_PTHREAD_ZOS_MISSING +# endif + ], + [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) + ;; + + solaris*) + + # On Solaris (at least, for some versions), libc contains stubbed + # (non-functional) versions of the pthreads routines, so link-based + # tests will erroneously succeed. (N.B.: The stubs are missing + # pthread_cleanup_push, or rather a function called by this macro, + # so we could check for that, but who knows whether they'll stub + # that too in a future libc.) So we'll check first for the + # standard Solaris way of linking pthreads (-mt -lpthread). + + ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" + ;; +esac + +# Are we compiling with Clang? + +AC_CACHE_CHECK([whether $CC is Clang], + [ax_cv_PTHREAD_CLANG], + [ax_cv_PTHREAD_CLANG=no + # Note that Autoconf sets GCC=yes for Clang as well as GCC + if test "x$GCC" = "xyes"; then + AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], + [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ +# if defined(__clang__) && defined(__llvm__) + AX_PTHREAD_CC_IS_CLANG +# endif + ], + [ax_cv_PTHREAD_CLANG=yes]) + fi + ]) +ax_pthread_clang="$ax_cv_PTHREAD_CLANG" + + +# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) + +# Note that for GCC and Clang -pthread generally implies -lpthread, +# except when -nostdlib is passed. +# This is problematic using libtool to build C++ shared libraries with pthread: +# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 +# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 +# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 +# To solve this, first try -pthread together with -lpthread for GCC + +AS_IF([test "x$GCC" = "xyes"], + [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"]) + +# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first + +AS_IF([test "x$ax_pthread_clang" = "xyes"], + [ax_pthread_flags="-pthread,-lpthread -pthread"]) + + +# The presence of a feature test macro requesting re-entrant function +# definitions is, on some systems, a strong hint that pthreads support is +# correctly enabled + +case $host_os in + darwin* | hpux* | linux* | osf* | solaris*) + ax_pthread_check_macro="_REENTRANT" + ;; + + aix*) + ax_pthread_check_macro="_THREAD_SAFE" + ;; + + *) + ax_pthread_check_macro="--" + ;; +esac +AS_IF([test "x$ax_pthread_check_macro" = "x--"], + [ax_pthread_check_cond=0], + [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) + + +if test "x$ax_pthread_ok" = "xno"; then +for ax_pthread_try_flag in $ax_pthread_flags; do + + case $ax_pthread_try_flag in + none) + AC_MSG_CHECKING([whether pthreads work without any flags]) + ;; + + *,*) + PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` + PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` + AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"]) + ;; + + -*) + AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) + PTHREAD_CFLAGS="$ax_pthread_try_flag" + ;; + + pthread-config) + AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) + AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) + PTHREAD_CFLAGS="`pthread-config --cflags`" + PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" + ;; + + *) + AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) + PTHREAD_LIBS="-l$ax_pthread_try_flag" + ;; + esac + + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Check for various functions. We must include pthread.h, + # since some functions may be macros. (On the Sequent, we + # need a special flag -Kthread to make this header compile.) + # We check for pthread_join because it is in -lpthread on IRIX + # while pthread_create is in libc. We check for pthread_attr_init + # due to DEC craziness with -lpthreads. We check for + # pthread_cleanup_push because it is one of the few pthread + # functions on Solaris that doesn't have a non-functional libc stub. + # We try pthread_create on general principles. + + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include +# if $ax_pthread_check_cond +# error "$ax_pthread_check_macro must be defined" +# endif + static void *some_global = NULL; + static void routine(void *a) + { + /* To avoid any unused-parameter or + unused-but-set-parameter warning. */ + some_global = a; + } + static void *start_routine(void *a) { return a; }], + [pthread_t th; pthread_attr_t attr; + pthread_create(&th, 0, start_routine, 0); + pthread_join(th, 0); + pthread_attr_init(&attr); + pthread_cleanup_push(routine, 0); + pthread_cleanup_pop(0) /* ; */])], + [ax_pthread_ok=yes], + []) + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + AC_MSG_RESULT([$ax_pthread_ok]) + AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) + + PTHREAD_LIBS="" + PTHREAD_CFLAGS="" +done +fi + + +# Clang needs special handling, because older versions handle the -pthread +# option in a rather... idiosyncratic way + +if test "x$ax_pthread_clang" = "xyes"; then + + # Clang takes -pthread; it has never supported any other flag + + # (Note 1: This will need to be revisited if a system that Clang + # supports has POSIX threads in a separate library. This tends not + # to be the way of modern systems, but it's conceivable.) + + # (Note 2: On some systems, notably Darwin, -pthread is not needed + # to get POSIX threads support; the API is always present and + # active. We could reasonably leave PTHREAD_CFLAGS empty. But + # -pthread does define _REENTRANT, and while the Darwin headers + # ignore this macro, third-party headers might not.) + + # However, older versions of Clang make a point of warning the user + # that, in an invocation where only linking and no compilation is + # taking place, the -pthread option has no effect ("argument unused + # during compilation"). They expect -pthread to be passed in only + # when source code is being compiled. + # + # Problem is, this is at odds with the way Automake and most other + # C build frameworks function, which is that the same flags used in + # compilation (CFLAGS) are also used in linking. Many systems + # supported by AX_PTHREAD require exactly this for POSIX threads + # support, and in fact it is often not straightforward to specify a + # flag that is used only in the compilation phase and not in + # linking. Such a scenario is extremely rare in practice. + # + # Even though use of the -pthread flag in linking would only print + # a warning, this can be a nuisance for well-run software projects + # that build with -Werror. So if the active version of Clang has + # this misfeature, we search for an option to squash it. + + AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], + [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], + [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown + # Create an alternate version of $ac_link that compiles and + # links in two steps (.c -> .o, .o -> exe) instead of one + # (.c -> exe), because the warning occurs only in the second + # step + ax_pthread_save_ac_link="$ac_link" + ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' + ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"` + ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" + ax_pthread_save_CFLAGS="$CFLAGS" + for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do + AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) + CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" + ac_link="$ax_pthread_save_ac_link" + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], + [ac_link="$ax_pthread_2step_ac_link" + AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], + [break]) + ]) + done + ac_link="$ax_pthread_save_ac_link" + CFLAGS="$ax_pthread_save_CFLAGS" + AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) + ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" + ]) + + case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in + no | unknown) ;; + *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; + esac + +fi # $ax_pthread_clang = yes + + + +# Various other checks: +if test "x$ax_pthread_ok" = "xyes"; then + ax_pthread_save_CFLAGS="$CFLAGS" + ax_pthread_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $PTHREAD_CFLAGS" + LIBS="$PTHREAD_LIBS $LIBS" + + # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. + AC_CACHE_CHECK([for joinable pthread attribute], + [ax_cv_PTHREAD_JOINABLE_ATTR], + [ax_cv_PTHREAD_JOINABLE_ATTR=unknown + for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], + [int attr = $ax_pthread_attr; return attr /* ; */])], + [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], + []) + done + ]) + AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ + test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ + test "x$ax_pthread_joinable_attr_defined" != "xyes"], + [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], + [$ax_cv_PTHREAD_JOINABLE_ATTR], + [Define to necessary symbol if this constant + uses a non-standard name on your system.]) + ax_pthread_joinable_attr_defined=yes + ]) + + AC_CACHE_CHECK([whether more special flags are required for pthreads], + [ax_cv_PTHREAD_SPECIAL_FLAGS], + [ax_cv_PTHREAD_SPECIAL_FLAGS=no + case $host_os in + solaris*) + ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" + ;; + esac + ]) + AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ + test "x$ax_pthread_special_flags_added" != "xyes"], + [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" + ax_pthread_special_flags_added=yes]) + + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], + [[int i = PTHREAD_PRIO_INHERIT; + return i;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) + AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ + test "x$ax_pthread_prio_inherit_defined" != "xyes"], + [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) + ax_pthread_prio_inherit_defined=yes + ]) + + CFLAGS="$ax_pthread_save_CFLAGS" + LIBS="$ax_pthread_save_LIBS" + + # More AIX lossage: compile with *_r variant + if test "x$GCC" != "xyes"; then + case $host_os in + aix*) + AS_CASE(["x/$CC"], + [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], + [#handle absolute path differently from PATH based program lookup + AS_CASE(["x$CC"], + [x/*], + [ + AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"]) + AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])]) + ], + [ + AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC]) + AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])]) + ] + ) + ]) + ;; + esac + fi +fi + +test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" +test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" + +AC_SUBST([PTHREAD_LIBS]) +AC_SUBST([PTHREAD_CFLAGS]) +AC_SUBST([PTHREAD_CC]) +AC_SUBST([PTHREAD_CXX]) + +# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: +if test "x$ax_pthread_ok" = "xyes"; then + ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) + : +else + ax_pthread_ok=no + $2 +fi +AC_LANG_POP +])dnl AX_PTHREAD diff --git a/deps/wcslib/config/config.guess b/deps/wcslib/config/config.guess new file mode 100644 index 0000000..ba6af63 --- /dev/null +++ b/deps/wcslib/config/config.guess @@ -0,0 +1,1486 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2018 Free Software Foundation, Inc. + +timestamp='2018-07-18' + +# 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 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 . +# +# 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 Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Options: + -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 ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2018 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 + +# 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. + +tmp= +# shellcheck disable=SC2172 +trap 'test -z "$tmp" || rm -fr "$tmp"' 1 2 13 15 +trap 'exitcode=$?; test -z "$tmp" || rm -fr "$tmp"; exit $exitcode' 0 + +set_cc_for_build() { + : "${TMPDIR=/tmp}" + # shellcheck disable=SC2039 + { 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" 2>/dev/null) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } + dummy=$tmp/dummy + case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in + ,,) echo "int x;" > "$dummy.c" + for driver in cc gcc c89 c99 ; do + if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then + CC_FOR_BUILD="$driver" + 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 +} + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@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_SYSTEM" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + set_cc_for_build + cat <<-EOF > "$dummy.c" + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi + ;; +esac + +# 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=`(uname -p 2>/dev/null || \ + "/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 ;; + earmv*) + arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` + machine="${arch}${endian}"-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) and ABI. + case "$UNAME_MACHINE_ARCH" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + 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 + # Determine ABI tags. + case "$UNAME_MACHINE_ARCH" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + ;; + 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/[-_].*//' | cut -d. -f1,2` + ;; + 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}${abi-}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" + exit ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" + exit ;; + *:ekkoBSD:*:*) + echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" + exit ;; + *:SolidBSD:*:*) + echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:MirBSD:*:*) + echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" + exit ;; + *:Sortix:*:*) + echo "$UNAME_MACHINE"-unknown-sortix + exit ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + 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 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo "$UNAME_MACHINE"-unknown-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-unknown-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@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.*:*) + UNAME_REL="`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + case `isainfo -b` in + 32) + echo i386-pc-solaris2"$UNAME_REL" + ;; + 64) + echo x86_64-pc-solaris2"$UNAME_REL" + ;; + esac + 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-unknown-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) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" +#ifdef __cplusplus +#include /* 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 + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + + 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/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + 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:4.4BSD:*) + 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 + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + + #define _HPUX_SOURCE + #include + #include + + 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 + 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:*:*) + set_cc_for_build + sed 's/^ //' << EOF > "$dummy.c" + #include + 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"-unknown-osf1mk + else + echo "$UNAME_MACHINE"-unknown-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-unknown-bsdi"$UNAME_RELEASE" + exit ;; + *:BSD/OS:*:*) + echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" + exit ;; + arm*:FreeBSD:*:*) + UNAME_PROCESSOR=`uname -p` + set_cc_for_build + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + else + echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + fi + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case "$UNAME_PROCESSOR" in + amd64) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + exit ;; + i*:CYGWIN*:*) + echo "$UNAME_MACHINE"-pc-cygwin + exit ;; + *:MINGW64*:*) + echo "$UNAME_MACHINE"-pc-mingw64 + exit ;; + *:MINGW*:*) + echo "$UNAME_MACHINE"-pc-mingw32 + exit ;; + *:MSYS*:*) + echo "$UNAME_MACHINE"-pc-msys + 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-unknown-interix"$UNAME_RELEASE" + exit ;; + IA64) + echo ia64-unknown-interix"$UNAME_RELEASE" + exit ;; + esac ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + exit ;; + *:GNU:*:*) + # the GNU system + echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" + exit ;; + *:Minix:*:*) + echo "$UNAME_MACHINE"-unknown-minix + exit ;; + aarch64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + 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=gnulibc1 ; fi + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + arm*:Linux:*:*) + set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi + else + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + cris:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + crisv32:Linux:*:*) + echo "$UNAME_MACHINE"-axis-linux-"$LIBC" + exit ;; + e2k:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + frv:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + hexagon:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + i*86:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + ia64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + k1om:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m32r*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + m68*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + 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-unknown-linux-$LIBC"; exit; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-"$LIBC" + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-"$LIBC" + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-"$LIBC" + 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-unknown-linux-"$LIBC" ;; + PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; + *) echo hppa-unknown-linux-"$LIBC" ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-"$LIBC" + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-"$LIBC" + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-"$LIBC" + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-"$LIBC" + exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" + exit ;; + sh64*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sh*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + tile*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + exit ;; + vax:Linux:*:*) + echo "$UNAME_MACHINE"-dec-linux-"$LIBC" + exit ;; + x86_64:Linux:*:*) + echo "$UNAME_MACHINE"-pc-linux-"$LIBC" + exit ;; + xtensa*:Linux:*:*) + echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" + 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"-unknown-stop + exit ;; + i*86:atheos:*:*) + echo "$UNAME_MACHINE"-unknown-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-unknown-lynxos"$UNAME_RELEASE" + exit ;; + i*86:*DOS:*:*) + echo "$UNAME_MACHINE"-pc-msdosdjgpp + exit ;; + i*86:*: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-unknown-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' /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 configure 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-unknown-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-unknown-lynxos"$UNAME_RELEASE" + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos"$UNAME_RELEASE" + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos"$UNAME_RELEASE" + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-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 + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo "$UNAME_MACHINE"-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@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-unknown-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 ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-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 ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-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 + set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then + 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 + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + 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 ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-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. + # shellcheck disable=SC2154 + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo "$UNAME_MACHINE"-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-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-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux"$UNAME_RELEASE" + exit ;; + *:DragonFly:*:*) + echo "$UNAME_MACHINE"-unknown-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"-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&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 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/deps/wcslib/config/config.sub b/deps/wcslib/config/config.sub new file mode 100644 index 0000000..52eb02e --- /dev/null +++ b/deps/wcslib/config/config.sub @@ -0,0 +1,1806 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright 1992-2018 Free Software Foundation, Inc. + +timestamp='2018-07-25' + +# 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 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 . +# +# 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 Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# 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: +# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# 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 or ALIAS + +Canonicalize a configuration name. + +Options: + -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 ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2018 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 + +# Split fields of configuration type +IFS="-" read -r field1 field2 field3 field4 <&2 + exit 1 + ;; + *-*-*-*) + basic_machine=$field1-$field2 + os=$field3-$field4 + ;; + *-*-*) + # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two + # parts + maybe_os=$field2-$field3 + case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ + | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ + | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ + | storm-chaos* | os2-emx* | rtmk-nova*) + basic_machine=$field1 + os=$maybe_os + ;; + android-linux) + basic_machine=$field1-unknown + os=linux-android + ;; + *) + basic_machine=$field1-$field2 + os=$field3 + ;; + esac + ;; + *-*) + # Second component is usually, but not always the OS + case $field2 in + # Prevent following clause from handling this valid os + sun*os*) + basic_machine=$field1 + os=$field2 + ;; + # Manufacturers + 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* \ + | sim | cisco | oki | wec | wrs | winbond) + basic_machine=$field1-$field2 + os= + ;; + *) + basic_machine=$field1 + os=$field2 + ;; + esac + ;; + *) + # Convert single-component short-hands not valid as part of + # multi-component configurations. + case $field1 in + 386bsd) + basic_machine=i386-pc + os=bsd + ;; + a29khif) + basic_machine=a29k-amd + os=udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=scout + ;; + am29k) + basic_machine=a29k-none + os=bsd + ;; + amdahl) + basic_machine=580-amdahl + os=sysv + ;; + 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 + ;; + cegcc) + basic_machine=arm-unknown + os=cegcc + ;; + cray) + basic_machine=j90-cray + os=unicos + ;; + craynv) + basic_machine=craynv-cray + os=unicosmp + ;; + delta88) + basic_machine=m88k-motorola + os=sysv3 + ;; + dicos) + basic_machine=i686-pc + os=dicos + ;; + djgpp) + basic_machine=i586-pc + os=msdosdjgpp + ;; + ebmon29k) + basic_machine=a29k-amd + os=ebmon + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=ose + ;; + gmicro) + basic_machine=tron-gmicro + os=sysv + ;; + go32) + basic_machine=i386-pc + os=go32 + ;; + 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 + ;; + hp300bsd) + basic_machine=m68k-hp + os=bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=hpux + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=proelf + ;; + i386mach) + basic_machine=i386-mach + os=mach + ;; + vsta) + basic_machine=i386-pc + os=vsta + ;; + isi68 | isi) + basic_machine=m68k-isi + os=sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=linux + ;; + magnum | m3230) + basic_machine=mips-mips + os=sysv + ;; + merlin) + basic_machine=ns32k-utek + os=sysv + ;; + mingw64) + basic_machine=x86_64-pc + os=mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=mingw32ce + ;; + monitor) + basic_machine=m68k-rom68k + os=coff + ;; + morphos) + basic_machine=powerpc-unknown + os=morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=moxiebox + ;; + msdos) + basic_machine=i386-pc + os=msdos + ;; + msys) + basic_machine=i686-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-pc + 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 + ;; + necv70) + basic_machine=v70-nec + os=sysv + ;; + 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 + ;; + os400) + basic_machine=powerpc-ibm + os=os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=ose + ;; + os68k) + basic_machine=m68k-none + os=os68k + ;; + paragon) + basic_machine=i860-intel + os=osf + ;; + parisc) + basic_machine=hppa-unknown + os=linux + ;; + pw32) + basic_machine=i586-unknown + os=pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=rdos + ;; + rdos32) + basic_machine=i386-pc + os=rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=coff + ;; + sa29200) + basic_machine=a29k-amd + os=udi + ;; + sei) + basic_machine=mips-sei + os=seiux + ;; + sps7) + basic_machine=m68k-bull + os=sysv2 + ;; + stratus) + basic_machine=i860-stratus + os=sysv4 + ;; + 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 + ;; + 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 + ;; + toad1) + basic_machine=pdp10-xkl + os=tops20 + ;; + 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 + ;; + vxworks960) + basic_machine=i960-wrs + os=vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=vxworks + ;; + xbox) + basic_machine=i686-pc + os=mingw32 + ;; + ymp) + basic_machine=ymp-cray + os=unicos + ;; + *) + basic_machine=$1 + os= + ;; + esac + ;; +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 | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv6m | armv[78][arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper | csky \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia16 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | 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 \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nfp \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | pyramid \ + | riscv | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]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 \ + | visium \ + | wasm32 \ + | 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 + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=${os:-none} + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) + ;; + m9s12z | m68hcs12z | hcs12z | s12z) + basic_machine=s12z-unknown + os=${os:-none} + ;; + ms1) + basic_machine=mt-unknown + ;; + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=${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 + ;; + # 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-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | csky-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | 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-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | moxie-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nfp-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ + | pyramid-* \ + | riscv-* | riscv32-* | riscv64-* \ + | 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-* \ + | visium-* \ + | wasm32-* \ + | 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. + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + abacus) + basic_machine=abacus-unknown + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + 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=${os:-unicos} + ;; + 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 + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=${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=${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 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=${os:-bosx} + ;; + dpx2*) + basic_machine=m68k-bull + os=sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + elxsi) + basic_machine=elxsi-elxsi + os=${os:-bsd} + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=hiuxwe2 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + 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 + ;; + 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 + ;; + j90 | j90-cray) + basic_machine=j90-cray + os=${os:-unicos} + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + irix*) + ;; + *) + os=irix4 + ;; + esac + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` + ;; + m68knommu-*) + basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` + os=linux + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + 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 + ;; + ms1-*) + basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=newsos + ;; + next | m*-next) + basic_machine=m68k-next + case $os in + nextstep* ) + ;; + ns2*) + os=nextstep2 + ;; + *) + os=nextstep3 + ;; + esac + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=hiuxwe2 + ;; + 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) + 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) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + 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 + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=${os:-elf} + ;; + sequent) + basic_machine=i386-sequent + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + simso-wrs) + basic_machine=sparclite-wrs + os=vxworks + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + tile*) + basic_machine=$basic_machine-unknown + os=linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + w65*) + basic_machine=w65-wdc + os=none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=proelf + ;; + x64) + basic_machine=x86_64-pc + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` + ;; + none) + basic_machine=none-none + os=${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 + ;; + 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 + ;; + 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 + ;; + *) + 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 + ;; + bluegene*) + os=cnk + ;; + solaris1 | solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + solaris) + os=solaris2 + ;; + unixware*) + os=sysv4.2uw + ;; + gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # es1800 is here to avoid being matched by es* (a different OS) + es1800*) + os=ose + ;; + # Some version numbers need modification + chorusos*) + os=chorusos + ;; + isc) + os=isc2.2 + ;; + sco6) + os=sco5v6 + ;; + sco5) + os=sco3.2v5 + ;; + sco4) + os=sco3.2v4 + ;; + sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + ;; + sco3.2v[4-9]* | sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + ;; + scout) + # Don't match below + ;; + sco*) + os=sco3.2v2 + ;; + psos*) + os=psos + ;; + # Now 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* | esix* | aix* | cnk* | sunos | sunos[34]*\ + | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ + | sym* | kopensolaris* | plan9* \ + | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ + | aos* | aros* | cloudabi* | sortix* \ + | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ + | clix* | riscos* | uniplus* | iris* | rtu* | xenix* \ + | knetbsd* | mirbsd* | netbsd* \ + | bitrig* | openbsd* | solidbsd* | libertybsd* \ + | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \ + | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ + | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \ + | chorusrdb* | cegcc* | glidix* \ + | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \ + | linux-newlib* | linux-musl* | linux-uclibc* \ + | uxpv* | beos* | mpeix* | udk* | moxiebox* \ + | interix* | uwin* | mks* | rhapsody* | darwin* \ + | openstep* | oskit* | conix* | pw32* | nonstopux* \ + | storm-chaos* | tops10* | tenex* | tops20* | its* \ + | os2* | vos* | palmos* | uclinux* | nucleus* \ + | morphos* | superux* | rtmk* | windiss* \ + | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ + | skyos* | haiku* | rdos* | toppers* | drops* | es* \ + | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ + | midnightbsd*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=nto-$os + ;; + esac + ;; + hiux*) + os=hiuxwe2 + ;; + nto-qnx*) + ;; + nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + sim | xray | os68k* | v88r* \ + | windows* | osx | abug | netware* | os9* \ + | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) + ;; + linux-dietlibc) + os=linux-dietlibc + ;; + linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + lynx*178) + os=lynxos178 + ;; + lynx*5) + os=lynxos5 + ;; + lynx*) + os=lynxos + ;; + mac*) + os=`echo "$os" | sed -e 's|mac|macos|'` + ;; + opened*) + os=openedition + ;; + os400*) + os=os400 + ;; + sunos5*) + os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + ;; + sunos6*) + os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + ;; + wince*) + os=wince + ;; + 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 + ;; + *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) + os=mint + ;; + zvmoe) + os=zvmoe + ;; + dicos*) + os=dicos + ;; + pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=eabi + ;; + *) + os=elf + ;; + esac + ;; + nacl*) + ;; + ios) + ;; + none) + ;; + *-eabi) + ;; + *) + 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 + ;; + c8051-*) + os=elf + ;; + clipper-intergraph) + os=clix + ;; + hexagon-*) + os=elf + ;; + 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 + ;; + pru-*) + os=elf + ;; + *-be) + os=beos + ;; + *-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 + ;; + *-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 + ;; + *-wrs) + os=vxworks + ;; + *) + 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 + ;; + clix*) + vendor=intergraph + ;; + 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 'before-save-hook 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/deps/wcslib/config/install-sh b/deps/wcslib/config/install-sh new file mode 100755 index 0000000..377bb86 --- /dev/null +++ b/deps/wcslib/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/deps/wcslib/configure b/deps/wcslib/configure new file mode 100755 index 0000000..594719c --- /dev/null +++ b/deps/wcslib/configure @@ -0,0 +1,9722 @@ +#! /bin/sh +# From configure.ac Revision: 8.4 . +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.71 for WCSLIB 8.4. +# +# Report bugs to . +# +# +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +as_nop=: +if test ${ZSH_VERSION+y} && (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 $as_nop + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. +as_nl=' +' +export as_nl +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + +# The user is always right. +if ${PATH_SEPARATOR+false} :; 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 + + +# 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + + +# 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'. +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +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="as_nop=: +if test \${ZSH_VERSION+y} && (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 \$as_nop + 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 \$as_nop + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || 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 \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null +then : + as_have_required=yes +else $as_nop + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : + +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$as_shell as_have_required=yes + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : + break 2 +fi +fi + done;; + esac + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi + + + 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'. +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." + else + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and +$0: mark@calabretta.id.au about your system, including any +$0: error possibly output before this message. Then install +$0: a modern shell, or manually run the script under such a +$0: shell if you do 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_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop + +# 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=`printf "%s\n" "$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 || +printf "%s\n" 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_nop + 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_nop + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop + +# 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 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + printf "%s\n" "$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 || +printf "%s\n" 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" || + { printf "%s\n" "$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 +} + + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. +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 + +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + +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'" + + +test -n "$DJDIR" || exec 7<&0 &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='WCSLIB' +PACKAGE_TARNAME='wcslib-8.4' +PACKAGE_VERSION='8.4' +PACKAGE_STRING='WCSLIB 8.4' +PACKAGE_BUGREPORT='mark@calabretta.id.au' +PACKAGE_URL='' + +ac_unique_file="C/wcs.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_STDIO_H +# include +#endif +#ifdef HAVE_STDLIB_H +# include +#endif +#ifdef HAVE_STRING_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_header_c_list= +ac_subst_vars='LTLIBOBJS +LIBOBJS +EXTRA_CLEAN +VALGRIND +MODE +FLAVOUR +OBSTZ +OBSLAT +OBSLNG +INSTDIR +TSTDIRS +SUBDIRS +PGPLOTLIB +PGPLOTINC +XMKMF +GETWCSTAB +CFITSIOLIB +CFITSIOINC +MAKEFLAGS +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +LN_S +SHRLN +SHRSFX +SHRLD +SHRFLAGS +SONAME +SHRLIB +RANLIB +ARFLAGS +BINDC +FLIBS +ac_ct_F77 +FFLAGS +F77 +FLFLAGS +GCC_VERSION +CPP +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +FLEX +ARCH +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBVER +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 +runstatedir +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_flex +enable_fortran +with_bindc +enable_shared +enable_largefile +with_cfitsio +with_cfitsiolib +with_cfitsioinc +with_pgplot +with_pgplotlib +with_pgplotinc +with_x +enable_utils +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +F77 +FFLAGS +XMKMF' + + +# 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' +runstatedir='${localstatedir}/run' +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 + + 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=`printf "%s\n" "$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=`printf "%s\n" "$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 ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -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=`printf "%s\n" "$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=`printf "%s\n" "$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. + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + printf "%s\n" "$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" ;; + *) printf "%s\n" "$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 runstatedir +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 || +printf "%s\n" 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 WCSLIB 8.4 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] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --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/wcslib-8.4] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +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 WCSLIB 8.4:";; + 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] + --disable-flex don't apply flex (use pre-generated sources) + --enable-fortran=ARG Fortran compiler to use + --disable-fortran don't build the Fortran wrappers or PGSBOX + --disable-shared don't build the WCS shared libraries + --disable-largefile omit support for large files + --disable-utils don't build the WCS utilities + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-bindc use Fortran 2003 BIND(C) wrappers - recommended for + Link Time Optimization (LTO) + --without-cfitsio eschew CFITSIO + --with-cfitsiolib=DIR directory containing cfitsio library + --with-cfitsioinc=DIR directory containing cfitsio header files + --without-pgplot eschew PGPLOT + --with-pgplotlib=DIR directory containing pgplot library + --with-pgplotinc=DIR directory containing pgplot header files + --with-x use the X Window System + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + F77 Fortran 77 compiler command + FFLAGS Fortran 77 compiler flags + XMKMF Path to xmkmf, Makefile generator for X Window System + +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 . +_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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. + 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 + printf "%s\n" "$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 +WCSLIB configure 8.4 +generated by GNU Autoconf 2.71 + +Copyright (C) 2021 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_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 conftest.beam + 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\"" +printf "%s\n" "$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 + printf "%s\n" "$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_nop + printf "%s\n" "$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_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\"" +printf "%s\n" "$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 + printf "%s\n" "$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_nop + printf "%s\n" "$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_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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +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 (void) +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# 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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_find_uintX_t LINENO BITS VAR +# ------------------------------------ +# Finds an unsigned integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_uintX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +printf %s "checking for uint$2_t... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ +static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + case $ac_type in #( + uint$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + if eval test \"x\$"$3"\" = x"no" +then : + +else $as_nop + break +fi + done +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_find_uintX_t + +# 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.beam 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\"" +printf "%s\n" "$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 + printf "%s\n" "$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_nop + printf "%s\n" "$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_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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. */ + +#include +#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 (void) +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to run 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\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$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\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$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_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 (void) +{ +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 (void) +{ +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_nop + 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.beam conftest.$ac_ext + done +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main (void) +{ +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 (void) +{ +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_nop + 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.beam conftest.$ac_ext + done +else $as_nop + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam 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 (void) +{ +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_nop + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam 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 (void) { return $2; } +static unsigned long int ulongval (void) { return $2; } +#include +#include +int +main (void) +{ + + 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 &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 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_f77_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$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_f77_try_compile +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + +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 WCSLIB $as_me 8.4, which was +generated by GNU Autoconf 2.71. Invocation command line was + + $ $0$ac_configure_args_raw + +_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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "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=`printf "%s\n" "$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=$? + # Sanitize IFS. + IFS=" "" $as_nl" + # Save into config.log some information that might help in debugging. + { + echo + + printf "%s\n" "## ---------------- ## +## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$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 + + printf "%s\n" "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + printf "%s\n" "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + printf "%s\n" "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + printf "%s\n" "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + printf "%s\n" "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$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 + +printf "%s\n" "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h + +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + ac_site_files="$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" +else + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" +fi + +for ac_site_file in $ac_site_files +do + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*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 do not provoke an error unfortunately, instead are silently treated + as an "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 is necessary to write \x00 == 0 to get something + that is 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 **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __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 + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "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 bool +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 = 0; + float fnumber = 0; + + 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); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= 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[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}/config" + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$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. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +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,) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$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=`printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-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 + + + + + + +printf "%s\n" "#define WCSLIB_VERSION $PACKAGE_VERSION" >>confdefs.h + + +# Library version number, same as package version. +LIBVER="$PACKAGE_VERSION" + + + + + +# Get the system type. + + + + # 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 + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$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 + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$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 + + +ARCH="${host_cpu}-$host_os" + + + +# Look for Flex. +# Check whether --enable-flex was given. +if test ${enable_flex+y} +then : + enableval=$enable_flex; +fi + +if test "x$enable_flex" = xno ; then + FLEX= + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Generation of flex sources disabled by request, using + pre-generated sources." >&5 +printf "%s\n" "$as_me: WARNING: Generation of flex sources disabled by request, using + pre-generated sources." >&2;} + +else + # Extract the first word of "flex", so it can be a program name with args. +set dummy flex; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_FLEX+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$FLEX"; then + ac_cv_prog_FLEX="$FLEX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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_FLEX="flex" + printf "%s\n" "$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 +FLEX=$ac_cv_prog_FLEX +if test -n "$FLEX"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FLEX" >&5 +printf "%s\n" "$FLEX" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + if test "x$FLEX" = xflex ; then + # Version 2.6.0 or later is required. + V=`flex --version | awk '{print $2}'` + W=`echo $V | awk -F. '{if ((($1*100 + $2)*100 + $3) < 20600) print "no"}'` + if test "x$W" != x ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Flex version $V is too old, ignored." >&5 +printf "%s\n" "$as_me: WARNING: Flex version $V is too old, ignored." >&2;} + FLEX= + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using Flex version $V." >&5 +printf "%s\n" "$as_me: Using Flex version $V." >&6;} + fi + fi + + if test "x$FLEX" = x ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Flex version 2.6.0 or later does not appear to be + available, will use pre-generated sources." >&5 +printf "%s\n" "$as_me: WARNING: Flex version 2.6.0 or later does not appear to be + available, will use pre-generated sources." >&2;} + fi +fi + + +# Look for an ANSI C compiler. + + + + + + + + + +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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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}clang" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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="clang" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$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 + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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. +printf "%s\n" "$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 -version; 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\"" +printf "%s\n" "$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 + printf "%s\n" "$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 (void) +{ + + ; + 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. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$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\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + printf "%s\n" "$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+y} && 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 $as_nop + ac_file='' +fi +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "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\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$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_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$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 +int +main (void) +{ +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. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "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\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + printf "%s\n" "$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\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + printf "%s\n" "$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 + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + 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\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + printf "%s\n" "$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_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+y} +ac_save_CFLAGS=$CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +else $as_nop + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + 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.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; 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 +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +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 conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_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 conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +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 + +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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "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 test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" 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. + # 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. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # 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 +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # 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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$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. + # 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. */ +#include + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # 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 +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # 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_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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 + +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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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}clang" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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="clang" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$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 + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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. +printf "%s\n" "$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 -version; 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\"" +printf "%s\n" "$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 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+y} +ac_save_CFLAGS=$CFLAGS +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_g=yes +else $as_nop + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + 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.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; 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 +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c11_program +_ACEOF +for ac_arg in '' -std=gnu11 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c99_program +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= +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 conftest.beam + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_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 conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC +fi + +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi +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 + +if test "x$ac_cv_c_compiler_gnu" = xyes ; then + # Get gcc version number. + GCC_VERSION=`$CC -dumpfullversion` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using gcc version $GCC_VERSION" >&5 +printf "%s\n" "$as_me: Using gcc version $GCC_VERSION" >&6;} +else + GCC_VERSION= +fi + + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +printf %s "checking for an ANSI C-conforming const... " >&6; } +if test ${ac_cv_c_const+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + +#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}; + /* IBM 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; + } + { /* IBM 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 $as_nop + ac_cv_c_const=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +printf "%s\n" "$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then + +printf "%s\n" "#define const /**/" >>confdefs.h + +fi + +ac_header= ac_cache= +for ac_item in $ac_header_c_list +do + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi +done + + + + + + + + +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : + +printf "%s\n" "#define STDC_HEADERS 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 $as_nop + +printf "%s\n" "#define size_t unsigned int" >>confdefs.h + +fi + +if test "x$ac_cv_prog_cc_stdc" = xno -o \ + "x$ac_cv_c_const" = xno -o \ + "x$ac_cv_type_size_t" = xno; then + as_fn_error 1 " + ------------------------------------------------------- + An ANSI standard C library is required to build WCSLIB. + + ERROR: WCSLIB configuration failure. + -------------------------------------------------------" "$LINENO" 5 +fi + +# Data types used in wcs.c (results not currently used). +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( + *) + + +printf "%s\n" "#define uint16_t $ac_cv_c_uint16_t" >>confdefs.h +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) + +printf "%s\n" "#define _UINT32_T 1" >>confdefs.h + + +printf "%s\n" "#define uint32_t $ac_cv_c_uint32_t" >>confdefs.h +;; + esac + + +# Check for standard C header files required to compile the library. +headers= + for ac_header in ctype.h inttypes.h limits.h locale.h math.h setjmp.h stdarg.h stddef.h stdint.h stdio.h stdlib.h string.h +do : + as_ac_Header=`printf "%s\n" "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 `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else $as_nop + headers=no +fi + +done +if test "x$headers" = xno; then + as_fn_error 1 " + ------------------------------------------------------------------- + An ANSI standard C library is required to build WCSLIB. One of the + standard C header files it requires is missing or unusable. Please + refer to the above log. + + ERROR: WCSLIB configuration failure. + -------------------------------------------------------------------" "$LINENO" 5 +fi + +# Flex uses fileno() and other POSIX features whose prototypes are only +# available from glibc's stdio.h with an appropriate preprocessor macro +# definition. This cannot be set within the flex description file itself +# as stdio.h is included in the generated C code before any part of the +# description. See fileno(3) and feature_test_macros(7). +if test "x$ac_cv_c_compiler_gnu" = xyes ; then + FLFLAGS="$FLFLAGS -D_POSIX_C_SOURCE=1" +fi + + +# Check for libm. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for floor in -lm" >&5 +printf %s "checking for floor in -lm... " >&6; } +if test ${ac_cv_lib_m_floor+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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. */ +char floor (); +int +main (void) +{ +return floor (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_m_floor=yes +else $as_nop + ac_cv_lib_m_floor=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_floor" >&5 +printf "%s\n" "$ac_cv_lib_m_floor" >&6; } +if test "x$ac_cv_lib_m_floor" = xyes +then : + printf "%s\n" "#define HAVE_LIBM 1" >>confdefs.h + + LIBS="-lm $LIBS" + +fi + + +# System libraries that may be required by WCSLIB itself. +# SunOS, extra maths functions. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cosd in -lsunmath" >&5 +printf %s "checking for cosd in -lsunmath... " >&6; } +if test ${ac_cv_lib_sunmath_cosd+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsunmath $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. */ +char cosd (); +int +main (void) +{ +return cosd (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_sunmath_cosd=yes +else $as_nop + ac_cv_lib_sunmath_cosd=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sunmath_cosd" >&5 +printf "%s\n" "$ac_cv_lib_sunmath_cosd" >&6; } +if test "x$ac_cv_lib_sunmath_cosd" = xyes +then : + LIBS="-lsunmath $LIBS" +fi + + +# See if we can find sincos(). +ac_fn_c_check_func "$LINENO" "sincos" "ac_cv_func_sincos" +if test "x$ac_cv_func_sincos" = xyes +then : + printf "%s\n" "#define HAVE_SINCOS 1" >>confdefs.h + +fi + + +# Check the size and availability of integer data types. +# 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. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +printf %s "checking size of int... " >&6; } +if test ${ac_cv_sizeof_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default" +then : + +else $as_nop + if test "$ac_cv_type_int" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +printf "%s\n" "$ac_cv_sizeof_int" >&6; } + + + +printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h + + +# 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. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long int" >&5 +printf %s "checking size of long int... " >&6; } +if test ${ac_cv_sizeof_long_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long int))" "ac_cv_sizeof_long_int" "$ac_includes_default" +then : + +else $as_nop + if test "$ac_cv_type_long_int" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long int) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_int=0 + fi +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_int" >&5 +printf "%s\n" "$ac_cv_sizeof_long_int" >&6; } + + + +printf "%s\n" "#define SIZEOF_LONG_INT $ac_cv_sizeof_long_int" >>confdefs.h + + +# 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. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long int" >&5 +printf %s "checking size of long long int... " >&6; } +if test ${ac_cv_sizeof_long_long_int+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long int))" "ac_cv_sizeof_long_long_int" "$ac_includes_default" +then : + +else $as_nop + if test "$ac_cv_type_long_long_int" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long long int) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_long_int=0 + fi +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long_int" >&5 +printf "%s\n" "$ac_cv_sizeof_long_long_int" >&6; } + + + +printf "%s\n" "#define SIZEOF_LONG_LONG_INT $ac_cv_sizeof_long_long_int" >>confdefs.h + + + +# 64-bit integer data type; use long long int preferentially since that +# accords with "%lld" formatting used in fitshdr.l, e.g. +# int size_t long int long long int +# --- ------ -------- ------------- +# gcc x86: 32 32 32 64 +# gcc x86_64: 32 64 64 64 +if test "x$ac_cv_sizeof_long_long_int" = x8; then + +printf "%s\n" "#define WCSLIB_INT64 long long int" >>confdefs.h + +elif test "x$ac_cv_sizeof_long_int" = x8; then + +printf "%s\n" "#define WCSLIB_INT64 long int" >>confdefs.h + +elif test "x$ac_cv_sizeof_int" = x8; then + +printf "%s\n" "#define WCSLIB_INT64 int" >>confdefs.h + +fi + +# Does printf() have the z modifier for size_t type? Important for 64-bit. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for printf z format modifier for size_t type" >&5 +printf %s "checking for printf z format modifier for size_t type... " >&6; } +if test "$cross_compiling" = yes +then : + +printf "%s\n" "#define MODZ \"\"" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: assumed not" >&5 +printf "%s\n" "assumed not" >&6; } + +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main (void) +{ +char buf[64]; + if (sprintf(buf, "%zu", (size_t)1) != 1) + return 1; + else if (strcmp(buf, "1")) + return 2; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : + +printf "%s\n" "#define MODZ \"z\"" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + +printf "%s\n" "#define MODZ \"\"" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + + +# Starting values, may be augmented later. +SUBDIRS="C" +TSTDIRS="C" +INSTDIR="C" + + +# Ways of specifying the Fortran compiler, in order of precedence: +# configure --enable-fortran= +# F77= configure ...bash +# +# Ways of disabling Fortran: +# configure --disable-fortran +# configure --enable-fortran=no +# F77=no configure ...bash +# Check whether --enable-fortran was given. +if test ${enable_fortran+y} +then : + enableval=$enable_fortran; +fi + +# Check whether --enable-fortran was given. +if test ${enable_fortran+y} +then : + enableval=$enable_fortran; +fi + +if test "x$enable_fortran" != x -a "x$enable_fortran" != xyes ; then + F77="$enable_fortran" +fi + +if test "x$F77" = xno ; then + F77= + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Compilation of Fortran wrappers and PGSBOX disabled." >&5 +printf "%s\n" "$as_me: WARNING: Compilation of Fortran wrappers and PGSBOX disabled." >&2;} + +else + if test "x$F77" = x ; then + # Look for a Fortran compiler. + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +if test -n "$ac_tool_prefix"; then + for ac_prog in gfortran g77 f77 ifort xlf frt pgf77 fl32 af77 fort77 f90 \ + xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 + 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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_F77+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$F77"; then + ac_cv_prog_F77="$F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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_F77="$ac_tool_prefix$ac_prog" + printf "%s\n" "$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 +F77=$ac_cv_prog_F77 +if test -n "$F77"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $F77" >&5 +printf "%s\n" "$F77" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$F77" && break + done +fi +if test -z "$F77"; then + ac_ct_F77=$F77 + for ac_prog in gfortran g77 f77 ifort xlf frt pgf77 fl32 af77 fort77 f90 \ + xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_F77+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_F77"; then + ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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_F77="$ac_prog" + printf "%s\n" "$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_F77=$ac_cv_prog_ac_ct_F77 +if test -n "$ac_ct_F77"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_F77" >&5 +printf "%s\n" "$ac_ct_F77" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + + test -n "$ac_ct_F77" && break +done + + if test "x$ac_ct_F77" = x; then + F77="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + F77=$ac_ct_F77 + fi +fi + + +# Provide some information about the compiler. +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 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\"" +printf "%s\n" "$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 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done +rm -f a.out + +# If we don't use `.F' as extension, the preprocessor is not run on the +# input file. (Note that this only needs to work for GNU compilers.) +ac_save_ext=$ac_ext +ac_ext=F +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran 77" >&5 +printf %s "checking whether the compiler supports GNU Fortran 77... " >&6; } +if test ${ac_cv_f77_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat > conftest.$ac_ext <<_ACEOF + program main +#ifndef __GNUC__ + choke me +#endif + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO" +then : + ac_compiler_gnu=yes +else $as_nop + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +ac_cv_f77_compiler_gnu=$ac_compiler_gnu + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_f77_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + +ac_ext=$ac_save_ext +ac_test_FFLAGS=${FFLAGS+y} +ac_save_FFLAGS=$FFLAGS +FFLAGS= +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -g" >&5 +printf %s "checking whether $F77 accepts -g... " >&6; } +if test ${ac_cv_prog_f77_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop + FFLAGS=-g +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO" +then : + ac_cv_prog_f77_g=yes +else $as_nop + ac_cv_prog_f77_g=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_g" >&5 +printf "%s\n" "$ac_cv_prog_f77_g" >&6; } +if test $ac_test_FFLAGS; then + FFLAGS=$ac_save_FFLAGS +elif test $ac_cv_prog_f77_g = yes; then + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-g -O2" + else + FFLAGS="-g" + fi +else + if test "x$ac_cv_f77_compiler_gnu" = xyes; then + FFLAGS="-O2" + else + FFLAGS= + fi +fi + +if test $ac_compiler_gnu = yes; then + G77=yes +else + G77= +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 + + fi + + if test "x$F77" = x; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: + ------------------------------------------------------------------ + Fortran compiler not found, will skip Fortran wrappers and PGSBOX. + ------------------------------------------------------------------" >&5 +printf "%s\n" "$as_me: WARNING: + ------------------------------------------------------------------ + Fortran compiler not found, will skip Fortran wrappers and PGSBOX. + ------------------------------------------------------------------" >&2;} + + # Best guess at Fortran name mangling for use if a compiler does ever + # become available. + printf "%s\n" "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h + + + else + if test "x$ac_cv_f77_compiler_gnu" = xyes ; then + if test "x$F77" = xg77 -o "x$F77" = xf77 ; then + # Not recognized by gfortran. + FFLAGS="$FFLAGS -Wno-globals" + fi + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $F77 accepts -I" >&5 +printf %s "checking whether $F77 accepts -I... " >&6; } + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + FFLAGS_save=$FFLAGS + FFLAGS=-I. + +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO" +then : + FFLAGS="$FFLAGS_save -I."; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else $as_nop + FFLAGS="$FFLAGS_save"; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam 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 + + + # Libraries required by the Fortran compiler itself (sets FLIBS). + # Required by utilities and test programs written in C that link to + # Fortran object modules such as pgsbox. + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $F77" >&5 +printf %s "checking how to get verbose linking output from $F77... " >&6; } +if test ${ac_cv_prog_f77_v+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO" +then : + ac_cv_prog_f77_v= +# Try some options frequently used verbose output +for ac_verb in -v -verbose --verbose -V -\#\#\#; do + cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FFLAGS=$FFLAGS +FFLAGS="$FFLAGS $ac_verb" +eval "set x $ac_link" +shift +printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | + sed '/^Driving:/d; /^Configured with:/d; + '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` +printf "%s\n" "$ac_f77_v_output" >&5 +FFLAGS=$ac_save_FFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_f77_v_output="`echo $ac_f77_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_f77_v_output in + # With xlf replace commas with spaces, + # and remove "-link" and closing parenthesis. + *xlfentry*) + ac_f77_v_output=`echo $ac_f77_v_output | + sed ' + s/,/ /g + s/ -link / /g + s/) *$// + ' + ` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_f77_v_output=`echo $ac_f77_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. + *fort77*f2c*gcc*) + ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' + /:[ ]\+Running[ ]\{1,\}"gcc"/{ + /"-c"/d + /[.]c"*/d + s/^.*"gcc"/"gcc"/ + s/"//gp + }'` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; +esac + + + # look for -l* and *.a constructs in the output + for ac_arg in $ac_f77_v_output; do + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) + ac_cv_prog_f77_v=$ac_verb + break 2 ;; + esac + done +done +if test -z "$ac_cv_prog_f77_v"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $F77" >&5 +printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $F77" >&2;} +fi +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 +printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_f77_v" >&5 +printf "%s\n" "$ac_cv_prog_f77_v" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 libraries of $F77" >&5 +printf %s "checking for Fortran 77 libraries of $F77... " >&6; } +if test ${ac_cv_f77_libs+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test "x$FLIBS" != "x"; then + ac_cv_f77_libs="$FLIBS" # Let the user override the test. +else + +cat > conftest.$ac_ext <<_ACEOF + program main + + end +_ACEOF + +# Compile and link our simple test program by passing a flag (argument +# 1 to this macro) to the Fortran compiler in order to get +# "verbose" output that we can then parse for the Fortran linker +# flags. +ac_save_FFLAGS=$FFLAGS +FFLAGS="$FFLAGS $ac_cv_prog_f77_v" +eval "set x $ac_link" +shift +printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 +# gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, +# LIBRARY_PATH; skip all such settings. +ac_f77_v_output=`eval $ac_link 5>&1 2>&1 | + sed '/^Driving:/d; /^Configured with:/d; + '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` +printf "%s\n" "$ac_f77_v_output" >&5 +FFLAGS=$ac_save_FFLAGS + +rm -rf conftest* + +# On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where +# /foo, /bar, and /baz are search directories for the Fortran linker. +# Here, we change these into -L/foo -L/bar -L/baz (and put it first): +ac_f77_v_output="`echo $ac_f77_v_output | + grep 'LPATH is:' | + sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_f77_v_output" + +# FIXME: we keep getting bitten by quoted arguments; a more general fix +# that detects unbalanced quotes in FLIBS should be implemented +# and (ugh) tested at some point. +case $ac_f77_v_output in + # With xlf replace commas with spaces, + # and remove "-link" and closing parenthesis. + *xlfentry*) + ac_f77_v_output=`echo $ac_f77_v_output | + sed ' + s/,/ /g + s/ -link / /g + s/) *$// + ' + ` ;; + + # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted + # $LIBS confuse us, and the libraries appear later in the output anyway). + *mGLOB_options_string*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; + + # Portland Group compiler has singly- or doubly-quoted -cmdline argument + # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. + # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". + *-cmdline\ * | *-ignore\ * | *-def\ *) + ac_f77_v_output=`echo $ac_f77_v_output | sed "\ + s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g + s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g + s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; + + # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. + *fort77*f2c*gcc*) + ac_f77_v_output=`echo "$ac_f77_v_output" | sed -n ' + /:[ ]\+Running[ ]\{1,\}"gcc"/{ + /"-c"/d + /[.]c"*/d + s/^.*"gcc"/"gcc"/ + s/"//gp + }'` ;; + + # If we are using Cray Fortran then delete quotes. + *cft90*) + ac_f77_v_output=`echo $ac_f77_v_output | sed 's/"//g'` ;; +esac + + + +ac_cv_f77_libs= + +# Save positional arguments (if any) +ac_save_positional="$@" + +set X $ac_f77_v_output +while test $# != 1; do + shift + ac_arg=$1 + case $ac_arg in + [\\/]*.a | ?:[\\/]*.a) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue +then : + +else $as_nop + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi + ;; + -bI:*) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue +then : + +else $as_nop + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_arg; do + ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" + done +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi +fi + ;; + # Ignore these flags. + -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ + |-LANG:=* | -LIST:* | -LNO:* | -link) + ;; + -lkernel32) + # Ignore this library only on Windows-like systems. + case $host_os in + cygwin* | msys* ) ;; + *) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue +then : + +else $as_nop + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi + ;; + esac + ;; + -[LRuYz]) + # These flags, when seen by themselves, take an argument. + # We remove the space between option and argument and re-iterate + # unless we find an empty arg or a new option (starting with -) + case $2 in + "" | -*);; + *) + ac_arg="$ac_arg$2" + shift; shift + set X $ac_arg "$@" + ;; + esac + ;; + -YP,*) + for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_j" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue +then : + +else $as_nop + ac_arg="$ac_arg $ac_j" + ac_cv_f77_libs="$ac_cv_f77_libs $ac_j" +fi + done + ;; + -[lLR]*) + ac_exists=false + for ac_i in $ac_cv_f77_libs; do + if test x"$ac_arg" = x"$ac_i"; then + ac_exists=true + break + fi + done + + if test x"$ac_exists" = xtrue +then : + +else $as_nop + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" +fi + ;; + -zallextract*| -zdefaultextract) + ac_cv_f77_libs="$ac_cv_f77_libs $ac_arg" + ;; + -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. + # Ignore everything else. + esac +done +# restore positional arguments +set X $ac_save_positional; shift + +# We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, +# then we insist that the "run path" must be an absolute path (i.e. it +# must begin with a "/"). +case `(uname -sr) 2>/dev/null` in + "SunOS 5"*) + ac_ld_run_path=`printf "%s\n" "$ac_f77_v_output" | + sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` + test "x$ac_ld_run_path" != x && + if test "$ac_compiler_gnu" = yes; then + for ac_link_opt in $ac_ld_run_path; do + ac_cv_f77_libs="$ac_cv_f77_libs -Xlinker $ac_link_opt" + done +else + ac_cv_f77_libs="$ac_cv_f77_libs $ac_ld_run_path" +fi + ;; +esac +fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_libs" >&5 +printf "%s\n" "$ac_cv_f77_libs" >&6; } +FLIBS="$ac_cv_f77_libs" + + +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 + + + # Tidy up FLIBS. + dirs= + libs= + for flib in $FLIBS + do + case "$flib" in + -L*) + dir=`echo "$flib" | sed -e 's/-L//'` + dir=-L`cd "$dir" && pwd` + dirs="$dirs $dir" + ;; + *) + libs="$libs $flib" + ;; + esac + done + + dirs=`for dir in $dirs ; do echo "$dir" ; done | sort -u | xargs` + + FLIBS="$dirs$libs" + + # F77 name mangling (defines the F77_FUNC preprocessor macro). + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran 77 libraries" >&5 +printf %s "checking for dummy main to link with Fortran 77 libraries... " >&6; } +if test ${ac_cv_f77_dummy_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_f77_dm_save_LIBS=$LIBS + LIBS="$LIBS $FLIBS" + ac_fortran_dm_var=F77_DUMMY_MAIN + 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 + + # First, try linking without a dummy main: + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_fortran_dummy_main=none +else $as_nop + ac_cv_fortran_dummy_main=unknown +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + + if test $ac_cv_fortran_dummy_main = unknown; then + for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define $ac_fortran_dm_var $ac_func +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_fortran_dummy_main=$ac_func; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + done + fi + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + ac_cv_f77_dummy_main=$ac_cv_fortran_dummy_main + rm -rf conftest* + LIBS=$ac_f77_dm_save_LIBS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_dummy_main" >&5 +printf "%s\n" "$ac_cv_f77_dummy_main" >&6; } +F77_DUMMY_MAIN=$ac_cv_f77_dummy_main +if test "$F77_DUMMY_MAIN" != unknown +then : + if test $F77_DUMMY_MAIN != none; then + +printf "%s\n" "#define F77_DUMMY_MAIN $F77_DUMMY_MAIN" >>confdefs.h + + if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then + +printf "%s\n" "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h + + fi +fi +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "linking to Fortran libraries from C fails +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 + +ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran 77 name-mangling scheme" >&5 +printf %s "checking for Fortran 77 name-mangling scheme... " >&6; } +if test ${ac_cv_f77_mangling+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat > conftest.$ac_ext <<_ACEOF + subroutine foobar() + return + end + subroutine foo_bar() + return + end +_ACEOF +if ac_fn_f77_try_compile "$LINENO" +then : + mv conftest.$ac_objext cfortran_test.$ac_objext + + ac_save_LIBS=$LIBS + LIBS="cfortran_test.$ac_objext $LIBS $FLIBS" + + 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_success=no + for ac_foobar in foobar FOOBAR; do + for ac_underscore in "" "_"; do + ac_func="$ac_foobar$ac_underscore" + 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. */ +char $ac_func (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_success=yes; break 2 +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + done + done + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + if test "$ac_success" = "yes"; then + case $ac_foobar in + foobar) + ac_case=lower + ac_foo_bar=foo_bar + ;; + FOOBAR) + ac_case=upper + ac_foo_bar=FOO_BAR + ;; + 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 + ac_success_extra=no + for ac_extra in "" "_"; do + ac_func="$ac_foo_bar$ac_underscore$ac_extra" + 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. */ +char $ac_func (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_success_extra=yes; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + done + ac_ext=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu + + if test "$ac_success_extra" = "yes"; then + ac_cv_f77_mangling="$ac_case case" + if test -z "$ac_underscore"; then + ac_cv_f77_mangling="$ac_cv_f77_mangling, no underscore" + else + ac_cv_f77_mangling="$ac_cv_f77_mangling, underscore" + fi + if test -z "$ac_extra"; then + ac_cv_f77_mangling="$ac_cv_f77_mangling, no extra underscore" + else + ac_cv_f77_mangling="$ac_cv_f77_mangling, extra underscore" + fi + else + ac_cv_f77_mangling="unknown" + fi + else + ac_cv_f77_mangling="unknown" + fi + + LIBS=$ac_save_LIBS + rm -rf conftest* + rm -f cfortran_test* +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compile a simple Fortran program +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_f77_mangling" >&5 +printf "%s\n" "$ac_cv_f77_mangling" >&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=f +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_f77_compiler_gnu +case $ac_cv_f77_mangling in + "lower case, no underscore, no extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) name" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) name" >>confdefs.h + ;; + "lower case, no underscore, extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) name" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h + ;; + "lower case, underscore, no extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) name ## _" >>confdefs.h + ;; + "lower case, underscore, extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) name ## _" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) name ## __" >>confdefs.h + ;; + "upper case, no underscore, no extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) NAME" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) NAME" >>confdefs.h + ;; + "upper case, no underscore, extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) NAME" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h + ;; + "upper case, underscore, no extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) NAME ## _" >>confdefs.h + ;; + "upper case, underscore, extra underscore") + printf "%s\n" "#define F77_FUNC(name,NAME) NAME ## _" >>confdefs.h + + printf "%s\n" "#define F77_FUNC_(name,NAME) NAME ## __" >>confdefs.h + ;; + *) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 +printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} + ;; +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 "x$BINDC" = x ; then + +# Check whether --with-bindc was given. +if test ${with_bindc+y} +then : + withval=$with_bindc; +fi + + if test "x$with_bindc" = xyes ; then + BINDC=yes + fi + fi + + if test "x$BINDC" = xyes ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: using Fortran 2003 BIND(C) wrappers." >&5 +printf "%s\n" "$as_me: using Fortran 2003 BIND(C) wrappers." >&6;} + else + BINDC= + fi + + + SUBDIRS="C Fortran" + TSTDIRS="C Fortran" + INSTDIR="Fortran" + fi +fi + + +# System-dependent system libraries (for building the sharable library). +#----------------------------------------------------------------------- +# Darwin (contains stubs for long double). +as_ac_Lib=`printf "%s\n" "ac_cv_lib_SystemStubs_printf\\$LDBLStub" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for printf\$LDBLStub in -lSystemStubs" >&5 +printf %s "checking for printf\$LDBLStub in -lSystemStubs... " >&6; } +if eval test \${$as_ac_Lib+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lSystemStubs $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. */ +char printf\$LDBLStub (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return printf\$LDBLStub (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + eval "$as_ac_Lib=yes" +else $as_nop + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes" +then : + LIBS="$LIBS -lSystemStubs" +fi + + + +# Library and installation utilities. +#------------------------------------ +# Static library generation. +# Ensure "non-deterministic" archives are produced during the build process. +ar rU conftest.a > /dev/null 2>&1 && ARFLAGS="U" +rm -f conftest.a + +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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop + 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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" + printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$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 + + +# Shared library generation - gcc only. +# Ways of disabling shared libraries: +# configure --disable-shared +# configure --enable-shared=no +# Check whether --enable-shared was given. +if test ${enable_shared+y} +then : + enableval=$enable_shared; +fi + + +SHRLIB= +SONAME= +SHRFLAGS= +SHRLD= +SHRSFX= +SHRLN= + +if test "x$ac_cv_c_compiler_gnu" = xyes ; then + if test "x$enable_shared" = xno ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Generation of WCS shared libraries disabled." >&5 +printf "%s\n" "$as_me: WARNING: Generation of WCS shared libraries disabled." >&2;} + + else + SHVER=`echo "$LIBVER" | sed -e 's/\..*$//'` + + # Note that -fPIC is on by default for Macs, this just makes it obvious. + SHRFLAGS="-fPIC" + SHRLD="\$(CC) \$(SHRFLAGS)" + + case "$host_os" in + darwin*) + SHRLIB="libwcs.$LIBVER.dylib" + SONAME="libwcs.$SHVER.dylib" + SHRLD="$SHRLD -dynamiclib -single_module" + SHRLD="$SHRLD -compatibility_version $SHVER -current_version $LIBVER -install_name \$(SONAME)" + SHRLN="libwcs.dylib" + + case "$host_cpu" in + powerpc*) + # Switch off -fPIC (not applicable for PowerPC Macs). + CFLAGS="$CFLAGS -mdynamic-no-pic" + ;; + esac + ;; + *mingw*) + SHRLIB="libwcs.dll.$LIBVER" + SONAME="libwcs.dll.$SHVER" + SHRLD="$SHRLD -shared -Wl,-h\$(SONAME)" + SHRLN="libwcs.dll" + ;; + *) + # Covers Linux and Solaris at least. + SHRLIB="libwcs.so.$LIBVER" + SONAME="libwcs.so.$SHVER" + SHRLD="$SHRLD -shared -Wl,-h\$(SONAME)" + SHRLN="libwcs.so" + ;; + esac + fi +fi + + + + + + + + +# Installation utilities. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +printf %s "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +printf "%s\n" "no, using $LN_S" >&6; } +fi + + + # 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. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +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+y}; 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 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$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' + + +# Older versions of GNU make do not have the -O option, which only facilitates +# legibility of the output from parallel builds (make -j). +make --help | grep '\-O' >/dev/null 2>&1 && MAKEFLAGS="-Otarget" + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: End of primary configuration. +" >&5 +printf "%s\n" "$as_me: End of primary configuration. +" >&6;} + + +# The following are required to build utilities and test programs. +# ---------------------------------------------------------------- +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Looking for libraries etc. for utilities and test suite..." >&5 +printf "%s\n" "$as_me: Looking for libraries etc. for utilities and test suite..." >&6;} + +# Additional standard C header files required. +headers= + for ac_header in errno.h time.h +do : + as_ac_Header=`printf "%s\n" "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 `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else $as_nop + headers=no +fi + +done + +# Other header files required by *nix library functions. + for ac_header in sys/stat.h sys/types.h unistd.h +do : + as_ac_Header=`printf "%s\n" "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 `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else $as_nop + headers=no +fi + +done +if test "x$headers" = xno; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: + -------------------------------------------------------------------- + One or more of the header files required to compile the utilities + and/or test programs is missing. Continuing on a best-effort basis. + --------------------------------------------------------------------" >&5 +printf "%s\n" "$as_me: WARNING: + -------------------------------------------------------------------- + One or more of the header files required to compile the utilities + and/or test programs is missing. Continuing on a best-effort basis. + --------------------------------------------------------------------" >&2;} +fi + +# Large file support (only required by fitshdr utility). +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 +printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } +if test ${ac_cv_sys_largefile_source+y} +then : + printf %s "(cached) " >&6 +else $as_nop + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include /* for off_t */ + #include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_sys_largefile_source=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGEFILE_SOURCE 1 +#include /* for off_t */ + #include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +int (*fp) (FILE *, off_t, int) = fseeko; + return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_sys_largefile_source=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + ac_cv_sys_largefile_source=unknown + break +done +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 +printf "%s\n" "$ac_cv_sys_largefile_source" >&6; } +case $ac_cv_sys_largefile_source in #( + no | unknown) ;; + *) +printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h +;; +esac +rm -rf conftest* + +# We used to try defining _XOPEN_SOURCE=500 too, to work around a bug +# in glibc 2.1.3, but that breaks too many other things. +# If you want fseeko and ftello with glibc, upgrade to a fixed glibc. +if test $ac_cv_sys_largefile_source != unknown; then + +printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h + +fi + +# Check whether --enable-largefile was given. +if test ${enable_largefile+y} +then : + enableval=$enable_largefile; +fi + +if test "$enable_largefile" != no; then + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +printf %s "checking for special C compiler options needed for large files... " >&6; } +if test ${ac_cv_sys_largefile_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO" +then : + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test ${ac_cv_sys_file_offset_bits+y} +then : + printf %s "(cached) " >&6 +else $as_nop + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } +if test ${ac_cv_sys_large_files+y} +then : + printf %s "(cached) " >&6 +else $as_nop + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +printf "%s\n" "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h +;; +esac +rm -rf conftest* + fi +fi + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = xyes +then : + +else $as_nop + +printf "%s\n" "#define off_t long int" >>confdefs.h + +fi + + +# Extra places to look for third-party libraries and header files. +LIBDIRS= + + +# Check whether --with-cfitsio was given. +if test ${with_cfitsio+y} +then : + withval=$with_cfitsio; +fi + +if test "x$with_cfitsio" = xno ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: CFITSIO disabled." >&5 +printf "%s\n" "$as_me: WARNING: CFITSIO disabled." >&2;} +else + +# Check whether --with-cfitsiolib was given. +if test ${with_cfitsiolib+y} +then : + withval=$with_cfitsiolib; +fi + + if test "x$with_cfitsiolib" != x ; then + LIBDIRS="$LIBDIRS $with_cfitsiolib" + fi + + +# Check whether --with-cfitsioinc was given. +if test ${with_cfitsioinc+y} +then : + withval=$with_cfitsioinc; +fi + + if test "x$with_cfitsioinc" != x ; then + CFITSIO_INCDIRS="$with_cfitsioinc" + fi + + CFITSIO_INCDIRS="$CFITSIO_INCDIRS \ + /usr/local/cfitsio/include \ + /local/cfitsio/include" + + LIBDIRS="$LIBDIRS \ + /usr/local/cfitsio/lib \ + /local/cfitsio/lib" +fi + + +# Check whether --with-pgplot was given. +if test ${with_pgplot+y} +then : + withval=$with_pgplot; +fi + +if test "x$with_pgplot" = xno ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: PGPLOT disabled." >&5 +printf "%s\n" "$as_me: WARNING: PGPLOT disabled." >&2;} +else + +# Check whether --with-pgplotlib was given. +if test ${with_pgplotlib+y} +then : + withval=$with_pgplotlib; +fi + + if test "x$with_pgplotlib" != x ; then + LIBDIRS="$LIBDIRS $with_pgplotlib" + fi + + +# Check whether --with-pgplotinc was given. +if test ${with_pgplotinc+y} +then : + withval=$with_pgplotinc; +fi + + if test "x$with_pgplotinc" != x ; then + PGPLOT_INCDIRS="$with_pgplotinc" + fi + + PGPLOT_INCDIRS="$PGPLOT_INCDIRS \ + /usr/local/pgplot/include \ + /local/pgplot/include" + + LIBDIRS="$LIBDIRS \ + /usr/local/pgplot/lib \ + /local/pgplot/lib" +fi + + +if test "x$with_cfitsio" != xno -o \ + "x$with_pgplot" != xno ; then + LIBDIRS="$LIBDIRS \ + /usr/local/lib \ + /local/lib \ + /opt/local/lib \ + /opt/SUNWspro/lib \ + /sw/lib" + + for LIBDIR in $LIBDIRS ; do + as_ac_File=`printf "%s\n" "ac_cv_file_$LIBDIR" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LIBDIR" >&5 +printf %s "checking for $LIBDIR... " >&6; } +if eval test \${$as_ac_File+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "$LIBDIR"; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi +fi +eval ac_res=\$$as_ac_File + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes" +then : + LDFLAGS="$LDFLAGS -L$LIBDIR" +else $as_nop + continue +fi + + done + + # Generic include directories. + INCDIRS="/usr/local/include \ + /local/include \ + /opt/local/include \ + /sw/include \ + /local \ + /usr/include" + + + # CFITSIO. + if test "x$with_cfitsio" != xno ; then + # Search for CFITSIO. + for INCDIR in $CFITSIO_INCDIRS $INCDIRS ; do + as_ac_File=`printf "%s\n" "ac_cv_file_$INCDIR/cfitsio/fitsio.h" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $INCDIR/cfitsio/fitsio.h" >&5 +printf %s "checking for $INCDIR/cfitsio/fitsio.h... " >&6; } +if eval test \${$as_ac_File+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "$INCDIR/cfitsio/fitsio.h"; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi +fi +eval ac_res=\$$as_ac_File + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes" +then : + CFITSIOINC="-I$INCDIR/cfitsio"; break +fi + + as_ac_File=`printf "%s\n" "ac_cv_file_$INCDIR/fitsio.h" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $INCDIR/fitsio.h" >&5 +printf %s "checking for $INCDIR/fitsio.h... " >&6; } +if eval test \${$as_ac_File+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "$INCDIR/fitsio.h"; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi +fi +eval ac_res=\$$as_ac_File + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes" +then : + CFITSIOINC="-I$INCDIR"; break +fi + + done + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for recv in -lsocket" >&5 +printf %s "checking for recv in -lsocket... " >&6; } +if test ${ac_cv_lib_socket_recv+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS $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. */ +char recv (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return recv (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_socket_recv=yes +else $as_nop + ac_cv_lib_socket_recv=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_recv" >&5 +printf "%s\n" "$ac_cv_lib_socket_recv" >&6; } +if test "x$ac_cv_lib_socket_recv" = xyes +then : + CFITSIOLIB="-lsocket" +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ffopen in -lcfitsio" >&5 +printf %s "checking for ffopen in -lcfitsio... " >&6; } +if test ${ac_cv_lib_cfitsio_ffopen+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcfitsio $CFITSIOLIB $LIBS $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. */ +char ffopen (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return ffopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_cfitsio_ffopen=yes +else $as_nop + ac_cv_lib_cfitsio_ffopen=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cfitsio_ffopen" >&5 +printf "%s\n" "$ac_cv_lib_cfitsio_ffopen" >&6; } +if test "x$ac_cv_lib_cfitsio_ffopen" = xyes +then : + CFITSIOLIB="-lcfitsio $CFITSIOLIB" +fi + + + if test "x$CFITSIOINC" = x -o "x$CFITSIOLIB" = x; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: CFITSIO not found, skipping CFITSIO-dependent tests." >&5 +printf "%s\n" "$as_me: WARNING: CFITSIO not found, skipping CFITSIO-dependent tests." >&2;} + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: CFITSIO appears to be available." >&5 +printf "%s\n" "$as_me: CFITSIO appears to be available." >&6;} + +printf "%s\n" "#define HAVE_CFITSIO 1" >>confdefs.h + + + # Check for fits_read_wcstab, present in CFITSIO 3.004beta and later. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fits_read_wcstab in -lcfitsio" >&5 +printf %s "checking for fits_read_wcstab in -lcfitsio... " >&6; } +if test ${ac_cv_lib_cfitsio_fits_read_wcstab+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcfitsio $CFITSIOLIB $LIBS $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. */ +char fits_read_wcstab (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return fits_read_wcstab (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_cfitsio_fits_read_wcstab=yes +else $as_nop + ac_cv_lib_cfitsio_fits_read_wcstab=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cfitsio_fits_read_wcstab" >&5 +printf "%s\n" "$ac_cv_lib_cfitsio_fits_read_wcstab" >&6; } +if test "x$ac_cv_lib_cfitsio_fits_read_wcstab" = xyes +then : + GETWCSTAB= +else $as_nop + GETWCSTAB=getwcstab.o +fi + + if test "x$GETWCSTAB" != x ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: fits_read_wcstab not found in CFITSIO, will use + getwcstab.c to compile test programs." >&5 +printf "%s\n" "$as_me: WARNING: fits_read_wcstab not found in CFITSIO, will use + getwcstab.c to compile test programs." >&2;} + fi + fi + + + + + fi + + # PGPLOT. + if test "x$F77" != x -a "x$with_pgplot" != xno ; then + # Search for PGPLOT. + for INCDIR in $PGPLOT_INCDIRS $INCDIRS ; do + as_ac_File=`printf "%s\n" "ac_cv_file_$INCDIR/pgplot/cpgplot.h" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $INCDIR/pgplot/cpgplot.h" >&5 +printf %s "checking for $INCDIR/pgplot/cpgplot.h... " >&6; } +if eval test \${$as_ac_File+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "$INCDIR/pgplot/cpgplot.h"; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi +fi +eval ac_res=\$$as_ac_File + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes" +then : + PGPLOTINC="-I$INCDIR/pgplot"; break +fi + + as_ac_File=`printf "%s\n" "ac_cv_file_$INCDIR/cpgplot.h" | $as_tr_sh` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $INCDIR/cpgplot.h" >&5 +printf %s "checking for $INCDIR/cpgplot.h... " >&6; } +if eval test \${$as_ac_File+y} +then : + printf %s "(cached) " >&6 +else $as_nop + test "$cross_compiling" = yes && + as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5 +if test -r "$INCDIR/cpgplot.h"; then + eval "$as_ac_File=yes" +else + eval "$as_ac_File=no" +fi +fi +eval ac_res=\$$as_ac_File + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } +if eval test \"x\$"$as_ac_File"\" = x"yes" +then : + PGPLOTINC="-I$INCDIR"; break +fi + + done + + # FLIBS (found above via AC_F77_LIBRARY_LDFLAGS) only helps if PGPLOT was + # built using the same Fortran compiler that we are using here. + + # PGPLOT compiled by the SUN Fortran compiler but linked with something + # else. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iand_ in -lM77" >&5 +printf %s "checking for iand_ in -lM77... " >&6; } +if test ${ac_cv_lib_M77_iand_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lM77 $PGPLOTLIB $LIBS $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. */ +char iand_ (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return iand_ (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_M77_iand_=yes +else $as_nop + ac_cv_lib_M77_iand_=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_M77_iand_" >&5 +printf "%s\n" "$ac_cv_lib_M77_iand_" >&6; } +if test "x$ac_cv_lib_M77_iand_" = xyes +then : + PGPLOTLIB="-lM77 $PGPLOTLIB" +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for f77_init in -lF77" >&5 +printf %s "checking for f77_init in -lF77... " >&6; } +if test ${ac_cv_lib_F77_f77_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lF77 $PGPLOTLIB $LIBS $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. */ +char f77_init (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return f77_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_F77_f77_init=yes +else $as_nop + ac_cv_lib_F77_f77_init=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_F77_f77_init" >&5 +printf "%s\n" "$ac_cv_lib_F77_f77_init" >&6; } +if test "x$ac_cv_lib_F77_f77_init" = xyes +then : + PGPLOTLIB="-lF77 $PGPLOTLIB" +fi + + + if test "x$F77" != xg77; then + # For PGPLOT compiled with g77 but linked with something else. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lfrtbegin" >&5 +printf %s "checking for main in -lfrtbegin... " >&6; } +if test ${ac_cv_lib_frtbegin_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfrtbegin $PGPLOTLIB $LIBS $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_frtbegin_main=yes +else $as_nop + ac_cv_lib_frtbegin_main=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_frtbegin_main" >&5 +printf "%s\n" "$ac_cv_lib_frtbegin_main" >&6; } +if test "x$ac_cv_lib_frtbegin_main" = xyes +then : + PGPLOTLIB="-lfrtbegin $PGPLOTLIB" +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gerror_ in -lg2c" >&5 +printf %s "checking for gerror_ in -lg2c... " >&6; } +if test ${ac_cv_lib_g2c_gerror_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lg2c $PGPLOTLIB $LIBS $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. */ +char gerror_ (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return gerror_ (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_g2c_gerror_=yes +else $as_nop + ac_cv_lib_g2c_gerror_=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_g2c_gerror_" >&5 +printf "%s\n" "$ac_cv_lib_g2c_gerror_" >&6; } +if test "x$ac_cv_lib_g2c_gerror_" = xyes +then : + PGPLOTLIB="-lg2c $PGPLOTLIB" +fi + + fi + + if test "x$F77" != xgfortran; then + # For PGPLOT compiled with gfortran but linked with something else. + # Note that if gfortran itself is driving the linker it can be harmful + # to add -lgfortran to the link list without also adding -lgfortranbegin. + # Doing so stops gfortran from adding -lgfortranbegin which is needed to + # resolve "main". + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _gfortran_abort in -lgfortran" >&5 +printf %s "checking for _gfortran_abort in -lgfortran... " >&6; } +if test ${ac_cv_lib_gfortran__gfortran_abort+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgfortran $PGPLOTLIB $LIBS $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. */ +char _gfortran_abort (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return _gfortran_abort (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_gfortran__gfortran_abort=yes +else $as_nop + ac_cv_lib_gfortran__gfortran_abort=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gfortran__gfortran_abort" >&5 +printf "%s\n" "$ac_cv_lib_gfortran__gfortran_abort" >&6; } +if test "x$ac_cv_lib_gfortran__gfortran_abort" = xyes +then : + PGPLOTLIB="-lgfortran $PGPLOTLIB" +fi + + fi + + # Search for X11 includes and libraries. + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +printf %s "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test ${with_x+y} +then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if test ${ac_cv_have_x+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no +ac_x_libraries=no +# Do we need to do anything special at all? +ac_save_LIBS=$LIBS +LIBS="-lX11 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + # We can compile and link X programs with no special options. + ac_x_includes= + ac_x_libraries= +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS="$ac_save_LIBS" +# If that didn't work, only try xmkmf and file system searches +# for native compilation. +if test x"$ac_x_includes" = xno && test "$cross_compiling" = no +then : + rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + + # Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/opt/X11/include + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else $as_nop + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else $as_nop + LIBS=$ac_save_LIBS +for ac_dir in `printf "%s\n" "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +fi +# Record the results. +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) : + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no" ;; #( + *) : + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" ;; +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +printf "%s\n" "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +printf "%s\n" "libraries $x_libraries, headers $x_includes" >&6; } +fi + + if test "x$no_x" = x; then + if test "x$ac_x_libraries" != x ; then + # Not needed for systems that keep the X11 libraries in /usr/lib. + LDFLAGS="$LDFLAGS -L$ac_x_libraries" + fi + PGPLOTLIB="-lX11 $PGPLOTLIB" + fi + + # It is possible that other libraries may be required depending on what + # graphics drivers were installed with PGPLOT. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for deflate in -lz" >&5 +printf %s "checking for deflate in -lz... " >&6; } +if test ${ac_cv_lib_z_deflate+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $PGPLOTLIB $LIBS $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. */ +char deflate (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return deflate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_z_deflate=yes +else $as_nop + ac_cv_lib_z_deflate=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflate" >&5 +printf "%s\n" "$ac_cv_lib_z_deflate" >&6; } +if test "x$ac_cv_lib_z_deflate" = xyes +then : + PGPLOTLIB="-lz $PGPLOTLIB" +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for png_error in -lpng" >&5 +printf %s "checking for png_error in -lpng... " >&6; } +if test ${ac_cv_lib_png_png_error+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpng $PGPLOTLIB $LIBS $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. */ +char png_error (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return png_error (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_png_png_error=yes +else $as_nop + ac_cv_lib_png_png_error=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_png_error" >&5 +printf "%s\n" "$ac_cv_lib_png_png_error" >&6; } +if test "x$ac_cv_lib_png_png_error" = xyes +then : + PGPLOTLIB="-lpng $PGPLOTLIB" +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pgbeg_ in -lpgplot" >&5 +printf %s "checking for pgbeg_ in -lpgplot... " >&6; } +if test ${ac_cv_lib_pgplot_pgbeg_+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpgplot $PGPLOTLIB $FLIBS $LIBS $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. */ +char pgbeg_ (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return pgbeg_ (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_pgplot_pgbeg_=yes +else $as_nop + ac_cv_lib_pgplot_pgbeg_=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pgplot_pgbeg_" >&5 +printf "%s\n" "$ac_cv_lib_pgplot_pgbeg_" >&6; } +if test "x$ac_cv_lib_pgplot_pgbeg_" = xyes +then : + PGPLOTLIB="-lpgplot $PGPLOTLIB" +fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cpgbeg in -lcpgplot" >&5 +printf %s "checking for cpgbeg in -lcpgplot... " >&6; } +if test ${ac_cv_lib_cpgplot_cpgbeg+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcpgplot $PGPLOTLIB $FLIBS $LIBS $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. */ +char cpgbeg (); +#ifdef F77_DUMMY_MAIN + +# ifdef __cplusplus + extern "C" +# endif + int F77_DUMMY_MAIN() { return 1; } + +#endif +int +main (void) +{ +return cpgbeg (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_cpgplot_cpgbeg=yes +else $as_nop + ac_cv_lib_cpgplot_cpgbeg=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cpgplot_cpgbeg" >&5 +printf "%s\n" "$ac_cv_lib_cpgplot_cpgbeg" >&6; } +if test "x$ac_cv_lib_cpgplot_cpgbeg" = xyes +then : + PGPLOTLIB="-lcpgplot $PGPLOTLIB" +else $as_nop + PGPLOTLIB= +fi + + + # Only need the PGPLOT include file to build PGSBOX. + if test "x$PGPLOTINC" != x; then + SUBDIRS="$SUBDIRS pgsbox" + INSTDIR="pgsbox" + fi + + # Also need the PGPLOT library to build pgtest and cpgtest. + if test "x$PGPLOTLIB" = x; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: PGPLOT not found, skipping PGPLOT-dependent tests." >&5 +printf "%s\n" "$as_me: WARNING: PGPLOT not found, skipping PGPLOT-dependent tests." >&2;} + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: PGPLOT appears to be available." >&5 +printf "%s\n" "$as_me: PGPLOT appears to be available." >&6;} + + TSTDIRS="$TSTDIRS pgsbox" + fi + fi + + + +fi + + +# Utilities are compiled last since they need the libraries. +# Ways of disabling them: +# configure --disable-utils +# configure --enable-utils=no +# Check whether --enable-utils was given. +if test ${enable_utils+y} +then : + enableval=$enable_utils; +fi + +if test "x$enable_utils" = xno ; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Compilation of WCS utilities disabled." >&5 +printf "%s\n" "$as_me: WARNING: Compilation of WCS utilities disabled." >&2;} +else + SUBDIRS="$SUBDIRS utils" + INSTDIR="$INSTDIR utils" +fi + + + + + + +# Default observer coordinates for sundazel. +if test -f "$HOME/.sundazelrc"; then + . "$HOME/.sundazelrc" +fi + +if test "x$OBSLNG" = x; then + OBSLNG=0.0 + OBSLAT=0.0 + OBSTZ=0.0 +fi + + + + + + +# Tidy up incrementally defined variables. +FLFLAGS=`echo $FLFLAGS` +CPPFLAGS=`echo $CPPFLAGS` +CFLAGS=`echo $CFLAGS` +FFLAGS=`echo $FFLAGS` +LDFLAGS=`echo $LDFLAGS` + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: End of auxiliary configuration. +" >&5 +printf "%s\n" "$as_me: End of auxiliary configuration. +" >&6;} + +# Set from the environment for code development. + + + + + + +# Do it. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Configuring files..." >&5 +printf "%s\n" "$as_me: Configuring files..." >&6;} +ac_config_files="$ac_config_files makedefs wcslib.pc" + +ac_config_headers="$ac_config_headers wcsconfig.h wcsconfig_f77.h wcsconfig_tests.h wcsconfig_utils.h" + +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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$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+y} || &/ + 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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$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=`printf "%s\n" "$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 + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$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 +as_nop=: +if test ${ZSH_VERSION+y} && (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 $as_nop + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. +as_nl=' +' +export as_nl +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi + +# The user is always right. +if ${PATH_SEPARATOR+false} :; 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 + + +# 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 + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + 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 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + + + +# 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 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + printf "%s\n" "$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_nop + 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_nop + 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 || +printf "%s\n" 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 + + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. +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 + +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + +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=`printf "%s\n" "$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 || +printf "%s\n" 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 WCSLIB $as_me 8.4, which was +generated by GNU Autoconf 2.71. 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" + +_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 + +Report bugs to ." + +_ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config='$ac_cs_config_escaped' +ac_cs_version="\\ +WCSLIB config.status 8.4 +configured by $0, generated by GNU Autoconf 2.71, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2021 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' +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 ) + printf "%s\n" "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + printf "%s\n" "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`printf "%s\n" "$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=`printf "%s\n" "$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 ) + printf "%s\n" "$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 + \printf "%s\n" "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 + printf "%s\n" "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_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 + "makedefs") CONFIG_FILES="$CONFIG_FILES makedefs" ;; + "wcslib.pc") CONFIG_FILES="$CONFIG_FILES wcslib.pc" ;; + "wcsconfig.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig.h" ;; + "wcsconfig_f77.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_f77.h" ;; + "wcsconfig_tests.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_tests.h" ;; + "wcsconfig_utils.h") CONFIG_HEADERS="$CONFIG_HEADERS wcsconfig_utils.h" ;; + + *) 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+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers +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` +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 +' >$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 +' >$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 " +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=`printf "%s\n" "$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 '` + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`printf "%s\n" "$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 || +printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`printf "%s\n" "$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 +_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@*) + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$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 +$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"; } && + { printf "%s\n" "$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 +printf "%s\n" "$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 + { + printf "%s\n" "/* $configure_input */" >&1 \ + && 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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$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 + printf "%s\n" "/* $configure_input */" >&1 \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + + 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 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/deps/wcslib/configure.ac b/deps/wcslib/configure.ac new file mode 100644 index 0000000..70d069b --- /dev/null +++ b/deps/wcslib/configure.ac @@ -0,0 +1,634 @@ +#----------------------------------------------------------------------------- +# Process this file with autoconf-2.53 or later to produce a configure script. +#----------------------------------------------------------------------------- +# Author: Mark Calabretta, Australia Telescope National Facility, CSIRO. +# http://www.atnf.csiro.au/people/Mark.Calabretta +# $Id: configure.ac,v 8.4 2024/10/28 13:56:17 mcalabre Exp $ +#----------------------------------------------------------------------------- + +AC_INIT([WCSLIB],[8.4],[mark@calabretta.id.au],[wcslib-8.4]) +AC_PREREQ([2.71]) +AC_REVISION([$Revision: 8.4 $]) +AC_SUBST([PACKAGE_VERSION]) +AC_DEFINE_UNQUOTED([WCSLIB_VERSION], [$PACKAGE_VERSION], [Define wcslib version]) + +# Library version number, same as package version. +LIBVER="$PACKAGE_VERSION" +AC_SUBST([LIBVER]) + +AC_CONFIG_SRCDIR([C/wcs.h]) +AC_CONFIG_AUX_DIR([config]) + +# Get the system type. +AC_CANONICAL_HOST +ARCH="${host_cpu}-$host_os" +AC_SUBST([ARCH]) + + +# Look for Flex. +AC_ARG_ENABLE([flex], [AS_HELP_STRING([--disable-flex], + [don't apply flex (use pre-generated sources)])], []) +if test "x$enable_flex" = xno ; then + FLEX= + AC_MSG_WARN([Generation of flex sources disabled by request, using + pre-generated sources.]) + +else + AC_CHECK_PROG([FLEX], [flex], [flex], [], [], []) + if test "x$FLEX" = xflex ; then + # Version 2.6.0 or later is required. + V=`flex --version | awk '{print $2}'` + W=`echo $V | awk -F. '{if ((($1*100 + $2)*100 + $3) < 20600) print "no"}'` + if test "x$W" != x ; then + AC_MSG_WARN([Flex version $V is too old, ignored.]) + FLEX= + else + AC_MSG_NOTICE([Using Flex version $V.]) + fi + fi + + if test "x$FLEX" = x ; then + AC_MSG_WARN([Flex version 2.6.0 or later does not appear to be + available, will use pre-generated sources.]) + fi +fi + + +# Look for an ANSI C compiler. +AC_PROG_CPP +AC_PROG_CC +if test "x$ac_cv_c_compiler_gnu" = xyes ; then + # Get gcc version number. + GCC_VERSION=`$CC -dumpfullversion` + AC_MSG_NOTICE([Using gcc version $GCC_VERSION]) +else + GCC_VERSION= +fi +AC_SUBST([GCC_VERSION]) + +AC_C_CONST +AC_TYPE_SIZE_T +if test "x$ac_cv_prog_cc_stdc" = xno -o \ + "x$ac_cv_c_const" = xno -o \ + "x$ac_cv_type_size_t" = xno; then + AC_MSG_ERROR([ + ------------------------------------------------------- + An ANSI standard C library is required to build WCSLIB. + + ERROR: WCSLIB configuration failure. + -------------------------------------------------------], [1]) +fi + +# Data types used in wcs.c (results not currently used). +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T + +# Check for standard C header files required to compile the library. +headers= +AC_CHECK_HEADERS([ctype.h inttypes.h limits.h locale.h math.h setjmp.h + stdarg.h stddef.h stdint.h stdio.h stdlib.h string.h], + [], [headers=no]) +if test "x$headers" = xno; then + AC_MSG_ERROR([ + ------------------------------------------------------------------- + An ANSI standard C library is required to build WCSLIB. One of the + standard C header files it requires is missing or unusable. Please + refer to the above log. + + ERROR: WCSLIB configuration failure. + -------------------------------------------------------------------], [1]) +fi + +# Flex uses fileno() and other POSIX features whose prototypes are only +# available from glibc's stdio.h with an appropriate preprocessor macro +# definition. This cannot be set within the flex description file itself +# as stdio.h is included in the generated C code before any part of the +# description. See fileno(3) and feature_test_macros(7). +if test "x$ac_cv_c_compiler_gnu" = xyes ; then + FLFLAGS="$FLFLAGS -D_POSIX_C_SOURCE=1" +fi +AC_SUBST([FLFLAGS]) + +# Check for libm. +AC_CHECK_LIB([m], [floor]) + +# System libraries that may be required by WCSLIB itself. +# SunOS, extra maths functions. +AC_CHECK_LIB([sunmath], [cosd], [LIBS="-lsunmath $LIBS"], [], []) + +# See if we can find sincos(). +AC_CHECK_FUNCS([sincos]) + +# Check the size and availability of integer data types. +AC_CHECK_SIZEOF([int]) +AC_CHECK_SIZEOF([long int]) +AC_CHECK_SIZEOF([long long int]) + +# 64-bit integer data type; use long long int preferentially since that +# accords with "%lld" formatting used in fitshdr.l, e.g. +# int size_t long int long long int +# --- ------ -------- ------------- +# gcc x86: 32 32 32 64 +# gcc x86_64: 32 64 64 64 +if test "x$ac_cv_sizeof_long_long_int" = x8; then + AC_DEFINE([WCSLIB_INT64], [long long int], [64-bit integer data type.]) +elif test "x$ac_cv_sizeof_long_int" = x8; then + AC_DEFINE([WCSLIB_INT64], [long int], [64-bit integer data type.]) +elif test "x$ac_cv_sizeof_int" = x8; then + AC_DEFINE([WCSLIB_INT64], [int], [64-bit integer data type.]) +fi + +# Does printf() have the z modifier for size_t type? Important for 64-bit. +AC_MSG_CHECKING([for printf z format modifier for size_t type]) +AC_RUN_IFELSE( + [AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], + [[char buf[64]; + if (sprintf(buf, "%zu", (size_t)1) != 1) + return 1; + else if (strcmp(buf, "1")) + return 2;]])], + AC_DEFINE([MODZ], ["z"], [printf format modifier for size_t type.]) + AC_MSG_RESULT(yes), + AC_DEFINE([MODZ], [""], [printf format modifier for size_t type.]) + AC_MSG_RESULT(no), + AC_DEFINE([MODZ], [""], [printf format modifier for size_t type.]) + AC_MSG_RESULT(assumed not) +) + + +# Starting values, may be augmented later. +SUBDIRS="C" +TSTDIRS="C" +INSTDIR="C" + + +# Ways of specifying the Fortran compiler, in order of precedence: +# configure --enable-fortran= +# F77= configure ...bash +# +# Ways of disabling Fortran: +# configure --disable-fortran +# configure --enable-fortran=no +# F77=no configure ...bash +AC_ARG_ENABLE([fortran], [AS_HELP_STRING([--enable-fortran=ARG], + [Fortran compiler to use])], []) +AC_ARG_ENABLE([fortran], [AS_HELP_STRING([--disable-fortran], + [don't build the Fortran wrappers or PGSBOX])], []) +if test "x$enable_fortran" != x -a "x$enable_fortran" != xyes ; then + F77="$enable_fortran" +fi + +if test "x$F77" = xno ; then + F77= + + AC_MSG_WARN([Compilation of Fortran wrappers and PGSBOX disabled.]) + +else + if test "x$F77" = x ; then + # Look for a Fortran compiler. + AC_PROG_F77([gfortran g77 f77 ifort xlf frt pgf77 fl32 af77 fort77 f90 \ + xlf90 pgf90 epcf90 f95 fort xlf95 lf95 g95]) + fi + + if test "x$F77" = x; then + AC_MSG_WARN([ + ------------------------------------------------------------------ + Fortran compiler not found, will skip Fortran wrappers and PGSBOX. + ------------------------------------------------------------------]) + + # Best guess at Fortran name mangling for use if a compiler does ever + # become available. + AC_DEFINE([F77_FUNC(name,NAME)], [name ## _]) + + else + if test "x$ac_cv_f77_compiler_gnu" = xyes ; then + if test "x$F77" = xg77 -o "x$F77" = xf77 ; then + # Not recognized by gfortran. + FFLAGS="$FFLAGS -Wno-globals" + fi + fi + + AC_MSG_CHECKING(whether $F77 accepts -I) + AC_LANG_PUSH(Fortran 77) + FFLAGS_save=$FFLAGS + FFLAGS=-I. + AC_COMPILE_IFELSE(AC_LANG_PROGRAM([], []), + [FFLAGS="$FFLAGS_save -I."; AC_MSG_RESULT(yes)], + [FFLAGS="$FFLAGS_save"; AC_MSG_RESULT(no)]) + AC_LANG_POP() + + # Libraries required by the Fortran compiler itself (sets FLIBS). + # Required by utilities and test programs written in C that link to + # Fortran object modules such as pgsbox. + AC_F77_LIBRARY_LDFLAGS + + # Tidy up FLIBS. + dirs= + libs= + for flib in $FLIBS + do + case "$flib" in + -L*) + dir=`echo "$flib" | sed -e 's/-L//'` + dir=-L`cd "$dir" && pwd` + dirs="$dirs $dir" + ;; + *) + libs="$libs $flib" + ;; + esac + done + + dirs=`for dir in $dirs ; do echo "$dir" ; done | sort -u | xargs` + + FLIBS="$dirs$libs" + + # F77 name mangling (defines the F77_FUNC preprocessor macro). + AC_F77_WRAPPERS + + if test "x$BINDC" = x ; then + AC_ARG_WITH([bindc], [AS_HELP_STRING([--with-bindc], + [use Fortran 2003 BIND(C) wrappers - recommended for Link Time + Optimization (LTO)])], []) + if test "x$with_bindc" = xyes ; then + BINDC=yes + fi + fi + + if test "x$BINDC" = xyes ; then + AC_MSG_NOTICE([using Fortran 2003 BIND(C) wrappers.]) + else + BINDC= + fi + AC_SUBST([BINDC]) + + SUBDIRS="C Fortran" + TSTDIRS="C Fortran" + INSTDIR="Fortran" + fi +fi + + +# System-dependent system libraries (for building the sharable library). +#----------------------------------------------------------------------- +# Darwin (contains stubs for long double). +AC_CHECK_LIB([SystemStubs], [printf\$LDBLStub], [LIBS="$LIBS -lSystemStubs"], + [], []) + + +# Library and installation utilities. +#------------------------------------ +# Static library generation. +# Ensure "non-deterministic" archives are produced during the build process. +ar rU conftest.a > /dev/null 2>&1 && ARFLAGS="U" +rm -f conftest.a +AC_SUBST([ARFLAGS]) +AC_PROG_RANLIB + +# Shared library generation - gcc only. +# Ways of disabling shared libraries: +# configure --disable-shared +# configure --enable-shared=no +AC_ARG_ENABLE([shared], [AS_HELP_STRING([--disable-shared], + [don't build the WCS shared libraries])], []) + +SHRLIB= +SONAME= +SHRFLAGS= +SHRLD= +SHRSFX= +SHRLN= + +if test "x$ac_cv_c_compiler_gnu" = xyes ; then + if test "x$enable_shared" = xno ; then + AC_MSG_WARN([Generation of WCS shared libraries disabled.]) + + else + SHVER=`echo "$LIBVER" | sed -e 's/\..*$//'` + + # Note that -fPIC is on by default for Macs, this just makes it obvious. + SHRFLAGS="-fPIC" + SHRLD="\$(CC) \$(SHRFLAGS)" + + case "$host_os" in + darwin*) + SHRLIB="libwcs.$LIBVER.dylib" + SONAME="libwcs.$SHVER.dylib" + SHRLD="$SHRLD -dynamiclib -single_module" + SHRLD="$SHRLD -compatibility_version $SHVER -current_version $LIBVER -install_name \$(SONAME)" + SHRLN="libwcs.dylib" + + case "$host_cpu" in + powerpc*) + # Switch off -fPIC (not applicable for PowerPC Macs). + CFLAGS="$CFLAGS -mdynamic-no-pic" + ;; + esac + ;; + *mingw*) + SHRLIB="libwcs.dll.$LIBVER" + SONAME="libwcs.dll.$SHVER" + SHRLD="$SHRLD -shared -Wl,-h\$(SONAME)" + SHRLN="libwcs.dll" + ;; + *) + # Covers Linux and Solaris at least. + SHRLIB="libwcs.so.$LIBVER" + SONAME="libwcs.so.$SHVER" + SHRLD="$SHRLD -shared -Wl,-h\$(SONAME)" + SHRLN="libwcs.so" + ;; + esac + fi +fi + +AC_SUBST([SHRLIB]) +AC_SUBST([SONAME]) +AC_SUBST([SHRFLAGS]) +AC_SUBST([SHRLD]) +AC_SUBST([SHRSFX]) +AC_SUBST([SHRLN]) + +# Installation utilities. +AC_PROG_LN_S +AC_PROG_INSTALL + +# Older versions of GNU make do not have the -O option, which only facilitates +# legibility of the output from parallel builds (make -j). +make --help | grep '\-O' >/dev/null 2>&1 && MAKEFLAGS="-Otarget" +AC_SUBST([MAKEFLAGS]) + +AC_MSG_NOTICE([End of primary configuration. +]) + + +# The following are required to build utilities and test programs. +# ---------------------------------------------------------------- +AC_MSG_NOTICE([Looking for libraries etc. for utilities and test suite...]) + +# Additional standard C header files required. +headers= +AC_CHECK_HEADERS([errno.h time.h], [], [headers=no]) + +# Other header files required by *nix library functions. +AC_CHECK_HEADERS([sys/stat.h sys/types.h unistd.h], [], [headers=no]) +if test "x$headers" = xno; then + AC_MSG_WARN([ + -------------------------------------------------------------------- + One or more of the header files required to compile the utilities + and/or test programs is missing. Continuing on a best-effort basis. + --------------------------------------------------------------------]) +fi + +# Large file support (only required by fitshdr utility). +AC_FUNC_FSEEKO +AC_SYS_LARGEFILE +AC_TYPE_OFF_T + +# Extra places to look for third-party libraries and header files. +LIBDIRS= + +AC_ARG_WITH([cfitsio], [AS_HELP_STRING([--without-cfitsio], + [eschew CFITSIO])], []) +if test "x$with_cfitsio" = xno ; then + AC_MSG_WARN([CFITSIO disabled.]) +else + AC_ARG_WITH([cfitsiolib], [AS_HELP_STRING([--with-cfitsiolib=DIR], + [directory containing cfitsio library])], []) + if test "x$with_cfitsiolib" != x ; then + LIBDIRS="$LIBDIRS $with_cfitsiolib" + fi + + AC_ARG_WITH([cfitsioinc], [AS_HELP_STRING([--with-cfitsioinc=DIR], + [directory containing cfitsio header files])], []) + if test "x$with_cfitsioinc" != x ; then + CFITSIO_INCDIRS="$with_cfitsioinc" + fi + + CFITSIO_INCDIRS="$CFITSIO_INCDIRS \ + /usr/local/cfitsio/include \ + /local/cfitsio/include" + + LIBDIRS="$LIBDIRS \ + /usr/local/cfitsio/lib \ + /local/cfitsio/lib" +fi + +AC_ARG_WITH([pgplot], [AS_HELP_STRING([--without-pgplot], + [eschew PGPLOT])], []) +if test "x$with_pgplot" = xno ; then + AC_MSG_WARN([PGPLOT disabled.]) +else + AC_ARG_WITH([pgplotlib], [AS_HELP_STRING([--with-pgplotlib=DIR], + [directory containing pgplot library])], []) + if test "x$with_pgplotlib" != x ; then + LIBDIRS="$LIBDIRS $with_pgplotlib" + fi + + AC_ARG_WITH([pgplotinc], [AS_HELP_STRING([--with-pgplotinc=DIR], + [directory containing pgplot header files])], []) + if test "x$with_pgplotinc" != x ; then + PGPLOT_INCDIRS="$with_pgplotinc" + fi + + PGPLOT_INCDIRS="$PGPLOT_INCDIRS \ + /usr/local/pgplot/include \ + /local/pgplot/include" + + LIBDIRS="$LIBDIRS \ + /usr/local/pgplot/lib \ + /local/pgplot/lib" +fi + + +if test "x$with_cfitsio" != xno -o \ + "x$with_pgplot" != xno ; then + LIBDIRS="$LIBDIRS \ + /usr/local/lib \ + /local/lib \ + /opt/local/lib \ + /opt/SUNWspro/lib \ + /sw/lib" + + for LIBDIR in $LIBDIRS ; do + AC_CHECK_FILE([$LIBDIR], [LDFLAGS="$LDFLAGS -L$LIBDIR"], [continue]) + done + + # Generic include directories. + INCDIRS="/usr/local/include \ + /local/include \ + /opt/local/include \ + /sw/include \ + /local \ + /usr/include" + + + # CFITSIO. + if test "x$with_cfitsio" != xno ; then + # Search for CFITSIO. + for INCDIR in $CFITSIO_INCDIRS $INCDIRS ; do + AC_CHECK_FILE([$INCDIR/cfitsio/fitsio.h], + [CFITSIOINC="-I$INCDIR/cfitsio"; break]) + AC_CHECK_FILE([$INCDIR/fitsio.h], [CFITSIOINC="-I$INCDIR"; break]) + done + + AC_CHECK_LIB([socket], [recv], [CFITSIOLIB="-lsocket"], [], [$LIBS]) + AC_CHECK_LIB([cfitsio], [ffopen], [CFITSIOLIB="-lcfitsio $CFITSIOLIB"], [], + [$CFITSIOLIB $LIBS]) + + if test "x$CFITSIOINC" = x -o "x$CFITSIOLIB" = x; then + AC_MSG_WARN([CFITSIO not found, skipping CFITSIO-dependent tests.]) + else + AC_MSG_NOTICE([CFITSIO appears to be available.]) + AC_DEFINE([HAVE_CFITSIO], [1], [Define to 1 if CFITSIO is available.]) + + # Check for fits_read_wcstab, present in CFITSIO 3.004beta and later. + AC_CHECK_LIB([cfitsio], [fits_read_wcstab], [GETWCSTAB=], + [GETWCSTAB=getwcstab.o], [$CFITSIOLIB $LIBS]) + if test "x$GETWCSTAB" != x ; then + AC_MSG_WARN([fits_read_wcstab not found in CFITSIO, will use + getwcstab.c to compile test programs.]) + fi + fi + + AC_SUBST([CFITSIOINC]) + AC_SUBST([CFITSIOLIB]) + AC_SUBST([GETWCSTAB]) + fi + + # PGPLOT. + if test "x$F77" != x -a "x$with_pgplot" != xno ; then + # Search for PGPLOT. + for INCDIR in $PGPLOT_INCDIRS $INCDIRS ; do + AC_CHECK_FILE([$INCDIR/pgplot/cpgplot.h], + [PGPLOTINC="-I$INCDIR/pgplot"; break]) + AC_CHECK_FILE([$INCDIR/cpgplot.h], [PGPLOTINC="-I$INCDIR"; break]) + done + + # FLIBS (found above via AC_F77_LIBRARY_LDFLAGS) only helps if PGPLOT was + # built using the same Fortran compiler that we are using here. + + # PGPLOT compiled by the SUN Fortran compiler but linked with something + # else. + AC_CHECK_LIB([M77], [iand_], [PGPLOTLIB="-lM77 $PGPLOTLIB"], + [], [$PGPLOTLIB $LIBS]) + AC_CHECK_LIB([F77], [f77_init], [PGPLOTLIB="-lF77 $PGPLOTLIB"], + [], [$PGPLOTLIB $LIBS]) + + if test "x$F77" != xg77; then + # For PGPLOT compiled with g77 but linked with something else. + AC_CHECK_LIB([frtbegin], [main], [PGPLOTLIB="-lfrtbegin $PGPLOTLIB"], + [], [$PGPLOTLIB $LIBS]) + AC_CHECK_LIB([g2c], [gerror_], [PGPLOTLIB="-lg2c $PGPLOTLIB"], + [], [$PGPLOTLIB $LIBS]) + fi + + if test "x$F77" != xgfortran; then + # For PGPLOT compiled with gfortran but linked with something else. + # Note that if gfortran itself is driving the linker it can be harmful + # to add -lgfortran to the link list without also adding -lgfortranbegin. + # Doing so stops gfortran from adding -lgfortranbegin which is needed to + # resolve "main". + AC_CHECK_LIB([gfortran], [_gfortran_abort], + [PGPLOTLIB="-lgfortran $PGPLOTLIB"], [], + [$PGPLOTLIB $LIBS]) + fi + + # Search for X11 includes and libraries. + AC_PATH_X + if test "x$no_x" = x; then + if test "x$ac_x_libraries" != x ; then + # Not needed for systems that keep the X11 libraries in /usr/lib. + LDFLAGS="$LDFLAGS -L$ac_x_libraries" + fi + PGPLOTLIB="-lX11 $PGPLOTLIB" + fi + + # It is possible that other libraries may be required depending on what + # graphics drivers were installed with PGPLOT. + AC_CHECK_LIB([z], [deflate], [PGPLOTLIB="-lz $PGPLOTLIB"], + [], [$PGPLOTLIB $LIBS]) + AC_CHECK_LIB([png], [png_error], [PGPLOTLIB="-lpng $PGPLOTLIB"], + [], [$PGPLOTLIB $LIBS]) + AC_CHECK_LIB([pgplot], [pgbeg_], [PGPLOTLIB="-lpgplot $PGPLOTLIB"], + [], [$PGPLOTLIB $FLIBS $LIBS]) + AC_CHECK_LIB([cpgplot], [cpgbeg], [PGPLOTLIB="-lcpgplot $PGPLOTLIB"], + [PGPLOTLIB=], [$PGPLOTLIB $FLIBS $LIBS]) + + # Only need the PGPLOT include file to build PGSBOX. + if test "x$PGPLOTINC" != x; then + SUBDIRS="$SUBDIRS pgsbox" + INSTDIR="pgsbox" + fi + + # Also need the PGPLOT library to build pgtest and cpgtest. + if test "x$PGPLOTLIB" = x; then + AC_MSG_WARN([PGPLOT not found, skipping PGPLOT-dependent tests.]) + else + AC_MSG_NOTICE([PGPLOT appears to be available.]) + + TSTDIRS="$TSTDIRS pgsbox" + fi + fi + + AC_SUBST([PGPLOTINC]) + AC_SUBST([PGPLOTLIB]) +fi + + +# Utilities are compiled last since they need the libraries. +# Ways of disabling them: +# configure --disable-utils +# configure --enable-utils=no +AC_ARG_ENABLE([utils], [AS_HELP_STRING([--disable-utils], + [don't build the WCS utilities])], []) +if test "x$enable_utils" = xno ; then + AC_MSG_WARN([Compilation of WCS utilities disabled.]) +else + SUBDIRS="$SUBDIRS utils" + INSTDIR="$INSTDIR utils" +fi + +AC_SUBST([SUBDIRS]) +AC_SUBST([TSTDIRS]) +AC_SUBST([INSTDIR]) + + +# Default observer coordinates for sundazel. +if test -f "$HOME/.sundazelrc"; then + . "$HOME/.sundazelrc" +fi + +if test "x$OBSLNG" = x; then + OBSLNG=0.0 + OBSLAT=0.0 + OBSTZ=0.0 +fi + +AC_SUBST([OBSLNG]) +AC_SUBST([OBSLAT]) +AC_SUBST([OBSTZ]) + + +# Tidy up incrementally defined variables. +FLFLAGS=`echo $FLFLAGS` +CPPFLAGS=`echo $CPPFLAGS` +CFLAGS=`echo $CFLAGS` +FFLAGS=`echo $FFLAGS` +LDFLAGS=`echo $LDFLAGS` + +AC_MSG_NOTICE([End of auxiliary configuration. +]) + +# Set from the environment for code development. +AC_SUBST([FLAVOUR]) +AC_SUBST([MODE]) +AC_SUBST([VALGRIND]) +AC_SUBST([EXTRA_CLEAN]) + + +# Do it. +AC_MSG_NOTICE([Configuring files...]) +AC_CONFIG_FILES([makedefs wcslib.pc]) +AC_CONFIG_HEADERS([wcsconfig.h wcsconfig_f77.h wcsconfig_tests.h wcsconfig_utils.h]) +AC_OUTPUT diff --git a/deps/wcslib/doxygen/Bonne.gif b/deps/wcslib/doxygen/Bonne.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f5e5fd40986a3684c7938787433c17ae3cf2125 GIT binary patch literal 9356 zcmV;7By-zGNk%v~VGIH50P+9;00061{{a90|7K?Y|7K=0nKJ+Y00000EC2ui01N@^ z000C22)f+}*y*TU5yZ>M)j$~<`XsWJk>%MR-&vb3yc&_h!@BhG{qChMbgvgn( zm@F-ajDmpJtU8H;=+J205DAVWBg^cXHRbF=+#s;e5h?)Ocmvd1xIS*buODD?duwlW zS`B!4gL{GwYJCcHjc|R2e~1bLnwpS{NdpvQ5SE=tWe%1AZ=0J@lb%6DprLO9wzsxh zr9MZcq?wuviKi>x&46Q~LbKW6+ykA%Z_3&; z=-kB zT?{b{8wBGBAyFTR6J=Da<}lnPjdS{On-|cZ%yS!;=){7}=EIaMR%y{!1e#8mG53K= zh{Mh-p<75kkTT7|Q=l+b9zsS=ov=xgsy%BeGTu`*VIz>~bQNn*v2`jApc&6kqd;(% zQM6htnVqyHb@8q1)`U}6c5IQWi$@OLyhvL>dKwH8;0KQgFZNg%P1#F{ao#i;>98;* z4Ku0gbQyEGMw>f3`7Edwo{*;rx%r$sYie}62<(>kP%B~C9!%S*C9-YroV=HD7E!7) zh2av!xl*kNd2*+(5I%7JJW_PME|dYk{xg#B_YfBTneIJ|(oW*XFD^gF^!}Li5?D9E zWADNDRe{2-!4Q4*6$8~&=*72Rgyuc?6$_DZgG_tQ7+6vz32yjWgBP$d&4hj60bo=Kk0VpghSXyJ020WJ@p&1bdy+7SRU;K47=>^Gco>Fb z{2WoH8z^R>BnKIdCz54>2Y*$t^p2FE6S}vYRNE9%MSxg|HLSc!lY8;9|elJ#2h#RVU{`03;Rk6w=nYGGy zYaNkMI%+1&3ED!9WB8QLa1#Cli? z>u1B=n&*=tiA+2Jw?Jkxu8o`>+GallTiTi`G2_}}nTqnHGIw+g<1&_*+>8omsVH25 z()508g|%_@%wK$TFpQ5H5Sypb(GVtWBh=)EVu4>Bdn&aMUx>V#v}RY3N-9s`VF-}~ zd<{Y$0$2@()%`jUz~F=ve)dfdzcL6FkM*-+cDUeT&cKrXGIjUBFoE5ZFg?=&xXOhG zP*UikD~hr#OHtGrE9j~)k z?D|4ZFvN+XZn5kadNEbZ*pVH408IxL!S9*w={Cr{{4&@#-d{&o;M|dM`54`6-riDx z`1iozL(9X?@5|;CX%$O22wT=S6_bs{8SNX|@~B6lVJRwCgArWm@&`PM@eeVp>y9a= zVX*%_LwjK`pfH9ZiCJ)sJ9>%V24rQz$?Z!46I?_0az}w#;15E^8($CPz&H-gqj#zh zVe^tABCf%$R833M!c3=;?zIE}H$-6Ep2h&-xdQ%KJY3revIwn7FmHO{h8ByV6!muj6kSk_Tx?1fDR>70f-w%l8siW@rH?FdqARo82-upI zMn1ksj&sb;bU?^IEIvVTlIg`xSmwu(l}ID3&<7k(r4RZM5|Qll6xamWNI{AvileC6 zm$;xI3K))39DJJw2FD;x<#JT$i^ExFiHyF5(kfwkqD#W0nk@VcmH7jM5?@BWMvjsj zkaS^Oio%W}0B3(zBqlKnCx8IpLY%W)M&3G!7-V4b9KrC?J5gs1M2rL;&cqglhQl%k zb}cv8gyO=MbU59KJR_>p$oW(qb$UYB*rZHi5uz$i zWYY;viIXPEZkqAQ--Pn{y+77ZaiLUZY7B}POQKV!R49T(zxpLCiV-9njcNlih*8ln z^{tv{V!WUlw)Y{Tr6?Q_OX{hYtSXZ{a>Jxhb7_>f;ZLJ)6Raz#DH^0*?GU4E#ZvPL zin%Bh5u8zJUK4r07ygM*T0PBVvZ}%BR5YW}BSu&Sx|5m)5Ca?qT*V;NwmGG6CNZh( zgcwHGPT4h*Ra_~I`06xvScI(7{`+Vds*)K^Ws<6$ z30BX&)e`2sx;Qr^e4IM|)#l7Mgil=#$2cw(DCQO2}Q9PC;jHTkXJBP(UF@ulnPimcqWFntfzL%Tu1*%n|L5MI{XH1 zM|5gY#{P>AOWT;reCZr)kfUPVGp%j92RDIHb|eL{rKN<4Yk&I-tiJskX4WAUY9M!G z{WWn(kI&q|o>~6b$asmH$)zr^OkEFa9;?f7wN&qv=1+~;hA`t!OiJ60!x%fVT02~z z0Rmya-U$=?vKh;ZWjASxWt@FLa-L+uWW2n2bUP=;7UzXRMPg^@yy+_HD^FcS1gS!q zSJt#|HgJo=Z7w)MqS~H>0w*??%~I6XzlH}QiJ7!h2?#j}gUFxnA**C&?h zM5hF4#K(j0AHfa}qn;-NH+E?Jv(0p}>&a3I_ON!Sr>bqMNSyPIP1UbDp>S@0%Mi8q zXwO*$rLE(MhQ+Z-Y#6_DT^8LV3n3Zg#-7MmH)k%MuBXnmQ~g>ZAH5l3)3;($t80YE zs*{>_9{v<}`qsm9bA4#Ma}7lL^`D9U&`^KfHx%$R61~SP@HBpU2Ogp_L*_Ii2la53 zhY60CDVH*B^jCf>F@3Fub#YO9{r7N{HR z{va-uXcdMM9VA*<5?|AhHJw!+;eu3Tm{@B?8wSyVr%{B*@kA@}h%y8Q1r}4o<_~031iG?| zyjW)z{41Liz?dUn8pe^wjRkP40(2|Px7$6&2Hdc~;JJ>ks!y*bI zV0XqbHkC6n_j_?TS_d;k4l#5~a}_6dlN701>_v*-l9B5mh*yVmB9Sxgb}O3xD3p#t zl&|P3wBurV)qYwSeDuh3aM&H8(Gt;6Yo4Qcd2^Gw)h#M@kr3jO;uDo(GkQd)b8Dc9 zR`qDgKv%Q^ShculI5>okB`E8(gZ~F?OgAljXLRt;m0kIjaT4aXorDYA-_ta95d$Ia~rKWx5hC%%&QG*^YByQif?4NJEzXWtQg= z20zAcYJom0@kJTrG}T9!m&qan37e5=H=e0Ik|l|Oh)kw=jE0n&L3Bc5*(sHEDZm+P zG`E+s`C^8GE^RpnYXN=s_ixqbBHdV3k$Hl__jLktDn|%3f|HTbw1WN#CN#>ZcLx`B z)T3shIXP}UO3p=84B=##bw7Xip1AXOy+Bn6 zVP?_UA$G|Zn%Fh|2uEvSKV=z**0^l4S&f9&VG=NiOZbrZmXYBDp}-Yo6M6^mNo zC&jRg_OYR5WC{5Biga@p@gSo989p<_nXM^-ss^118C>jC4u)rWp;bGKVvrEYowT-` z_CgFinhieMdW$zZLYite$4K*WTOZ;!<0+zr`J>}`Egbi7ESe+->09yPZ`fsmA<}OX z1Z##=p|rLuJxZU;W}j1;pm{|?Xv&!mzgY@`mt6 zc!cmqpLd0VTBwGEIu9cbtlAHXY96slm2h+wjtV2{5QMe5R=40yyt*@*ff#-ytizfx zGij`_E8-|l3*xclG&l_ z_ZUU>pJ3Wnt?_#A854bp7ZtWC*!P*#vrzduixYqjphi9O;(K_OtF^gJk#c^Hw`Ye* zp44P8R~l~X5T^8yUOZ!R6e~)P#+uREsyEX#)p}Po{?r(oIATGQWw7Isd;pFCBu*kh zqxU1M;Mk`fRtWE6v-D_Lu=aO5Sv0BDBdP(O_K0NN^)heT4=`b*5802@gi%#0u$wcT zVW0^Cbwm<(wX{J<^LKG|CKihxar&u(t45QkrlWAUO8O9l*soW&RcILphDR5ZE4L%K zUBh*P2N4mI8x{9pX=vN85WiQG)HV~MI zV}*rAF|=l~Jwd>UlB$XpzzPbuPevnyYmawVHu^h6o24xdF$}wfOcTO^l+&|lfr*Y= zL*^QG^IdU6ta-67bxcDye*Ngmz8_p(wR{jiTdGz zSQ2)OGmL=LYO~p92Asmxi?I%*A<}YFuL&g1yOgm(w-v)?FlQ`wYmz5A1i~4{a>-Xi z?1&Z#I3e3F|0W~yI=-od1wH$t>t+7B3A)BLnhW)-c(5i1P8MD?Y+c$ZvIOy(aod!g zHX-IJvUurPn2@JvOhi-g$PGgZwAxF27?`n#3U++5sRlRmi6or0CiqspvZ%ijcgnOg zZx+TLd(yrNqh@0y32p4gV@(mD%4Jq8eassIQYH1(scPI4PvEL8 zI#3@uw=G(~GAPKVi5@yedfDk2wE1QC&8G*Ynd08V8vUykHkhmAc9)nn9CDj zuC*7NqxOIeah&)Pn0*y!O#Yh9)WV0tIGyg4tfZoe%9PS_Fj5W47uPgV$Yn{$xwsY3 zl5J(vV!BnRSkSZ#x}z9jm9m^C^3MuFk6D;LY5PaR3(TP`&+GTMnQ1=6MN`c@3U5+F zJD1jriWm3nHAItk9E>Q<8Wp?T%^yj`Ei)KT6c&%b)D+UoJwvNoD2oSSg<9vS5elPl zCeV`7tE`F7kh~kivB<+B*8hvyWlgDz3VpQOI(&VNqJqQq!--VMA8zQs#$o|-M2&de zajKY$<01;6ZJL0sxgR41$+#HV6dP`^q!FA~;We^PF}#GAJyZ1)0+?@^Hjfb6 zWs#?(q-q%&#pk`+q@4lCeWd##WS`}Tk%5}r6*y2QyfOTbVgbbaEf-8}TprQ8^YyXh zb{j+}TIM~zjY7@G{4ebNIA>S2gRy6G2{^A=D;w!Fc*4lJE4spM-s{5(Bt~iIe@EP;Yj4)<5DF9M$Tww zDP9_3x!`E<qElfV#GJ`CH_Ct62<$4F?L0)JKL(}UQ*}xiyrY0HSOL3O>!l}qUTrM{lYa8 zv4`pnz*H*ClfEZiwy!jNEqP9{Oe{bN%f%s8ei>t2rHH zzD!tYwJt-1an-yxFihRXhQ#SEAzf*xRZu(ZdrBt%ZR%urkkS}oQNupl?qy6lC0e8) z+L1l(y}eS_Cxy$Zr1B*DP>>h?&dv-)%RM7t-DV0jG(7t1Bt`1Bex-_IXb*lbAK_dVeC-suI%y~|A#L^6@9o=Ds$mK{OH!R^IKO% zB6Xeifz+k0bXo3|ruRl66)uQ6rd&crRbB1^zAu}B_*qS-Gfvgqne!oV@m@b_L8$6~ zg4C4`!QF0m6FI{L1~_!>aJ1qlO3B?W>-n6Ouf#LRm9Oi3GLIF%MN47zqc)R2Pc4vu zbE&sXpQ7(H!BMX-(+czS0ZnPKe~@-gb>&a~m2tWnQ0c8w08wA9% zwRwx0mNi6a3IZWjAvU(wV9sUe!OV*@>>m6(T?QxGGC0CR#}b##wS4O}-4 z9TQ>&YBxq75;&PLD}n-SDx58M8jDzzFsZ6AMjU)NuZl&RQ94XK5TH>pR4=WNbRfVP zl(c_=WUZVFd1EUqC>W#}6MG_AtA1Iwks3f=Sg&EHW`cw<7l`dhzmCO_{?$3kdZHiB zvC$#aGBj9Iks^gB06)luQ$#F;fQH<J+g;Ic$0(6gK!jJ~9SN>m^uCy-63$b)Ed$B~hB zR1R$-fnP{~d7c2XS&EH|TNaYZ!XZr{RT4M?tZi$wk18jeq`j*d>7#{06_WgVTeaU7 zB{wV%wSoaG8<}Oo<{(h0hFO9(6~SGSkQQA@glSHs*bYn4w4usqjQCQ}5pAMdPvElQ zb78{}uzFCe*@_S<8yTi6GYIbN#_L{qdes>(RiJT=DA>j}%jwPj64us6<)KiaWAbFb z1hw^cu?6TErOemC-Nr;4#HDMRV#J8!*^($d*mw$fW8Nd_A(2c2THzv=I`DbG!YNHnMiYMh(dL3q)nNhMQ4*P!AYMbD(TEg+ zwZGqX;1&jau6qFlrj6Uqpl~qg9^kq6lj2RV} zpa6NMkTw-*Mh{P^qvVo;wP!+#Cyu4(KVn$;$)8x*)|37|uXJhXUjoV}VH4lw_b8fh zHiBTA@rB1_YG9`IkqVw-TEiXsh#Cv2f)Zv?cBp;A0!g6NktmNmeAifLvkoy6Ws=S` z;ysoI0;{EJIjLd=PG*wI3fNxRjj~)(5}uKn$(fs+Vp7}MQ;udUt}mH%+le}j?8+6n zQI&A63%$k$Dxa6u@~(^!A2O;8yL@0xWIOWZ8o<~3Ytj*!ym+g(wE}#DwZQ1~;hb?m zRfd!Qgjw-C7nQ2z00Gc7@1!=!l0>Hcz1f<8rx+`;P}`Qsp$(K~Rwq-V%o(2!_8bys zO*fDMTPQ4=EV0gb9CV$<+5!vHOPP+SXcUY1gZ}N(N`B-tn<(2mjDuT*v~6j@8qtHv zH1`4#HDaT(5DSpu9ZM>WF2Of+`HtlpAS=;5@;>)IeFnjj^HOzcXp3XHazev*mfF&J%xq*^dojc446RRg;K9yh5+ z_juA;prp(z{pY@ekg;BdAYCh2`AQNH#*rs;g0?~B|1l{x|C(%|U`k){% z8-o^|5;&J*A~SQ>Y^4gRvPO)c@SaA4=W(prAP=4-LISdH6X?mXCk<; zB`^|HVwpoG^NNZtF;MY@LPj+@LaTwxaxtuDNHOHTiZ0`y4YC0Ty%>grz=wGdYuHTD zI6!#bG%hsFg(k)oza%?%0OCJ^O%*S#asRfW3}b5Nv;!r8EeZs!T8EIz5$kTu%{VZl1Lvy2${e{i%?4o ziPPGPf?@nA=-4_{U#0U{iBO$py+{HRV2p=}6_;1M=aKfkwl{<&u1FDMPCpJuiM~`v z9#r>4=e$RV)UB>nRaQV4T&J_*+0%JN%b@Uzw=hpIYht(79_4zKu7&cL^IVHW=s^&j z4c=2dIr~u2Wo`;x~N5tlCA-B*B1_}S8!XvUh1NO60>bZ#*jjl`$|Z4i_M6yzI%(`>Ns2IffjFq z*a0EjIB)BW$o`%%L1c+8*(XhwF;uLnqdLH@Vay8Xl`*usvp#kn(-Dh?SEJy~a8zSu zw(4(?5@Xh`8LdA?jJ{%$o;i!`2_U{Rp7Tu7@yOMcI2)1bqA&xCGnQmZsuhpbehT(<9nh1r4m=)=u>uJU|S?O_vT#Zs=0WUu!r zYq)fEu2OXDuyY*(3Ku82wFzdhnKfKui}Y8=4Y9md*XuoPdees$;k4m&?f6;^B1KVO zo{6C<@ACH#p!GKJcr2&X9&)$hnhR|QZc}S;TgKO*8jRsBLQ68{48e3nui`9ceV@k{ zo0<&GtuLR5%brU__@CA^?TXl@2Tu4FkA@ zST;>|HfpP&Rae)2FLO167J?zTg2`tqB+~_avqgUphGOV1dsK#U-OIhGLU8$UzR0;5#wsx(@NmvOkMQV<(kRwKjhd3Eh+{OtXSdJ@^ zbF%gf9>;wGBaHWuQc|guW!01fh;Q-nc98)d4+mcj8Di)6k-%720?9Sx$dq7NSkbru zJeh(Tah7pXkR*{~^Wbk?qYgqL? zc4deElPTC`pXB*JibwXQ67ErU;6k=|P~masdy0Fs0CALUkIb{Xi67x{hLsqc^Ic zXG*7n+Nc2Y1NsR=IohX1v~rGmseZtwmCBDqVWaf1rI;G3p(CY#`l$G$r6ww>1}Y1X z`lox4I-shmvf2-=Dj;9VVzZj7^gyTqAOLdFPr4ecBl833CalJKtjL